browserOnly
function browserOnly(fn: () => T, fallback: T): TExecute a function only in browser environment Returns the fallback value in server environment
Parameter | Type | Description |
|---|---|---|
|
| Function to execute in browser |
|
| Value to return in server environment |
Returns: T
const visitorId = browserOnly(
() => localStorage.getItem('visitor_id'),
null
)browserOnlyAsync
function browserOnlyAsync(fn: () => Promise<T>, fallback: T): Promise<T>Execute an async function only in browser environment Returns the fallback value in server environment
Parameter | Type | Description |
|---|---|---|
|
| Async function to execute in browser |
|
| Value to return in server environment |
Returns: Promise<T>
const config = await browserOnlyAsync(
() => fetchConfig(),
defaultConfig
)createClient
function createClient(config: ClientConfig): ClientCreates a Lynkow client instance (SDK v3)
Parameter | Type | Description |
|---|---|---|
|
| Client configuration |
Returns: Client
const lynkow = createClient({
siteId: 'your-site-uuid',
locale: 'fr',
debug: true
})
const posts = await lynkow.contents.list()createLynkowClient
function createLynkowClient(config: LynkowConfig): LynkowClientCreates a Lynkow client instance (legacy naming)
Parameter | Type | Description |
|---|---|---|
|
| Client configuration |
Returns: LynkowClient
// Deprecated -- use createClient() instead:
const lynkow = createClient({ siteId: 'your-site-uuid', locale: 'fr' })
const posts = await lynkow.contents.list()detectSiteTheme
function detectSiteTheme(): "light" | "dark"Detect the website's theme by inspecting DOM indicators.
Detection cascade:
data-theme / data-mode / data-color-scheme attributes on <html> or <body>
"dark" class on <html> or <body> (Tailwind convention)
CSS color-scheme property on <html>
Background color luminance of <body>
Fallback: OS-level prefers-color-scheme media query
Returns: "light" | "dark"
// Apply a conditional class based on the site's current theme
const theme = detectSiteTheme()
document.body.classList.add(theme === 'dark' ? 'inverted-text' : 'default-text')isCategoryResolve
function isCategoryResolve(response: ResolveResponse): responseChecks if a resolution response is a category
Parameter | Type | Description |
|---|---|---|
|
|
Returns: response
// Resolve a URL path and render the appropriate template
const resolved = await lynkow.paths.resolve('/blog/tutorials')
if (isCategoryResolve(resolved)) {
renderCategoryPage(resolved.data) // TypeScript narrows to CategoryResolveResponse
}isContentResolve
function isContentResolve(response: ResolveResponse): responseChecks if a resolution response is a content
Parameter | Type | Description |
|---|---|---|
|
|
Returns: response
// Resolve a URL path and render the appropriate template
const resolved = await lynkow.paths.resolve('/blog/my-article')
if (isContentResolve(resolved)) {
renderArticle(resolved.data) // TypeScript narrows to ContentResolveResponse
}isLynkowError
function isLynkowError(error: unknown): errorType guard to check if an unknown value is a LynkowError.
Use this in catch blocks to safely access LynkowError properties.
Parameter | Type | Description |
|---|---|---|
|
| The caught value to check |
Returns: error
try {
await lynkow.contents.getBySlug('not-found')
} catch (error) {
if (isLynkowError(error) && error.code === 'NOT_FOUND') {
// Handle 404 -- error.status is 404
}
}onSiteThemeChange
function onSiteThemeChange(callback: (theme: "light" | "dark") => void): () => voidObserve site theme changes in real-time.
Watches for:
Attribute changes on <html> and <body> (data-theme, data-mode, class, style)
OS-level prefers-color-scheme media query changes
Parameter | Type | Description |
|---|---|---|
|
| Called with the new theme when a change is detected |
Returns: () => void
// Update a widget's appearance when the site theme changes
const stopObserving = onSiteThemeChange((theme) => {
widget.setTheme(theme)
})
// Stop observing when no longer needed
stopObserving()