محلل SemVer
قسّم إصدارًا مثل 1.2.3-alpha.1+build.7 إلى رئيسي 1 وثانوي 2 وتصحيح 3 وإصدار تمهيدي alpha.1 وبيانات بناء build.7، مع فحص صارم وفق SemVer 2.0.0. ويُرفض الوسم غير الصحيح مع ذكر القاعدة التي يخالفها. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النص
- 1.2.3-alpha.1+build.7
- الإصدار
- 1.2.3-alpha.1+build.7
- الرئيسي
- 1
- الثانوي
- 2
- التصحيح (patch)
- 3
ليس الإصدار ثلاثة أرقام فحسب: فمعرّفات prerelease الاختيارية الموصولة بشرطات وبيانات build الوصفية ذات السابقة زائد تغيّر كيف يُوسَم الإصدار ويُقارَن. يقبل محلل إصدار SemVer هذا سلسلة واحدة، ويتحقق منها بصرامة وفق المواصفة الرسمية SemVer 2.0.0، ويعيد المكوّنات العددية major وminor وpatch مع أي معرّفات prerelease وbuild.
ما الذي تسمح به SemVer 2.0.0 فعلًا
يعرّف الإصدار الدلالي 2.0.0 الإصدار بأنه MAJOR.MINOR.PATCH، ثلاثة أعداد صحيحة غير سالبة تصلها نقاط، مع معرّفات prerelease اختيارية بعد شرطة وبيانات build وصفية اختيارية بعد علامة زائد. كل من major وminor وpatch معرّف عددي: إما صفر منفرد، وإما رقم من واحد إلى تسعة تتبعه أرقام أخرى، لذا 1.0.0 صالح و01.0.0 ليس كذلك. إصدار prerelease هو النواة يتبعها شرطة ثم معرّف واحد أو أكثر مفصول بنقاط مثل alpha أو rc.1 أو 0.3.4.
معرّف prerelease إما معرّف عددي بنفس قاعدة منع الأصفار البادئة، وإما معرّف أبجدي عددي يحتوي حرفًا أو شرطة واحدة على الأقل وما سواه حروف ASCII وأرقام وشرطات فقط. تتبع بيانات build الوصفية علامة زائد وتستخدم الأبجدية نفسها، غير أن معرّفات build المؤلفة من أرقام فقط يجوز أن تحتفظ بأصفار بادئة، لذا 1.0.0+001 جائز. المعرّفات الفارغة، والنقاط المتتالية، وشرطة أو زائد ختامية، وv بادئة، والإصدارات ذات الجزأين مثل 1.2، والحروف غير ASCII كلها غير جائزة.
ينفّذ هذا المحلل ذلك النحو ماسحًا من اليسار إلى اليمين لا تعبيرًا نمطيًا متسامحًا، فيسمّي الإخفاق القاعدة المنكسرة بدل إعادة كائن نصف محلّل. ترتيب المقارنة خارج النطاق: القدرة تحلّل وتتحقق، ولا ترتّب إصدارين أحدهما ضد الآخر.
أين يبرّر محلل إصدار SemVer وجوده
تحتاج سجلات الحزم وروبوتات النشر ومولّدات سجل التغييرات إلى موضع واحد يجيب هل الوسم إصدار SemVer جائز وما أجزاؤه الخمسة. وظيفة تكامل مستمر ترفض النشر عندما يكون وسم git هو v1.2.3 بدل 1.2.3، أو عندما كتب أحدهم 1.2 فقط، تنقذ إصدارًا مكسورًا قبل أن يبلغ سجلًا. تريد ماسحات الاعتماديات التي تقرأ ملفات القفل حقولًا منظّمة major وminor وpatch وprerelease دون سحب محرّك semver خاص بلغة إلى عامل حافة.
تستفيد مواقع التوثيق التي ترتّب على محلل إصدار semver من ودجت حي يطابق مساره المجاني في المتصفح مسار الأتمتة المدفوع بايتًا ببايت على الوحدة النقية نفسها. يريد من يعلّم الإصدار صفحة هبوط مخصصة تشرح الأصفار البادئة وبيانات build بدل دفن الموضوع تحت قاسم سلاسل عام. التحقق الفاشل لا يستهلك الرصيد.
أبقوا السلاسل دون حد الطول الموثّق، وثبّتوا الحقول المنظّمة في الاختبارات، فتحصلون على مكوّنات قابلة للتكرار لأدوات الإصدار وإضافات التعلّم وعمال الحافة دون إقامة مكتبة semver خاصة بلغة.
حالات الاستخدام
التحقق من وسوم git قبل الإصدار
ارفضوا وظيفة نشر عندما يكون الوسم v1.2.3 أو 1.2 أو 01.0.0 بدل إصدار SemVer 2.0.0 جائز.
تقسيم الإصدارات في ملف قفل أو SBOM
حوّلوا كل إصدار اعتمادية إلى حقول major وminor وpatch وprerelease وbuild للماسحات ولوحات العرض.
الأسئلة الشائعة
ما سلسلة إصدار SemVer 2.0.0 الصالحة؟
MAJOR.MINOR.PATCH مع -prerelease و+build اختياريين، وحروف ASCII وأرقام وشرطات فقط. مثال: 1.2.3-alpha.1+build.7. الإصدارات ذات الجزأين وv البادئة غير صالحة.
هل يقبل المحلل v بادئة مثل v1.2.3؟
لا. لا تسمح SemVer 2.0.0 بسابقة v. أرسلوا 1.2.3.
لماذا يُرفَض 01.0.0؟
يجب ألا تحمل المعرّفات العددية أصفارًا بادئة. 0 جائز كمعرّف كامل (0.1.0) أما 01 فليس كذلك. تسري القاعدة نفسها على معرّفات prerelease العددية مثل 01 في 1.0.0-01.
هل يمكن أن تحتفظ بيانات البناء بأصفار في البداية؟
نعم. بعد علامة الزائد يمكن لمعرّف بناء مكوّن من أرقام فقط أن يحتفظ بالأصفار البادئة، لذا فإن 1.0.0+001 صالح. أما الرئيسي والثانوي والتصحيح والمعرّفات الرقمية للإصدار التمهيدي فلا يجوز فيها ذلك.
هل تخبرني الأداة أي الإصدارين أحدث؟
لا. تحلل الأداة إصدارًا واحدًا في كل مرة وتتحقق منه، ولا ترتب الإصدارات بعضها مقابل بعض. وإذا احتجت إلى الترتيب أو المقارنة فاستخدم الأجزاء المنظمة التي تعيدها في أدواتك الخاصة.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/semver-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"1.2.3-alpha.1+build.7"}'const res = await fetch("https://api.kit.forhosting.com/dev/semver-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "1.2.3-alpha.1+build.7"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/semver-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "1.2.3-alpha.1+build.7"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/semver-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"1.2.3-alpha.1+build.7"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"1.2.3-alpha.1+build.7"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/semver-parse", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "1.2.3-alpha.1+build.7"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semver_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_chars | 256 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
الإصدار الدلالي (SemVer 2.0.0) هو نحو الإصدارات الذي تستخدمه حزم npm وصناديق Rust ووحدات Go ومعظم واجهات API العامة. تُرفَض سوابق v البادئة، وأرقام patch الناقصة، والأصفار البادئة في المعرّفات العددية، والمعرّفات الفارغة، والمحارف غير ASCII بـ invalid_input بدل إعادة كتابتها صامتة. تشغّل الوحدة الحتمية نفسها ودجت المتصفح المجاني ومسار API، فلا تختلف تجهيزات CI والنموذج الحي أبدًا حول ما إذا كان 1.0.0-alpha.1 إصدارًا تمهيديًا.
عقد الإدخال وشكل الرد وسلوك الخطأ
تُقلَّم المسافات المحيطة؛ ويجب أن تكون السلسلة المتبقية إصدار SemVer 2.0.0 كاملًا. لا ترسلوا v بادئة ولا عامل مدى ولا اختصارًا من جزأين. لا تُفوتر تلك الإخفاقات. أرسلوا جسم JSON بالحقل النصي الإلزامي text (الأسماء البديلة version وsemver وvalue). عند النجاح يعيد الجسم version كما أُدخل بعد التقليم، وmajor وminor وpatch أعدادًا صحيحة آمنة، وcore سلسلة MAJOR.MINOR.PATCH الجزئية، وis_prerelease قيمة منطقية. عند وجود قسم prerelease تكون prerelease سلسلة المعرّفات دون الشرطة الأولى وprerelease_identifiers المصفوفة المقسومة؛ وتُحذف كلتا المفتاحين إن لم يكن هناك prerelease. عند وجود بيانات build تظهر build وbuild_identifiers بالطريقة نفسها وتُحذف خلاف ذلك، فلا يرى العملاء null أبدًا. مثال: 1.2.3-alpha.1+build.7 يعطي major 1 وminor 2 وpatch 3 وprerelease alpha.1 وbuild build.7 وis_prerelease true. غياب text، وسلسلة فارغة، ونص أطول من مئتين وستة وخمسين محرفًا، وعدد بدل سلسلة، وأصفار بادئة على major أو minor أو patch أو معرّف prerelease عددي، ومحارف غير جائزة، ومحارف متبقية بعد الإصدار، وv بادئة تفشل كلها بـ invalid_input ورسالة إنجليزية تسمّي الحقل أو القاعدة المنكسرة. يشارك ودجت المتصفح المجاني وواجهة API وحدة نقية واحدة، فالسلسلة المرفوضة تُرفَض في الموضعين. تسعيرة API عند النجاح هي الأساس المنشور $0.002 لكل عنصر.
أين يبرّر محلل إصدار SemVer وجوده
ولأن التنفيذ parse نقي من المستوى A، تكلف كل دعوة ناجحة السعر الأساس المنشور $0.002 بلا رموز نموذج ولا شبكة صادرة.
حالات التكامل
تعليم نحو SemVer
أظهروا للدارسين أي السلاسل تقبلها المواصفة وأيها ترفضها، بالقواعد نفسها التي تفرضها API.
أسئلة تقنية
كيف يُعاد prerelease وbuild عند غيابهما؟
تُحذف تلك المفاتيح ولا تُضبط على null. إصدار النواة وحدها مثل 2.0.0 يعيد version وmajor وminor وpatch وcore وis_prerelease false.
كم يكلف محلل إصدار SemVer؟
أداة المتصفح مجانية. تستخدم طلبات API رصيد KIT المدفوع مقدمًا بمقدار $0.002 لكل دعوة ناجحة؛ والإدخال غير الصالح لا يُفوتر.