Contentful
contentful() स्रोत के साथ Delivery API के माध्यम से किसी Contentful सामग्री प्रकार को पढ़ें और बिना कुछ इंस्टॉल किए रिच टेक्स्ट बॉडी को Markdown में बदलें।
अंतर्निहित contentful() एडेप्टर Content Delivery API के माध्यम से किसी एक सामग्री प्रकार की प्रविष्टियाँ पढ़ता है और प्रत्येक प्रविष्टि की रिच टेक्स्ट बॉडी को Markdown में बदलता है। शीर्षक, मार्क्स, लिंक, सूचियाँ, उद्धरण और तालिकाएँ अपने Markdown समकक्षों में बदल जाती हैं। एम्बेड की गई इमेज एसेट एक इमेज में बदल जाती है। कोई भी अन्य एम्बेड की गई फ़ाइल (उदाहरण के लिए, कोई PDF) उसके लिंक में बदल जाती है। Markdown लॉन्ग-टेक्स्ट फ़ील्ड में रखी गई बॉडी जैसी लिखी गई है, वैसी ही आगे जाती है। अपवाद केवल वे लिंक हैं जो वेब, मेल, फ़ोन या सापेक्ष पते नहीं हैं (उदाहरण के लिए, कोई javascript: URL)। ऐसे लिंक का केवल लेबल रखा जाता है, ठीक वैसे ही जैसे रिच टेक्स्ट में होता है। आपको कुछ भी इंस्टॉल करने की आवश्यकता नहीं है, क्योंकि एडेप्टर सीधे REST API से संवाद करता है।
import { defineConfig } from "blume";
import { contentful, filesystem } from "blume/sources";
export default defineConfig({
content: {
sources: [
filesystem({ root: "docs" }),
contentful({
prefix: "guides",
space: "abc123",
contentType: "guide",
// environment: "master", locale: "en-US"
// Field ids default to title / description / slug / body, and the
// date to sys.updatedAt; order (no default) sets the sidebar order
fields: { body: "content", order: "position" },
// Extra Delivery API query parameters
params: { "fields.section": "sdk" },
// A space with EU data residency:
// host: "cdn.eu.contentful.com",
// previewHost: "preview.eu.contentful.com",
}),
],
},
});
Delivery API टोकन CONTENTFUL_ACCESS_TOKEN एनवायरनमेंट वेरिएबल से मिलता है, जिसे एडेप्टर घोषित करता है। इसके बिना स्रोत अपना पहला अनुरोध भेजने से पहले ही रुक जाता है और Contentful की 401 त्रुटि के बजाय BLUME_MISSING_SECRET त्रुटि देता है। ऐसा तब नहीं होता जब स्रोत के पास इसके बदले परोसने के लिए कोई कैश किया गया स्नैपशॉट हो। --preview के साथ एडेप्टर CONTENTFUL_PREVIEW_TOKEN का उपयोग करके Preview API से ड्राफ़्ट पढ़ता है। Preview API डिलीवरी टोकन स्वीकार नहीं करता, इसलिए प्रीव्यू टोकन के बिना --preview चलाने पर एक स्पष्ट त्रुटि मिलती है। यह CONTENTFUL_ACCESS_TOKEN का उपयोग नहीं करता। EU डेटा रेज़िडेंसी वाले स्पेस अन्य होस्ट से परोसे जाते हैं। ऐसे स्पेस के लिए host को cdn.eu.contentful.com पर और previewHost को preview.eu.contentful.com पर सेट करें। प्रत्येक पेज का साइडबार क्रम सेट करने के लिए fields.order को किसी संख्या फ़ील्ड से मैप करें। इसका कोई डिफ़ॉल्ट मान नहीं है। एसेट्स डाउनलोड नहीं की जातीं, बल्कि Contentful के CDN से सीधे संदर्भित की जाती हैं, क्योंकि उनके URL स्थिर रहते हैं। स्रोत के contentType की किसी अन्य प्रविष्टि का लिंक उस प्रविष्टि के पेज की ओर इंगित करता है, यानी उस रूट की ओर जहाँ वह पेज बनाया जाता है (स्रोत के prefix के अंतर्गत उसका स्लग)। कुछ प्रविष्टियों को स्रोत पेज में नहीं बदलता, जैसे किसी अन्य सामग्री प्रकार की प्रविष्टि या वह प्रविष्टि जिसे आपके params फ़िल्टर करके बाहर कर देते हैं। ऐसी प्रविष्टि के लिंक का केवल टेक्स्ट रखा जाता है। Delivery API अप्रकाशित, संग्रहीत या हटाई गई एसेट या प्रविष्टि को अपने रिस्पॉन्स में शामिल नहीं करता। इसलिए जो पेज ऐसी किसी एसेट या प्रविष्टि को एम्बेड या लिंक करता है, वह उसके बिना रेंडर होता है (लिंक का टेक्स्ट बना रहता है) और स्रोत BLUME_SOURCE_UNRESOLVED_LINK के साथ चेतावनी देता है। यदि आप contentfulSource को सीधे बनाकर custom() को पास करते हैं, तो इंजन के serializers विकल्प से एम्बेड की गई प्रविष्टियों को Blume कॉम्पोनेंट में बदला जा सकता है। इस विकल्प में कुंजी के रूप में सामग्री प्रकार की id का उपयोग होता है। serializers सेट करने पर स्रोत के पेज MDX के रूप में लिखे जाते हैं, ताकि लौटाए गए कॉम्पोनेंट रेंडर हो सकें। जिस एम्बेड की गई प्रविष्टि का कोई सीरियलाइज़र नहीं है, उसे एक टिप्पणी में दर्ज किया जाता है।
Contentful से डेवलपर दस्तावेज़ प्रकाशित करें में पूरी प्रक्रिया शुरू से अंत तक बताई गई है: दस्तावेज़ पेजों और कोड ब्लॉक के लिए एक सामग्री मॉडल, प्रीव्यू टोकन से समीक्षा किए जाने वाले ड्राफ़्ट, और एक स्टैटिक साइट जो हर बार किसी संपादक के प्रकाशित करने पर फिर से बनती है।