コンテンツにスキップ

ルートデータ

Starlightのルートデータオブジェクトには、現在のページに関する情報が含まれています。Starlightのデータモデルがどのように機能するかについては、「ルートデータ」ガイド を参照してください。

Astroコンポーネント内では、Astro.locals.starlightRouteからルートデータにアクセスできます。

src/components/Custom.astro
---
const { hasSidebar } = Astro.locals.starlightRoute;
---

ルートミドルウェア内では、ミドルウェア関数に渡されるcontextオブジェクトからルートデータにアクセスします。

src/routeData.ts
import { defineRouteMiddleware } from '@astrojs/starlight/route-data';
export const onRequest = defineRouteMiddleware((context) => {
const { hasSidebar } = context.locals.starlightRoute;
});

starlightRouteオブジェクトは、以下のプロパティをもちます。

型: 'ltr' | 'rtl'

ページの書字方向。

型: string

このページのロケールのBCP-47言語タグ。たとえばenzh-CNpt-BRなど。

型: string | undefined

言語が配信されるベースパス。ルートロケールスラグの場合はundefinedとなります。

型: string

このページのロケールのサイトタイトル。

型: string

サイトタイトルのhref属性の値。たとえば/など、ホームページへのリンクとなります。多言語サイトの場合、たとえば/en//zh-cn/など、現在のロケールが含まれます。

型: string

コンテンツファイル名から生成されたページのスラグ。

このプロパティは非推奨であり、Starlightの将来のバージョンで削除される予定です。StarlightのdocsLoaderを使用して新しいコンテンツレイヤーAPIに移行し、代わりにidプロパティを使用してください。

型: string

このページのスラグ。legacy.collectionsフラグを使用している場合は、コンテンツファイル名に基づくページの一意のIDとなります。

型: boolean | undefined

このページが現在の言語で未翻訳であり、デフォルトロケールのフォールバックコンテンツを使用している場合はtrueとなります。多言語サイトでのみ使用されます。

型: { dir: 'ltr' | 'rtl'; lang: string }

ページコンテンツのロケールメタデータ。ページがフォールバックコンテンツを使用している場合、トップレベルのロケール値とは異なる場合があります。

現在のページのAstroコンテンツコレクションのエントリー。entry.dataには、現在のページのフロントマターの値が含まれます。

entry: {
data: {
title: string;
description: string | undefined;
// その他の値
}
}

このオブジェクトの構造については、Astroのコレクションエントリー型リファレンスを参照してください。

型: SidebarEntry[]

ページのサイトナビゲーション用サイドバーのエントリー。

型: boolean

ページにサイドバーを表示するかどうか。

型: { prev?: Link; next?: Link }

ページネーションの設定が有効な場合にサイドバーに表示される、前のページと次のページへのリンク。

型: { minHeadingLevel: number; maxHeadingLevel: number; items: TocItem[] } | undefined

目次の設定が有効な場合、このページの目次。

型: { depth: number; slug: string; text: string }[]

現在のページから抽出されたすべてのMarkdown見出しの配列。Starlightの設定オプションをもとに目次コンポーネントを作成したい場合は、tocを使用してください。

型: Date | undefined

最終更新日の設定が有効な場合、このページが最後に更新された日時を表わすJavaScriptのDateオブジェクト。

型: URL | undefined

ページの編集設定が有効な場合、このページを編集可能なアドレスのURLオブジェクト。

型: HeadConfig[]

現在のページの<head>に含めるすべてのタグの配列。<title><meta charset="utf-8">などの重要なタグが含まれます。

ルートミドルウェアモジュールに型を付けるには、defineRouteMiddleware()ユーティリティを使用します。

src/routeData.ts
import { defineRouteMiddleware } from '@astrojs/starlight/route-data';
export const onRequest = defineRouteMiddleware((context) => {
// ...
});

Starlightのルートデータを扱うコードを書く場合は、StarlightRouteData型をインポートしてAstro.locals.starlightRouteの型定義に合わせることができます。

以下の例では、usePageTitleInTOC()関数がルートデータを更新し、目次の最初の項目のラベルとして現在のページのタイトルを使用することで、デフォルトの「概要」ラベルを置き換えます。StarlightRouteData型により、ルートデータの変更が正しいかどうかを確認できます。

src/route-utils.ts
import type { StarlightRouteData } from '@astrojs/starlight/route-data';
export function usePageTitleInTOC(starlightRoute: StarlightRouteData) {
const overviewLink = starlightRoute.toc?.items[0];
if (overviewLink) {
overviewLink.text = starlightRoute.entry.data.title;
}
}

この関数は次のようにルートミドルウェアから呼び出すことができます。

src/route-middleware.ts
import { defineRouteMiddleware } from '@astrojs/starlight/route-data';
import { usePageTitleInTOC } from './route-utils';
export const onRequest = defineRouteMiddleware((context) => {
usePageTitleInTOC(context.locals.starlightRoute);
});