npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

moho-font

v0.3.1

Published

Arabic font catalog and provider utilities for discovering, filtering, and loading open Arabic fonts.

Downloads

113

Readme

موهو فوند

موهو فوند مكتبة مفتوحة المصدر وكتالوج موحّد للخطوط العربية، مع واجهتين متوافقتين لـ JavaScript/TypeScript وPython. تساعد المكتبة المطوّرين على اكتشاف الخطوط العربية المفتوحة، البحث فيها، تصفيتها حسب الخصائص، إنشاء روابط CSS من مزوّدين مختلفين، واستعمال الخطوط في تطبيقات الويب مع بقاء المصدر والترخيص ظاهرين.

لا تدّعي موهو فوند أنها تحتوي على كل خط عربي موجود عالميًا. الإصدار الحالي يضم 56 عائلة عربية مستخرجة من فهرس مفتوح، والكتالوج مصمم ليُحدّث تلقائيًا بطريقة قابلة للتكرار. لا تُضمّن ملفات الخطوط نفسها داخل الحزمة؛ بل تُنشئ المكتبة روابط إلى مصادرها المعلنة.

التثبيت

npm install moho-font

تستهدف الحزمة Node.js 18 أو أحدث، وتدعم ESM وCommonJS.

import { listFonts, getFont, getFontCssUrl } from 'moho-font';

const fonts = listFonts({
  search: 'naskh',
  subset: 'arabic',
  variable: true,
  limit: 10,
});

const cairo = getFont('Cairo');
const cssUrl = getFontCssUrl('Cairo', {
  source: 'fontsource',
  fontsource: { weight: 700 },
});

console.log(fonts.map((font) => font.family));
console.log(cairo?.license, cairo?.sourceUrl);
console.log(cssUrl);

البحث والتصفية

تقبل listFonts استعلامًا غنيًا، وتعيد نتائج مرتبة ترتيبًا حتميًا. يمكن الجمع بين البحث النصي والفئة والوسم والمصدر والترخيص والمجموعة النصية والنمط والوزن والخط المتغير.

import { listFonts } from 'moho-font';

const kufi = listFonts({ tag: 'kufi' });
const serif = listFonts({ category: 'serif' });
const italic = listFonts({ style: 'italic' });
const heavyVariable = listFonts({ variable: true, weight: 700 });
const newest = listFonts({ sort: 'lastModified', descending: true, limit: 20 });

تتوفر القيم الممكنة للتصفية عبر getCatalogFacets:

import { getCatalogFacets } from 'moho-font';

const facets = getCatalogFacets();
console.log(facets.tags, facets.scripts, facets.weights);

روابط CSS ومزوّدو الخطوط

ينشئ موهو فوند روابط Google Fonts CSS2 وروابط Fontsource CDN، مع السماح بتحديد الأوزان والنمط وطريقة عرض الخط.

import {
  createFontCssImport,
  createFontFaceCss,
  getFontCssUrl,
  getGoogleFontsCssUrl,
  getFontsourceCssUrl,
} from 'moho-font';

const googleUrl = getGoogleFontsCssUrl('Noto Sans Arabic', {
  weights: [400, 600, 700],
  display: 'swap',
});

const fontsourceUrl = getFontsourceCssUrl('Cairo', { weight: 700 });
const importRule = createFontCssImport('Amiri');
const selfHostedRule = createFontFaceCss('https://example.test/amiri.woff2', {
  family: 'Amiri',
  weight: 400,
});

لتحميل ورقة الأنماط في المتصفح:

import { loadFont } from 'moho-font';

await loadFont('Cairo', {
  source: 'google-fonts',
  weights: [400, 700],
});

document.body.style.fontFamily = 'Cairo, sans-serif';

loadFont مخصصة للمتصفح، وتمنع إضافة ورقة الأنماط نفسها مرتين. في بيئات الخادم أو التطبيقات دون اتصال، استخدم الرابط أو آلية الاستضافة الذاتية المناسبة لشروط ترخيص العائلة.

واجهة JavaScript/TypeScript

| الدالة أو القيمة | الغرض | | --- | --- | | listFonts(query?) | البحث والتصفية والترتيب والحد من النتائج. | | getFont(familyOrId) | العثور على عائلة باسمها أو معرّفها. | | getFontById(id) | العثور على عائلة بالمعرّف المستقر. | | getCatalogFacets() | إرجاع قيم الفلاتر المتاحة. | | getCatalogStats() | إرجاع الإحصاءات حسب المصدر والترخيص والفئة واللغة. | | getGoogleFontsCssUrl(family, options?) | بناء رابط Google Fonts CSS2. | | getFontsourceCssUrl(font, options?) | بناء رابط Fontsource CDN. | | getFontCssUrl(font, options?) | اختيار المزوّد وبناء الرابط المناسب. | | createGoogleFontsLink(family, options?) | إنشاء خصائص عنصر stylesheet. | | createFontCssImport(font, options?) | إنشاء قاعدة @import. | | createFontFaceCss(url, options?) | إنشاء قاعدة @font-face للاستضافة الذاتية. | | loadFont(font, options?) | تحميل stylesheet في المتصفح. | | loadGoogleFont(family, options?) | اسم متوافق مع الإصدارات السابقة. | | arabicFonts | الكتالوج الثابت الكامل. |

تحتوي كل عائلة على id وfamily وprovider وlicense وcategory وweights وstyles وvariable وsubsets وscripts وtags وsourceUrl وcssUrl وبيانات Fontsource عند توفرها.

نسخة Python

يحتوي المستودع نفسه على نسخة Python في python/. اسم التوزيعة هو moho-font واسم الاستيراد هو moho_font.

pip install moho-font

مثال:

from moho_font import catalog_stats, font_css_url, list_fonts

fonts = list_fonts(search="naskh", variable=True, limit=10)
print([font.family for font in fonts])
print(font_css_url("Cairo", source="fontsource", weight=700))
print(catalog_stats())

تتطابق وظائف Python الأساسية مع JavaScript، ومنها list_fonts وget_font وget_font_by_id وcatalog_facets وcatalog_stats وgoogle_fonts_css_url وfontsource_css_url وfont_css_url وcreate_css_import وcreate_font_face_css.

مزامنة الكتالوج وتوليده

مصدر البيانات الموحد هو data/fonts.json. يمكن تحديثه من مصدر Fontsource المفتوح ثم توليد الكتالوجين من الملف نفسه:

npm run catalog:sync
npm run catalog:generate
npm test
cd python
python -m pytest

الأمر catalog:sync لا يضع ملفات الخطوط في الحزمة؛ بل يلتقط بيانات وصفية مثل الاسم والوزن والنمط والمجموعات والنسخة والترخيص وروابط المصدر. أما catalog:generate فيضمن أن نسخة TypeScript ونسخة Python تستخدمان السجلات نفسها.

الجودة والتطوير المحلي

npm install
npm test
npm run catalog:update
npm run pack:check
npm run publish:check
cd python
python -m venv .venv
.venv\\Scripts\\activate  # Windows
python -m pip install -U pip pytest build twine
python -m pytest
python -m build
python -m twine check dist/*

الاختبارات تغطي البحث، المعرّفات، الفلاتر، الأوجه، الأوزان، الخطوط المتغيرة، روابط CSS، التحقق من المدخلات، ومخرجات الاستيراد. لا تُنشر نسخة جديدة قبل نجاح البناء والاختبارات وفحص محتوى التوزيعة.

التراخيص والمصادر

كود موهو فوند مرخّص بموجب MIT. أما الخطوط فتبقى خاضعة لتراخيص أصحابها؛ ويحتفظ الكتالوج عمدًا بالحقول provider وsourceUrl وlicense وبيانات التحديث. يجب مراجعة ترخيص كل عائلة قبل إعادة توزيع ملفاتها أو استخدامها في منتج تجاري. لا يجوز إزالة بيانات المصدر أو الترخيص أو تقديم الخطوط الخارجية على أنها من إنشاء موهو.

| الحقل | معناه | | --- | --- | | provider | المزوّد الذي تأتي منه بيانات العائلة أو رابط الاستخدام. | | sourceUrl | صفحة المصدر الأصلية للعائلة. | | license | الترخيص المعلن للعائلة، مثل OFL-1.1 أو Apache-2.0 أو UFL-1.0. | | lastModified | تاريخ آخر تحديث متاح في مصدر البيانات. |

إصدارات التوزيع

الإصدار المنشور السابق هو 0.2.0. الإصدار التطويري التالي في هذا المستودع هو 0.3.0، ولن يُدفع أو يُنشر حتى يكتمل الفحص ويصدر تأكيد منفصل بذلك.

المراجع