Merged in feat/sw-2863-move-contentstack-router-to-trpc-package (pull request #2389)

feat(SW-2863): Move contentstack router to trpc package

* Add exports to packages and lint rule to prevent relative imports

* Add env to trpc package

* Add eslint to trpc package

* Apply lint rules

* Use direct imports from trpc package

* Add lint-staged config to trpc

* Move lang enum to common

* Restructure trpc package folder structure

* WIP first step

* update internal imports in trpc

* Fix most errors in scandic-web

Just 100 left...

* Move Props type out of trpc

* Fix CategorizedFilters types

* Move more schemas in hotel router

* Fix deps

* fix getNonContentstackUrls

* Fix import error

* Fix entry error handling

* Fix generateMetadata metrics

* Fix alertType enum

* Fix duplicated types

* lint:fix

* Merge branch 'master' into feat/sw-2863-move-contentstack-router-to-trpc-package

* Fix broken imports

* Merge branch 'master' into feat/sw-2863-move-contentstack-router-to-trpc-package


Approved-by: Linus Flood
This commit is contained in:
Anton Gunnarsson
2025-06-26 07:53:01 +00:00
parent 0263ab8c87
commit 002d093af4
921 changed files with 3112 additions and 3008 deletions

View File

@@ -12,7 +12,7 @@ import styles from "./page.module.css"
import type { LangParams, PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default async function MyPages({}: PageArgs<
LangParams & { path: string[] }

View File

@@ -5,7 +5,7 @@ import TrackingSDK from "@/components/TrackingSDK"
import type { LangParams, PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default async function ProfilePage({}: PageArgs<LangParams>) {
const caller = await serverClient()

View File

@@ -1,4 +1,4 @@
import { setPreviewData } from "@/lib/previewContext"
import { setPreviewData } from "@scandic-hotels/trpc/previewContext"
import InitLivePreview from "@/components/LivePreview"

View File

@@ -6,8 +6,6 @@ import { env } from "@/env/server"
import CampaignOverviewPage from "@/components/ContentType/CampaignOverviewPage"
import CampaignOverviewPageSkeleton from "@/components/ContentType/CampaignOverviewPage/CampaignOverviewPageSkeleton"
export { generateMetadata } from "@/utils/generateMetadata"
export default async function CampaignOverviewPagePage() {
if (!env.CAMPAIGN_PAGES_ENABLED) {
notFound()

View File

@@ -6,7 +6,7 @@ import { env } from "@/env/server"
import CampaignPage from "@/components/ContentType/CampaignPage"
import CampaignPageSkeleton from "@/components/ContentType/CampaignPage/CampaignPageSkeleton"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default async function CampaignPagePage() {
if (!env.CAMPAIGN_PAGES_ENABLED) {

View File

@@ -1,6 +1,6 @@
import CollectionPage from "@/components/ContentType/StaticPages/CollectionPage"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default function CollectionPagePage() {
return <CollectionPage />

View File

@@ -9,7 +9,7 @@ import ContentPage from "@/components/ContentType/StaticPages/ContentPage"
import { getLang } from "@/i18n/serverContext"
import { isLoggedInUser } from "@/utils/isLoggedInUser"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default async function ContentPagePage() {
const lang = await getLang()

View File

@@ -8,7 +8,7 @@ import DestinationCityPageSkeleton from "@/components/ContentType/DestinationPag
import type { PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default async function DestinationCityPagePage(
props: PageArgs<{}, { view?: "map"; filterFromUrl?: string }>

View File

@@ -8,7 +8,7 @@ import DestinationCountryPageSkeleton from "@/components/ContentType/Destination
import type { LangParams, PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default async function DestinationCountryPagePage(
props: PageArgs<LangParams, { view?: "map"; filterFromUrl?: string }>

View File

@@ -6,7 +6,7 @@ import DestinationOverviewPage from "@/components/ContentType/DestinationPage/De
import type { LangParams, PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default function DestinationOverviewPagePage({}: PageArgs<LangParams>) {
if (env.NEW_SITE_LIVE_STATUS === "NOT_LIVE") {

View File

@@ -9,7 +9,7 @@ import HotelSubpage from "@/components/ContentType/HotelSubpage"
import type { PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default async function HotelPagePage(
props: PageArgs<{}, { subpage?: string; view?: "map" }>

View File

@@ -1,6 +1,6 @@
import LoyaltyPage from "@/components/ContentType/LoyaltyPage"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default function LoyaltyPagePage() {
return <LoyaltyPage />

View File

@@ -7,7 +7,7 @@ import { parseBookingWidgetSearchParams } from "@/utils/url"
import type { NextSearchParams, PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export { generateMetadata } from "@/utils/metadata/generateMetadata"
export default async function StartPagePage(
props: PageArgs<{}, NextSearchParams>

View File

@@ -1,10 +1,11 @@
import { notFound } from "next/navigation"
import { myStay } from "@scandic-hotels/common/constants/routes/myStay"
import {
BookingErrorCodeEnum,
PaymentCallbackStatusEnum,
} from "@/constants/booking"
import { myStay } from "@/constants/routes/myStay"
import { serverClient } from "@/lib/trpc/server"
import GuaranteeCallback from "@/components/HotelReservation/MyStay/Ancillaries/GuaranteeCallback"

View File

@@ -1,8 +1,8 @@
import { notFound } from "next/navigation"
import { GetCurrentBlockPage } from "@/lib/graphql/Query/Current/CurrentBlockPage.graphql"
import { GetCurrentBlockPageTrackingData } from "@/lib/graphql/Query/Current/CurrentBlockPageTrackingData.graphql"
import { request } from "@/lib/graphql/request"
import { GetCurrentBlockPage } from "@scandic-hotels/trpc/graphql/Query/Current/CurrentBlockPage.graphql"
import { GetCurrentBlockPageTrackingData } from "@scandic-hotels/trpc/graphql/Query/Current/CurrentBlockPageTrackingData.graphql"
import { request } from "@scandic-hotels/trpc/graphql/request"
import ContentPage from "@/components/Current/ContentPage"
import Tracking from "@/components/Current/Tracking"
@@ -11,9 +11,11 @@ import type { LangParams, PageArgs, UriParams } from "@/types/params"
import type { GetCurrentBlockPageData } from "@/types/requests/currentBlockPage"
import type { TrackingData } from "@/types/requests/trackingData"
export default async function CurrentContentPage(props: PageArgs<LangParams, UriParams>) {
const searchParams = await props.searchParams;
const params = await props.params;
export default async function CurrentContentPage(
props: PageArgs<LangParams, UriParams>
) {
const searchParams = await props.searchParams
const params = await props.params
try {
if (!searchParams.uri) {
throw new Error("Bad URI")

View File

@@ -1,10 +1,10 @@
import { type NextRequest, NextResponse } from "next/server"
import { languageSchema } from "@scandic-hotels/common/utils/languages"
import { env } from "@/env/server"
import { serverClient } from "@/lib/trpc/server"
import { languageSchema } from "@/utils/languages"
export const dynamic = "force-dynamic"
export async function GET(request: NextRequest) {

View File

@@ -4,12 +4,11 @@ import { z } from "zod"
import { Lang } from "@scandic-hotels/common/constants/language"
import { getCacheClient } from "@scandic-hotels/common/dataCache"
import { generateHotelUrlTag } from "@scandic-hotels/trpc/utils/generateTag"
import { env } from "@/env/server"
import { badRequest, internalServerError, notFound } from "@/server/errors/next"
import { generateHotelUrlTag } from "@/utils/generateTag"
import type { NextRequest } from "next/server"
const validateJsonBody = z.object({

View File

@@ -4,12 +4,11 @@ import { z } from "zod"
import { Lang } from "@scandic-hotels/common/constants/language"
import { getCacheClient } from "@scandic-hotels/common/dataCache"
import { generateLoyaltyConfigTag } from "@scandic-hotels/trpc/utils/generateTag"
import { env } from "@/env/server"
import { badRequest, internalServerError, notFound } from "@/server/errors/next"
import { generateLoyaltyConfigTag } from "@/utils/generateTag"
import type { NextRequest } from "next/server"
enum LoyaltyConfigContentTypes {

View File

@@ -2,12 +2,11 @@ import { revalidateTag } from "next/cache"
import { headers } from "next/headers"
import { getCacheClient } from "@scandic-hotels/common/dataCache"
import { generateTag } from "@scandic-hotels/trpc/utils/generateTag"
import { env } from "@/env/server"
import { badRequest, internalServerError } from "@/server/errors/next"
import { generateTag } from "@/utils/generateTag"
import type { Lang } from "@scandic-hotels/common/constants/language"
// This file is primarily to be used locally to test

View File

@@ -4,20 +4,19 @@ import { z } from "zod"
import { Lang } from "@scandic-hotels/common/constants/language"
import { getCacheClient } from "@scandic-hotels/common/dataCache"
import { env } from "@/env/server"
import { badRequest, internalServerError } from "@/server/errors/next"
import { affix as breadcrumbsAffix } from "@/server/routers/contentstack/breadcrumbs/utils"
import { languageSwitcherAffix } from "@/server/routers/contentstack/languageSwitcher/utils"
import { affix as metadataAffix } from "@/server/routers/contentstack/metadata/utils"
import { affix as pageSettingsAffix } from "@/server/routers/contentstack/pageSettings/utils"
import { resolveEntryCacheKey } from "@/utils/entry"
import { affix as breadcrumbsAffix } from "@scandic-hotels/trpc/routers/contentstack/breadcrumbs/utils"
import { languageSwitcherAffix } from "@scandic-hotels/trpc/routers/contentstack/languageSwitcher/utils"
import { affix as metadataAffix } from "@scandic-hotels/trpc/routers/contentstack/metadata/utils"
import { affix as pageSettingsAffix } from "@scandic-hotels/trpc/routers/contentstack/pageSettings/utils"
import { resolveEntryCacheKey } from "@scandic-hotels/trpc/utils/entry"
import {
generateRefsResponseTag,
generateRefTag,
generateTag,
} from "@/utils/generateTag"
} from "@scandic-hotels/trpc/utils/generateTag"
import { env } from "@/env/server"
import { badRequest, internalServerError } from "@/server/errors/next"
import type { NextRequest } from "next/server"

View File

@@ -1,9 +1,9 @@
import { type NextRequest, NextResponse } from "next/server"
import { dt } from "@scandic-hotels/common/dt"
import { createCounter } from "@scandic-hotels/common/telemetry"
import { env } from "@/env/server"
import { dt } from "@/lib/dt"
import {
getEntries,

View File

@@ -1,11 +1,9 @@
import { type Lang } from "@scandic-hotels/common/constants/language"
import { createCounter } from "@scandic-hotels/common/telemetry"
import { removeTrailingSlash } from "@scandic-hotels/common/utils/url"
import { env } from "@/env/server"
import { removeTrailingSlash } from "@/utils/url"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { SyncItem } from "@/types/sitemap"
export function mergeEntries(