mirror of
https://github.com/d0zingcat/nextjs-notion-starter-kit.git
synced 2026-05-13 15:09:47 +00:00
Adding YouTube social icon
This commit is contained in:
394
lib/config.ts
394
lib/config.ts
@@ -5,199 +5,201 @@
|
||||
* for optional depenencies.
|
||||
*/
|
||||
|
||||
import { parsePageId } from 'notion-utils'
|
||||
import posthog from 'posthog-js'
|
||||
import { getEnv, getSiteConfig } from './get-config-value'
|
||||
import { NavigationLink } from './site-config'
|
||||
import {
|
||||
PageUrlOverridesInverseMap,
|
||||
PageUrlOverridesMap,
|
||||
NavigationStyle,
|
||||
Site
|
||||
} from './types'
|
||||
|
||||
export const rootNotionPageId: string = parsePageId(
|
||||
getSiteConfig('rootNotionPageId'),
|
||||
{ uuid: false }
|
||||
)
|
||||
|
||||
if (!rootNotionPageId) {
|
||||
throw new Error('Config error invalid "rootNotionPageId"')
|
||||
}
|
||||
|
||||
// if you want to restrict pages to a single notion workspace (optional)
|
||||
export const rootNotionSpaceId: string | null = parsePageId(
|
||||
getSiteConfig('rootNotionSpaceId', null),
|
||||
{ uuid: true }
|
||||
)
|
||||
|
||||
export const pageUrlOverrides = cleanPageUrlMap(
|
||||
getSiteConfig('pageUrlOverrides', {}) || {},
|
||||
{ label: 'pageUrlOverrides' }
|
||||
)
|
||||
|
||||
export const pageUrlAdditions = cleanPageUrlMap(
|
||||
getSiteConfig('pageUrlAdditions', {}) || {},
|
||||
{ label: 'pageUrlAdditions' }
|
||||
)
|
||||
|
||||
export const inversePageUrlOverrides = invertPageUrlOverrides(pageUrlOverrides)
|
||||
|
||||
export const environment = process.env.NODE_ENV || 'development'
|
||||
export const isDev = environment === 'development'
|
||||
|
||||
// general site config
|
||||
export const name: string = getSiteConfig('name')
|
||||
export const author: string = getSiteConfig('author')
|
||||
export const domain: string = getSiteConfig('domain')
|
||||
export const description: string = getSiteConfig('description', 'Notion Blog')
|
||||
export const language: string = getSiteConfig('language', 'en')
|
||||
|
||||
// social accounts
|
||||
export const twitter: string | null = getSiteConfig('twitter', null)
|
||||
export const github: string | null = getSiteConfig('github', null)
|
||||
export const linkedin: string | null = getSiteConfig('linkedin', null)
|
||||
export const zhihu: string | null = getSiteConfig('zhihu', null)
|
||||
|
||||
// default notion values for site-wide consistency (optional; may be overridden on a per-page basis)
|
||||
export const defaultPageIcon: string | null = getSiteConfig(
|
||||
'defaultPageIcon',
|
||||
null
|
||||
)
|
||||
export const defaultPageCover: string | null = getSiteConfig(
|
||||
'defaultPageCover',
|
||||
null
|
||||
)
|
||||
export const defaultPageCoverPosition: number = getSiteConfig(
|
||||
'defaultPageCoverPosition',
|
||||
0.5
|
||||
)
|
||||
|
||||
// Optional whether or not to enable support for LQIP preview images
|
||||
export const isPreviewImageSupportEnabled: boolean = getSiteConfig(
|
||||
'isPreviewImageSupportEnabled',
|
||||
false
|
||||
)
|
||||
|
||||
// Optional whether or not to include the Notion ID in page URLs or just use slugs
|
||||
export const includeNotionIdInUrls: boolean = getSiteConfig(
|
||||
'includeNotionIdInUrls',
|
||||
!!isDev
|
||||
)
|
||||
|
||||
export const navigationStyle: NavigationStyle = getSiteConfig(
|
||||
'navigationStyle',
|
||||
'default'
|
||||
)
|
||||
|
||||
export const navigationLinks: Array<NavigationLink | null> = getSiteConfig(
|
||||
'navigationLinks',
|
||||
null
|
||||
)
|
||||
|
||||
// Optional site search
|
||||
export const isSearchEnabled: boolean = getSiteConfig('isSearchEnabled', true)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Optional redis instance for persisting preview images
|
||||
export const isRedisEnabled: boolean =
|
||||
getSiteConfig('isRedisEnabled', false) || !!getEnv('REDIS_ENABLED', null)
|
||||
|
||||
// (if you want to enable redis, only REDIS_HOST and REDIS_PASSWORD are required)
|
||||
// we recommend that you store these in a local `.env` file
|
||||
export const redisHost: string | null = getEnv('REDIS_HOST', null)
|
||||
export const redisPassword: string | null = getEnv('REDIS_PASSWORD', null)
|
||||
export const redisUser: string = getEnv('REDIS_USER', 'default')
|
||||
export const redisUrl = getEnv(
|
||||
'REDIS_URL',
|
||||
`redis://${redisUser}:${redisPassword}@${redisHost}`
|
||||
)
|
||||
export const redisNamespace: string | null = getEnv(
|
||||
'REDIS_NAMESPACE',
|
||||
'preview-images'
|
||||
)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
export const isServer = typeof window === 'undefined'
|
||||
|
||||
export const port = getEnv('PORT', '3000')
|
||||
export const host = isDev ? `http://localhost:${port}` : `https://${domain}`
|
||||
|
||||
export const apiBaseUrl = `/api`
|
||||
|
||||
export const api = {
|
||||
searchNotion: `${apiBaseUrl}/search-notion`,
|
||||
getSocialImage: `${apiBaseUrl}/social-image`
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
export const site: Site = {
|
||||
domain,
|
||||
name,
|
||||
rootNotionPageId,
|
||||
rootNotionSpaceId,
|
||||
description
|
||||
}
|
||||
|
||||
export const fathomId = isDev ? null : process.env.NEXT_PUBLIC_FATHOM_ID
|
||||
export const fathomConfig = fathomId
|
||||
? {
|
||||
excludedDomains: ['localhost', 'localhost:3000']
|
||||
}
|
||||
: undefined
|
||||
|
||||
export const posthogId = process.env.NEXT_PUBLIC_POSTHOG_ID
|
||||
export const posthogConfig: posthog.Config = {
|
||||
api_host: 'https://app.posthog.com'
|
||||
}
|
||||
|
||||
function cleanPageUrlMap(
|
||||
pageUrlMap: PageUrlOverridesMap,
|
||||
{
|
||||
label
|
||||
}: {
|
||||
label: string
|
||||
}
|
||||
): PageUrlOverridesMap {
|
||||
return Object.keys(pageUrlMap).reduce((acc, uri) => {
|
||||
const pageId = pageUrlMap[uri]
|
||||
const uuid = parsePageId(pageId, { uuid: false })
|
||||
|
||||
if (!uuid) {
|
||||
throw new Error(`Invalid ${label} page id "${pageId}"`)
|
||||
}
|
||||
|
||||
if (!uri) {
|
||||
throw new Error(`Missing ${label} value for page "${pageId}"`)
|
||||
}
|
||||
|
||||
if (!uri.startsWith('/')) {
|
||||
throw new Error(
|
||||
`Invalid ${label} value for page "${pageId}": value "${uri}" should be a relative URI that starts with "/"`
|
||||
)
|
||||
}
|
||||
|
||||
const path = uri.slice(1)
|
||||
|
||||
return {
|
||||
...acc,
|
||||
[path]: uuid
|
||||
}
|
||||
}, {})
|
||||
}
|
||||
|
||||
function invertPageUrlOverrides(
|
||||
pageUrlOverrides: PageUrlOverridesMap
|
||||
): PageUrlOverridesInverseMap {
|
||||
return Object.keys(pageUrlOverrides).reduce((acc, uri) => {
|
||||
const pageId = pageUrlOverrides[uri]
|
||||
|
||||
return {
|
||||
...acc,
|
||||
[pageId]: uri
|
||||
}
|
||||
}, {})
|
||||
}
|
||||
import { parsePageId } from 'notion-utils'
|
||||
import posthog from 'posthog-js'
|
||||
import { getEnv, getSiteConfig } from './get-config-value'
|
||||
import { NavigationLink } from './site-config'
|
||||
import {
|
||||
PageUrlOverridesInverseMap,
|
||||
PageUrlOverridesMap,
|
||||
NavigationStyle,
|
||||
Site
|
||||
} from './types'
|
||||
|
||||
export const rootNotionPageId: string = parsePageId(
|
||||
getSiteConfig('rootNotionPageId'),
|
||||
{ uuid: false }
|
||||
)
|
||||
|
||||
if (!rootNotionPageId) {
|
||||
throw new Error('Config error invalid "rootNotionPageId"')
|
||||
}
|
||||
|
||||
// if you want to restrict pages to a single notion workspace (optional)
|
||||
export const rootNotionSpaceId: string | null = parsePageId(
|
||||
getSiteConfig('rootNotionSpaceId', null),
|
||||
{ uuid: true }
|
||||
)
|
||||
|
||||
export const pageUrlOverrides = cleanPageUrlMap(
|
||||
getSiteConfig('pageUrlOverrides', {}) || {},
|
||||
{ label: 'pageUrlOverrides' }
|
||||
)
|
||||
|
||||
export const pageUrlAdditions = cleanPageUrlMap(
|
||||
getSiteConfig('pageUrlAdditions', {}) || {},
|
||||
{ label: 'pageUrlAdditions' }
|
||||
)
|
||||
|
||||
export const inversePageUrlOverrides = invertPageUrlOverrides(pageUrlOverrides)
|
||||
|
||||
export const environment = process.env.NODE_ENV || 'development'
|
||||
export const isDev = environment === 'development'
|
||||
|
||||
// general site config
|
||||
export const name: string = getSiteConfig('name')
|
||||
export const author: string = getSiteConfig('author')
|
||||
export const domain: string = getSiteConfig('domain')
|
||||
export const description: string = getSiteConfig('description', 'Notion Blog')
|
||||
export const language: string = getSiteConfig('language', 'en')
|
||||
|
||||
// social accounts
|
||||
export const twitter: string | null = getSiteConfig('twitter', null)
|
||||
export const github: string | null = getSiteConfig('github', null)
|
||||
export const youtube: string | null = getSiteConfig('youtube', null)
|
||||
export const linkedin: string | null = getSiteConfig('linkedin', null)
|
||||
export const zhihu: string | null = getSiteConfig('zhihu', null)
|
||||
|
||||
// default notion values for site-wide consistency (optional; may be overridden on a per-page basis)
|
||||
export const defaultPageIcon: string | null = getSiteConfig(
|
||||
'defaultPageIcon',
|
||||
null
|
||||
)
|
||||
export const defaultPageCover: string | null = getSiteConfig(
|
||||
'defaultPageCover',
|
||||
null
|
||||
)
|
||||
export const defaultPageCoverPosition: number = getSiteConfig(
|
||||
'defaultPageCoverPosition',
|
||||
0.5
|
||||
)
|
||||
|
||||
// Optional whether or not to enable support for LQIP preview images
|
||||
export const isPreviewImageSupportEnabled: boolean = getSiteConfig(
|
||||
'isPreviewImageSupportEnabled',
|
||||
false
|
||||
)
|
||||
|
||||
// Optional whether or not to include the Notion ID in page URLs or just use slugs
|
||||
export const includeNotionIdInUrls: boolean = getSiteConfig(
|
||||
'includeNotionIdInUrls',
|
||||
!!isDev
|
||||
)
|
||||
|
||||
export const navigationStyle: NavigationStyle = getSiteConfig(
|
||||
'navigationStyle',
|
||||
'default'
|
||||
)
|
||||
|
||||
export const navigationLinks: Array<NavigationLink | null> = getSiteConfig(
|
||||
'navigationLinks',
|
||||
null
|
||||
)
|
||||
|
||||
// Optional site search
|
||||
export const isSearchEnabled: boolean = getSiteConfig('isSearchEnabled', true)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Optional redis instance for persisting preview images
|
||||
export const isRedisEnabled: boolean =
|
||||
getSiteConfig('isRedisEnabled', false) || !!getEnv('REDIS_ENABLED', null)
|
||||
|
||||
// (if you want to enable redis, only REDIS_HOST and REDIS_PASSWORD are required)
|
||||
// we recommend that you store these in a local `.env` file
|
||||
export const redisHost: string | null = getEnv('REDIS_HOST', null)
|
||||
export const redisPassword: string | null = getEnv('REDIS_PASSWORD', null)
|
||||
export const redisUser: string = getEnv('REDIS_USER', 'default')
|
||||
export const redisUrl = getEnv(
|
||||
'REDIS_URL',
|
||||
`redis://${redisUser}:${redisPassword}@${redisHost}`
|
||||
)
|
||||
export const redisNamespace: string | null = getEnv(
|
||||
'REDIS_NAMESPACE',
|
||||
'preview-images'
|
||||
)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
export const isServer = typeof window === 'undefined'
|
||||
|
||||
export const port = getEnv('PORT', '3000')
|
||||
export const host = isDev ? `http://localhost:${port}` : `https://${domain}`
|
||||
|
||||
export const apiBaseUrl = `/api`
|
||||
|
||||
export const api = {
|
||||
searchNotion: `${apiBaseUrl}/search-notion`,
|
||||
getSocialImage: `${apiBaseUrl}/social-image`
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
export const site: Site = {
|
||||
domain,
|
||||
name,
|
||||
rootNotionPageId,
|
||||
rootNotionSpaceId,
|
||||
description
|
||||
}
|
||||
|
||||
export const fathomId = isDev ? null : process.env.NEXT_PUBLIC_FATHOM_ID
|
||||
export const fathomConfig = fathomId
|
||||
? {
|
||||
excludedDomains: ['localhost', 'localhost:3000']
|
||||
}
|
||||
: undefined
|
||||
|
||||
export const posthogId = process.env.NEXT_PUBLIC_POSTHOG_ID
|
||||
export const posthogConfig: posthog.Config = {
|
||||
api_host: 'https://app.posthog.com'
|
||||
}
|
||||
|
||||
function cleanPageUrlMap(
|
||||
pageUrlMap: PageUrlOverridesMap,
|
||||
{
|
||||
label
|
||||
}: {
|
||||
label: string
|
||||
}
|
||||
): PageUrlOverridesMap {
|
||||
return Object.keys(pageUrlMap).reduce((acc, uri) => {
|
||||
const pageId = pageUrlMap[uri]
|
||||
const uuid = parsePageId(pageId, { uuid: false })
|
||||
|
||||
if (!uuid) {
|
||||
throw new Error(`Invalid ${label} page id "${pageId}"`)
|
||||
}
|
||||
|
||||
if (!uri) {
|
||||
throw new Error(`Missing ${label} value for page "${pageId}"`)
|
||||
}
|
||||
|
||||
if (!uri.startsWith('/')) {
|
||||
throw new Error(
|
||||
`Invalid ${label} value for page "${pageId}": value "${uri}" should be a relative URI that starts with "/"`
|
||||
)
|
||||
}
|
||||
|
||||
const path = uri.slice(1)
|
||||
|
||||
return {
|
||||
...acc,
|
||||
[path]: uuid
|
||||
}
|
||||
}, {})
|
||||
}
|
||||
|
||||
function invertPageUrlOverrides(
|
||||
pageUrlOverrides: PageUrlOverridesMap
|
||||
): PageUrlOverridesInverseMap {
|
||||
return Object.keys(pageUrlOverrides).reduce((acc, uri) => {
|
||||
const pageId = pageUrlOverrides[uri]
|
||||
|
||||
return {
|
||||
...acc,
|
||||
[pageId]: uri
|
||||
}
|
||||
}, {})
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ export interface SiteConfig {
|
||||
twitter?: string
|
||||
github?: string
|
||||
linkedin?: string
|
||||
youtube?: string
|
||||
zhihu?: string
|
||||
|
||||
defaultPageIcon?: string | null
|
||||
|
||||
Reference in New Issue
Block a user