Clement 1593fa3493
All checks were successful
Build Docker Image Front / run (push) Successful in 25s
Build Docker Image Back / run (push) Successful in 25s
feat: astro template for front and fix login(#13)
Reviewed-on: #13
Co-authored-by: Clement <c.boesmier@aptatio.com>
Co-committed-by: Clement <c.boesmier@aptatio.com>
2024-05-21 10:07:56 +02:00

203 lines
3.5 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-empty-interface */
import merge from 'lodash.merge'
import type { MetaData } from 'types'
interface Config {
site?: SiteConfig
metadata?: MetaDataConfig
i18n?: I18NConfig
apps?: {
blog?: AppBlogConfig
}
ui?: unknown
analytics?: unknown
}
export interface SiteConfig {
name: string
site?: string
base?: string
trailingSlash?: boolean
googleSiteVerificationId?: string
}
export interface MetaDataConfig extends Omit<MetaData, 'title'> {
title?: {
default: string
template: string
}
}
export interface I18NConfig {
language: string
textDirection: string
dateFormatter?: Intl.DateTimeFormat
}
export interface AppBlogConfig {
isEnabled: boolean
postsPerPage: number
isRelatedPostsEnabled: boolean
relatedPostsCount: number
post: {
isEnabled: boolean
permalink: string
robots: {
index: boolean
follow: boolean
}
}
list: {
isEnabled: boolean
pathname: string
robots: {
index: boolean
follow: boolean
}
}
category: {
isEnabled: boolean
pathname: string
robots: {
index: boolean
follow: boolean
}
}
tag: {
isEnabled: boolean
pathname: string
robots: {
index: boolean
follow: boolean
}
}
}
export interface AnalyticsConfig {
vendors: {
googleAnalytics: {
id?: string
partytown?: boolean
}
}
}
export interface UIConfig {}
const DEFAULT_SITE_NAME = 'Website'
const getSite = (config: Config) => {
const _default = {
name: DEFAULT_SITE_NAME,
site: undefined,
base: '/',
trailingSlash: false,
googleSiteVerificationId: '',
}
return merge({}, _default, config?.site ?? {}) as SiteConfig
}
const getMetadata = (config: Config) => {
const siteConfig = getSite(config)
const _default = {
title: {
default: siteConfig?.name || DEFAULT_SITE_NAME,
template: '%s',
},
description: '',
robots: {
index: false,
follow: false,
},
openGraph: {
type: 'website',
},
}
return merge({}, _default, config?.metadata ?? {}) as MetaDataConfig
}
const getI18N = (config: Config) => {
const _default = {
language: 'en',
textDirection: 'ltr',
}
const value = merge({}, _default, config?.i18n ?? {})
return value as I18NConfig
}
const getAppBlog = (config: Config) => {
const _default = {
isEnabled: false,
postsPerPage: 6,
isRelatedPostsEnabled: false,
relatedPostsCount: 4,
post: {
isEnabled: true,
permalink: '/blog/%slug%',
robots: {
index: true,
follow: true,
},
},
list: {
isEnabled: true,
pathname: 'blog',
robots: {
index: true,
follow: true,
},
},
category: {
isEnabled: true,
pathname: 'category',
robots: {
index: true,
follow: true,
},
},
tag: {
isEnabled: true,
pathname: 'tag',
robots: {
index: false,
follow: true,
},
},
}
return merge({}, _default, config?.apps?.blog ?? {}) as AppBlogConfig
}
const getUI = (config: Config) => {
const _default = {
theme: 'system',
}
return merge({}, _default, config?.ui ?? {})
}
const getAnalytics = (config: Config) => {
const _default = {
vendors: {
googleAnalytics: {
id: undefined,
partytown: true,
},
},
}
return merge({}, _default, config?.analytics ?? {}) as AnalyticsConfig
}
export default (config: Config) => ({
SITE: getSite(config),
I18N: getI18N(config),
METADATA: getMetadata(config),
APP_BLOG: getAppBlog(config),
UI: getUI(config),
ANALYTICS: getAnalytics(config),
})