Astro 7 ತನ್ನ Rust-ಆಧಾರಿತ Sätteri markdown engine ಗೆ ಬದಲಾದ ನಂತರ, ಗಣಿತ (math), heading anchors ಮತ್ತು custom configuration ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುವ ಸೈಟ್‌ಗಳಿಗೆ ಇದು ಸುಗಮ ಅಪ್‌ಗ್ರೇಡ್ ಬದಲಿಗೆ ಮೂರು ಪಟ್ಟು ದೊಡ್ಡ ತಲೆನೋವಾಗಿ ಪರಿಣಮಿಸಿದೆ. Inline equations ಇನ್ನೂ ಕೆಲಸ ಮಾಡುತ್ತವೆ, ಆದರೆ display-math ಬ್ಲಾಕ್‌ಗಳು ಕೇವಲ plain-text code snippets ಗಳಂತೆ ಕಾಣಿಸುತ್ತವೆ, heading IDs ಮಾಯವಾಗುತ್ತವೆ ಮತ್ತು ನೀವು Astro config ನಲ್ಲಿ ಸೇರಿಸುವ ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಆಯ್ಕೆಗಳನ್ನು (extra options) ಅದು ನಿರ್ಲಕ್ಷಿಸುತ್ತದೆ. ಹಿಂದಿನ Astro releases ಗಳಿಂದ ಮೈಗ್ರೇಟ್ ಆಗುವ ಡೆವಲಪರ್‌ಗಳು ಈಗ ಪ್ಲಗಿನ್‌ಗಳನ್ನು (plugins) ಮರುಬರೆಯಬೇಕಾಗುತ್ತದೆ ಅಥವಾ ಹಾಳಾದ ಪೇಜ್‌ಗಳ (broken pages) ಅಪಾಯವನ್ನು ಎದುರಿಸಬೇಕಾಗುತ್ತದೆ.

ಈ ಬದಲಾವಣೆ ಏಕೆ ಮುಖ್ಯ?

ಹೊಸ engine ಬಳಕೆದಾರರು ನೀಡುವ ಯಾವುದೇ plugins ಗಳಿಗೆ ಮೊದಲು ತನ್ನಲ್ಲೇ ಇರುವ built-in syntax highlighter ಅನ್ನು ರನ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಕೇವಲ ಮೂರು top-level configuration fields ಅನ್ನು ಮಾತ್ರ ಸ್ವೀಕರಿಸುತ್ತದೆ. ಈ ಆಯ್ಕೆಗಳು ಹೆಚ್ಚಿನ Astro ಪ್ರಾಜೆಕ್ಟ್‌ಗಳು ಫೀಚರ್‌ಗಳನ್ನು ಸೇರಿಸುವ ವಿಧಾನಕ್ಕೆ ವಿರುದ್ಧವಾಗಿವೆ: ಅಂದರೆ, highlighting ನಂತರ ರನ್ ಆಗಬೇಕೆಂದು ನಿರೀಕ್ಷಿಸುವ remark (MDAST) ಮತ್ತು rehype (HAST) plugins ಮೂಲಕ ಮತ್ತು ಅಡಿಯಲ್ಲಿರುವ markdown parser ಗೆ ವರ್ಗಾವಣೆಯಾಗುವ ಒಂದು permissive config object ಮೂಲಕ ಫೀಚರ್‌ಗಳನ್ನು ಸೇರಿಸುವ ವಿಧಾನಕ್ಕೆ ಇದು ಅಡ್ಡಿಯಾಗುತ್ತದೆ.

LaTeX-style math ಅನ್ನು ಸಾಮಾನ್ಯ ಕಂಟೆಂಟ್ ಜೊತೆಗೆ ಬೆರೆಸುವ ಯಾವುದೇ ಪೇಜ್‌ನಲ್ಲಿ ಇದರ ಪರಿಣಾಮಗಳು ಕಂಡುಬರುತ್ತವೆ. Inline math ($a+b$) ಸರಿಯಾಗಿ ರೆಂಡರ್ ಆಗುತ್ತದೆ, ಆದರೆ display block ($$a+b$$) ಒಂದು <pre> tag ಒಳಗೆ ಸುತ್ತಲ್ಪಟ್ಟಿದ್ದು, ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಿದ ಸಮೀಕರಣದ ಬದಲಿಗೆ raw markup ಅನ್ನು ತೋರಿಸುತ್ತದೆ. Table-of-contents ಲಿಂಕ್‌ಗಳು ಅಥವಾ deep-linking ಗೆ ಪೂರಕವಾಗಿರುವ heading anchors ಮಾಯವಾಗುತ್ತವೆ, ಏಕೆಂದರೆ ID-generation plugin ಎಂಬುದು built-in ID handler ಗಿಂತ ಮೊದಲು ರನ್ ಆಗುತ್ತದೆ, ಇದರಿಂದ autolink plugin ಗೆ ಯಾವುದನ್ನೂ ಹಿಡಿಯಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. shikiConfig object ಬಳಸಿ Shiki syntax highlighter ಅನ್ನು fine-tune ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿದ ಡೆವಲಪರ್‌ಗಳಿಗೆ, ಆ ಸೆಟ್ಟಿಂಗ್ ಯಾವುದೇ ಸುಳಿವು ಇಲ್ಲದೆ ಮಾಯವಾಗಿರುವುದು ಕಂಡುಬರುತ್ತದೆ.

ತಾಂತ್ರಿಕ ಪರಿಹಾರಗಳು

1. Highlight ಮಾಡುವ ಮೊದಲು math ಅನ್ನು ರೆಂಡರ್ ಮಾಡಿ

ಇದರ ಮೂಲ ಕಾರಣ ಕಾರ್ಯಾಚರಣೆಗಳ ಕ್ರಮ (order of operations): Sätteri ನ highlighter ಮೊದಲು ಪಠ್ಯವನ್ನು ತನ್ನದಾಗಿಸಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು math block ಅನ್ನು plain code ಎಂದು ವರ್ಗೀಕರಿಸುತ್ತದೆ. Math ಅನ್ನು ಮರಳಿ ಪಡೆಯಲು, ಪ್ರೊಸೆಸಿಂಗ್ ಅನ್ನು MDAST layer (HTML ಆಗುವ ಮೊದಲು markdown ಅನ್ನು ಪ್ರತಿನಿಧಿಸುವ abstract syntax tree) ಗೆ ವರ್ಗಾಯಿಸಿ. ಯಾವುದೇ HAST-level math plugins ಗಳ ಬದಲಿಗೆ ಅವುಗಳ MDAST equivalents ಬಳಸಿ ಮತ್ತು highlighter ಹಂತಕ್ಕೆ ಮೊದಲು ಅವುಗಳನ್ನು ರನ್ ಮಾಡಿ. ಪ್ರಾಯೋಗಿಕವಾಗಿ, remark-math plugins ಗಳ ಬದಲಿಗೆ markdown parsing ಹಂತಕ್ಕೆ hook ಆಗುವ ವರ್ಷನ್ ಅನ್ನು ಬಳಸಿ, ನಂತರ ಈಗಾಗಲೇ ಪರಿವರ್ತಿತವಾಗಿರುವ math nodes ಮೇಲೆ highlighter ಕೆಲಸ ಮಾಡಲು ಬಿಡಿ.

2. Heading-ID plugins ಗಳ ಕ್ರಮವನ್ನು ಬದಲಾಯಿಸಿ

Heading IDs ಅನ್ನು ಈಗ ಬಳಕೆದಾರರ plugins ನಂತರ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಒಂದು built-in plugin ಮೂಲಕ ತಯಾರಿಸಲಾಗುತ್ತದೆ. Custom ID ಅಥವಾ slug generators ಗಳನ್ನು ಪ್ಲಗಿನ್ ಲಿಸ್ಟ್‌ನ ಮೇಲ್ಭಾಗಕ್ಕೆ ತನ್ನಿ, ಇದರಿಂದ ಅವು ಮೊದಲು ರನ್ ಆಗುತ್ತವೆ. Anchor links ಅನ್ನು ಮರುಸ್ಥಾಪಿಸುವ ಸಾಮಾನ್ಯ ಕ್ರಮ ಹೀಗಿದೆ:

  1. slug/ID plugin
  2. autolink plugin
  3. ಯಾವುದೇ ಇತರ remark plugins

IDs ಮೊದಲೇ ಲಭ್ಯವಿದ್ದರೆ, autolink plugin ನಿರೀಕ್ಷಿತ <a> elements ಗಳನ್ನು ಸೇರಿಸಬಹುದು ಮತ್ತು table-of-contents ಸರಿಯಾದ ಸೆಕ್ಷನ್‌ಗಳಿಗೆ ಸೂಚಿಸುತ್ತದೆ.

3. Sätteri ನ ಕಟ್ಟುನಿಟ್ಟಾದ config schema ಅನ್ನು ಪಾಲಿಸಿ

Astro markdown configuration ನಲ್ಲಿ Sätteri ಕೇವಲ ಮೂರು fields ಅನ್ನು ಮಾತ್ರ ಗುರುತಿಸುತ್ತದೆ. shikiConfig ನಂತಹ ಬೇರೆ ಯಾವುದೇ ವಿಷಯಗಳನ್ನು ಅದು ಸುಮ್ಮನೆ ಕೈಬಿಡುತ್ತದೆ. Custom themes ಅಥವಾ highlighter tweaks ಗಳನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು, ಆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು Astro config hierarchy ಯಲ್ಲಿ ಸರಿಯಾದ ಮಟ್ಟಕ್ಕೆ ಸ್ಥಳಾಂತರಿಸಿ.

ಶೀಘ್ರ ಬದಲಾವಣೆ ಮಾರ್ಗದರ್ಶಿ

ನೀವು ಕ್ಲಾಸಿಕ್ Astro markdown stack ಅನ್ನು ಪೋರ್ಟ್ ಮಾಡುತ್ತಿದ್ದರೆ, ಹಳೆಯ remark plugins ಗಳ ಬದಲಿಗೆ Sätteri ಗೆ ಅರ್ಥವಾಗುವ ಹೊಸ feature flags ಗಳನ್ನು ಬಳಸಿ:

  • remark-gfmfeatures.gfm
  • remark-frontmatterfeatures.frontmatter
  • remark-mathfeatures.math
  • remark-directivefeatures.directive
  • remark-smartypantsfeatures.smartPunctuation
  • remark-wiki-linkfeatures.wikilinks

ಈ flags ಗಳು ಪ್ರತ್ಯೇಕ plugin load ಮಾಡುವ ಅಗತ್ಯವಿಲ್ಲದೆ ಅದೇ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತವೆ.

Sätteri ಜೊತೆಗೆ plugins ಗಳು ಸುಗಮವಾಗಿ ಕೆಲಸ ಮಾಡಲು ನಿಯಮಗಳು

  • Single pass ಮಾತ್ರ – Plugins ಮರವನ್ನು (tree) ಒಮ್ಮೆ ಮಾತ್ರ ನೋಡುತ್ತವೆ; ಪೈಪ್‌ಲೈನ್‌ನಲ್ಲಿ ನಂತರ ರಚನೆಯಾದ nodes ಗಳನ್ನು ಅವು ಮತ್ತೆ ನೋಡಲು ಸಾಧ್ಯವಿಲ್ಲ.
  • Factory for state – ಪೇಜ್‌ಗಳ ನಡುವೆ ಡೇಟಾ ಸೋರಿಕೆಯನ್ನು (data leakage) ತಪ್ಪಿಸಲು ಪ್ರತಿ ಪೇಜ್‌ಗೆ ಹೊಸ state object ಅನ್ನು ನಿರ್ಮಿಸಿ.
  • Immutable nodes – ಬದಲಾವಣೆ ಬೇಕಾದಾಗ ಹೊಸ node ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ; ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ node ಅನ್ನು ಬದಲಾಯಿಸುವುದು (mutating) ಮುಂದಿನ ಪ್ರೊಸೆಸಿಂಗ್ ಹಂತಗಳನ್ನು ಹಾಳುಮಾಡಬಹುದು.
  • No root fragments – Top-level fragment node ಅನ್ನು ರಚಿಸುವ ಬದಲು, ನೀಡಲಾದ insertion helpers ಮೂಲಕ sibling ಗಳನ್ನು ಸೇರಿಸಿ.

ನೀವು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ಲಗಿನ್ ಅನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವಾಗ, README ಯ ಉದಾಹರಣೆ ಔಟ್‌ಪುಟ್ ಮೇಲೆ ಅವಲಂಬಿತರಾಗಬೇಡಿ. ಮೂಲ ಪ್ಲಗಿನ್‌ನ HTML ಅನ್ನು ರೆಂಡರ್ ಮಾಡಿ, ಆ markup ಅನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ ಮತ್ತು ಅದನ್ನು ನಿಮ್ಮ Sätteri-compatible ವರ್ಷನ್‌ಗಾಗಿ ರೆಫರೆನ್ಸ್ ಪಾಯಿಂಟ್ ಆಗಿ ಬಳಸಿ.

ಸಾರಾಂಶ

Astro 7 ನ Sätteri engine ವೇಗವನ್ನು ತರುತ್ತದೆ, ಆದರೆ markdown processing chain ಅನ್ನು ಮರುಜೋಡಿಸಲು ಒತ್ತಾಯಿಸುತ್ತದೆ: MDAST ಮಟ್ಟದಲ್ಲಿ math ಅನ್ನು render ಮಾಡಿ, heading-ID plugins ಅನ್ನು ಮುಂಚೂಣಿಯಲ್ಲಿ ಇರಿಸಿ ಮತ್ತು configuration ಅನ್ನು ಅಂಗೀಕರಿಸಲಾದ ಮೂರು field ಗಳಿಗೆ ಸೀಮಿತಗೊಳಿಸಿ. feature-flag mapping ಅನ್ನು ಅನುಸರಿಸಿ, single-pass ಮತ್ತು immutable-node ನಿಯಮಗಳನ್ನು ಪಾಲಿಸಿ; ಆಗ ನಿಮ್ಮ ಸೈಟ್ ಅವಲಂಬಿಸಿರುವ math, anchors ಮತ್ತು custom theming ಅನ್ನು ನೀವು ಮರುಸ್ಥಾಪಿಸಬಹುದು. ಈ ಪ್ರಯತ್ನವು ಆರಂಭದಲ್ಲೇ ಇರುತ್ತದೆ; ಆದರೆ ಇದರ ಪ್ರತಿಫಲವು ಹೆಚ್ಚು ಊಹಿಸಬಹುದಾದ ಮತ್ತು ವೇಗವಾದ markdown pipeline ಆಗಿರುತ್ತದೆ.