This commit is contained in:
Stephen Zhou
2026-02-06 16:56:18 +08:00
parent 72ad187af2
commit feb4ab8eb3
2 changed files with 14 additions and 19 deletions

View File

@@ -5,7 +5,7 @@ import { Instrument_Serif } from 'next/font/google'
import { NuqsAdapter } from 'nuqs/adapters/next/app'
import GlobalPublicStoreProvider from '@/context/global-public-context'
import { TanstackQueryInitializer } from '@/context/query-client'
import { clientEnvKeys, env, getDatasetAttrKeyFromEnvKey } from '@/env'
import { getDatasetMap } from '@/env'
import { getLocaleOnServer } from '@/i18n-config/server'
import { cn } from '@/utils/classnames'
import { ToastProvider } from './components/base/toast'
@@ -39,7 +39,7 @@ const LocaleLayout = async ({
children: React.ReactNode
}) => {
const locale = await getLocaleOnServer()
const datasetMap = Object.fromEntries(clientEnvKeys.map(envKey => [getDatasetAttrKeyFromEnvKey(envKey), env[envKey]]))
const datasetMap = getDatasetMap()
return (
<html lang={locale ?? 'en'} className={cn('h-full', instrumentSerif.variable)} suppressHydrationWarning>

View File

@@ -50,23 +50,7 @@ const clientSchema = {
NEXT_PUBLIC_ZENDESK_WIDGET_KEY: optionalString,
} satisfies ClientSchema
export type ClientEnvKey = keyof typeof clientSchema
type SnakeToKebabCase<S extends string> = S extends `${infer Head}_${infer Tail}`
? `${Lowercase<Head>}-${SnakeToKebabCase<Tail>}`
: Lowercase<S>
type DatasetAttrKeyFromEnvKey<K extends ClientEnvKey> = K extends `${typeof CLIENT_ENV_PREFIX}${infer Suffix}`
? `data-${SnakeToKebabCase<Suffix>}`
: never
export type ClientDatasetAttrKey = DatasetAttrKeyFromEnvKey<ClientEnvKey>
export const clientEnvKeys = Object.keys(clientSchema) as ReadonlyArray<ClientEnvKey>
export function getDatasetAttrKeyFromEnvKey<K extends ClientEnvKey>(key: K) {
const suffix = kebabCase(replace(key, CLIENT_ENV_PREFIX, ''))
return `data-${suffix}` as const
}
type ClientEnvKey = keyof typeof clientSchema
function getRuntimeEnvFromBody<K extends ClientEnvKey>(key: K) {
if (typeof window === 'undefined') {
@@ -134,3 +118,14 @@ export const env = createEnv({
},
emptyStringAsUndefined: true,
})
function getDatasetAttrKeyFromEnvKey<K extends ClientEnvKey>(key: K) {
const suffix = kebabCase(replace(key, CLIENT_ENV_PREFIX, ''))
return `data-${suffix}` as const
}
const clientEnvKeys = Object.keys(clientSchema) as ReadonlyArray<ClientEnvKey>
export function getDatasetMap() {
return Object.fromEntries(clientEnvKeys.map(envKey => [getDatasetAttrKeyFromEnvKey(envKey), env[envKey]]))
}