الأدوات المساعدة
[مستقر: 2 - مستقر]
مستقر: 2 استقرار: 2 - مستقر
رمز المصدر: lib/util.js
يدعم مُعامل node:util
احتياجات واجهات برمجة التطبيقات الداخلية لـ Node.js. وكثير من الأدوات مفيدة أيضاً لمطوري التطبيقات والوحدات. للوصول إليه:
const util = require('node:util')
util.callbackify(original)
مضاف في: v8.2.0
original
<Function> دالةasync
- المُرجَع: <Function> دالة بأسلوب المُعالِج المُستدعى
تأخذ دالة async
(أو دالة تُرجع وعدًا) وتُرجع دالة تتبع أسلوب المُعالِج المُستدعى الأولي للخطأ، أي أن تأخذ مُعالِجًا من نمط (err, value) =\> ...
كآخر وسيطة. في المُعالِج، ستكون الوسيطة الأولى سبب الرفض (أو null
إذا تم حل الوعد)، وستكون الوسيطة الثانية القيمة المحلّلة.
const util = require('node:util')
async function fn() {
return 'hello world'
}
const callbackFunction = util.callbackify(fn)
callbackFunction((err, ret) => {
if (err) throw err
console.log(ret)
})
سيتم طباعة:
hello world
يتم تنفيذ المُعالِج المُستدعى بشكل غير متزامن، وسيكون له تتبع مُكدس محدود. إذا قام المُعالِج المُستدعى بإلقاء استثناء، فسوف يُصدر المُعالِج حدثًا 'uncaughtException'
، وإذا لم يتم التعامل معه، فسوف ينتهي.
بما أن null
لها معنى خاص كأول وسيطة لمُعالِج مُستدعى، إذا رفضت دالة مُغلّفة وعدًا بقيمة خاطئة كسبب، فسيتم تغليف القيمة في خطأ مع تخزين القيمة الأصلية في حقل اسمه reason
.
function fn() {
return Promise.reject(null)
}
const callbackFunction = util.callbackify(fn)
callbackFunction((err, ret) => {
// عندما يتم رفض الوعد مع `null`، يتم تغليفه بخطأ و
// يتم تخزين القيمة الأصلية في `reason`.
err && Object.hasOwn(err, 'reason') && err.reason === null // true
})
util.debuglog(section[, callback])
مضاف في: v0.11.3
section
<string> سلسلة نصية تحدد جزء التطبيق الذي تم إنشاء دالةdebuglog
من أجله.callback
<Function> دالة استدعاء يتم استدعاؤها في المرة الأولى التي يتم فيها استدعاء دالة التسجيل مع وسيطة دالة وهي دالة تسجيل أكثر تحسينًا.- الإرجاع: <Function> دالة التسجيل
تُستخدم طريقة util.debuglog()
لإنشاء دالة تكتب رسائل التصحيح بشكل شرطي إلى stderr
بناءً على وجود متغير البيئة NODE_DEBUG
. إذا ظهر اسم section
ضمن قيمة متغير البيئة هذا، فإن الدالة المُرجعة تعمل بشكل مشابه لـ console.error()
. وإلا، فإن الدالة المُرجعة هي عملية لا شيء.
const util = require('node:util')
const debuglog = util.debuglog('foo')
debuglog('hello from foo [%d]', 123)
إذا تم تشغيل هذا البرنامج باستخدام NODE_DEBUG=foo
في البيئة، فسوف يُخرج شيئًا مثل:
FOO 3245: hello from foo [123]
حيث أن 3245
هو معرف العملية. إذا لم يتم تشغيله مع تعيين متغير البيئة هذا، فلن يُطبع أي شيء.
يدعم section
أيضًا البرية كارد:
const util = require('node:util')
const debuglog = util.debuglog('foo-bar')
debuglog("hi there, it's foo-bar [%d]", 2333)
إذا تم تشغيله باستخدام NODE_DEBUG=foo*
في البيئة، فسوف يُخرج شيئًا مثل:
FOO-BAR 3257: hi there, it's foo-bar [2333]
يمكن تحديد أسماء section
متعددة مفصولة بفاصلات في متغير البيئة NODE_DEBUG
: NODE_DEBUG=fs,net,tls
.
يمكن استخدام وسيطة callback
الاختيارية لاستبدال دالة التسجيل بدالة مختلفة لا تحتوي على أي تهيئة أو تغليف غير ضروري.
const util = require('node:util')
let debuglog = util.debuglog('internals', debug => {
// استبدالها بدالة تسجيل تُحسّن من اختبار ما إذا كان القسم مُمكّنًا
debuglog = debug
})
debuglog().enabled
مضاف في: v14.9.0
يستخدم مُنشئ util.debuglog().enabled
لإنشاء اختبار يمكن استخدامه في الشرطيات بناءً على وجود متغير البيئة NODE_DEBUG
. إذا ظهر اسم section
ضمن قيمة متغير البيئة هذا، فسيتم إرجاع القيمة true
. وإلا، فسيتم إرجاع القيمة false
.
const util = require('node:util')
const enabled = util.debuglog('foo').enabled
if (enabled) {
console.log('hello from foo [%d]', 123)
}
إذا تم تشغيل هذا البرنامج مع NODE_DEBUG=foo
في البيئة، فسوف يُخرج شيئًا كهذا:
hello from foo [123]
util.debug(section)
مضاف في: v14.9.0
مُرادف لـ util.debuglog
. يسمح الاستخدام بقابلية قراءة لا تعني التسجيل عند استخدام util.debuglog().enabled
فقط.
util.deprecate(fn, msg[, code])
[History]
الإصدار | التغييرات |
---|---|
v10.0.0 | يتم إصدار تحذيرات الإهمال مرة واحدة فقط لكل رمز. |
v0.8.0 | مضاف في: v0.8.0 |
fn
<Function> الدالة التي يتم إهمالها.msg
<string> رسالة تحذير لعرضها عند استدعاء الدالة المهملة.code
<string> رمز إهمال. راجع قائمة واجهات برمجة التطبيقات المهملة للحصول على قائمة بالرموز.- المُرجَع: <Function> الدالة المهملة المُغلّفة لإصدار تحذير.
تقوم طريقة util.deprecate()
بتغليف fn
(والتي قد تكون دالة أو فئة) بطريقة يتم فيها تمييزها على أنها مهملة.
const util = require('node:util')
exports.obsoleteFunction = util.deprecate(() => {
// قم بشيء ما هنا.
}, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.')
عند استدعائها، ستعيد util.deprecate()
دالة ستُصدر DeprecationWarning
باستخدام حدث 'warning'
. سيتم إصدار التحذير وطباعته إلى stderr
في المرة الأولى التي يتم فيها استدعاء الدالة المُرجعة. بعد إصدار التحذير، يتم استدعاء الدالة المُغلّفة بدون إصدار تحذير.
إذا تم توفير نفس code
الاختياري في مكالمات متعددة إلى util.deprecate()
، فسيتم إصدار التحذير مرة واحدة فقط لهذا code
.
const util = require('node:util')
const fn1 = util.deprecate(someFunction, someMessage, 'DEP0001')
const fn2 = util.deprecate(someOtherFunction, someOtherMessage, 'DEP0001')
fn1() // يُصدر تحذير إهمال برمز DEP0001
fn2() // لا يُصدر تحذير إهمال لأنه يحتوي على نفس الرمز
إذا تم استخدام علمي سطر الأوامر --no-deprecation
أو --no-warnings
، أو إذا تم تعيين خاصية process.noDeprecation
إلى true
قبل أول تحذير إهمال، فإن طريقة util.deprecate()
لا تفعل شيئًا.
إذا تم تعيين علمي سطر الأوامر --trace-deprecation
أو --trace-warnings
، أو تم تعيين خاصية process.traceDeprecation
إلى true
، فسيتم طباعة تحذير ومسار مُكدس إلى stderr
في المرة الأولى التي يتم فيها استدعاء الدالة المهملة.
إذا تم تعيين علم سطر الأوامر --throw-deprecation
، أو تم تعيين خاصية process.throwDeprecation
إلى true
، فسيتم إلقاء استثناء عند استدعاء الدالة المهملة.
يُعطى علم سطر الأوامر --throw-deprecation
وخاصية process.throwDeprecation
الأولوية على --trace-deprecation
و process.traceDeprecation
.
util.format(format[, ...args])
[السجل]
الإصدار | التغييرات |
---|---|
v12.11.0 | تم تجاهل مُحدد %c الآن. |
v12.0.0 | لم تعد وسيطة format تُؤخذ على أنها مُحدد تنسيق إلا إذا كانت تحتوي بالفعل على مُحددات تنسيق. |
v12.0.0 | إذا لم تكن وسيطة format سلسلة تنسيق، فلن يعتمد تنسيق سلسلة الإخراج بعد الآن على نوع الوسيط الأول. يُزيل هذا التغيير علامات الاقتباس الموجودة سابقًا من السلاسل التي كانت تُخرج عند عدم كون الوسيط الأول سلسلة. |
v11.4.0 | تدعم مُحددات %d ، %f ، و %i الرموز بشكل صحيح الآن. |
v11.4.0 | عمق مُحدد %o الافتراضي هو 4 مرة أخرى. |
v11.0.0 | سيعود خيار عمق مُحدد %o إلى العمق الافتراضي الآن. |
v10.12.0 | تدعم مُحددات %d و %i قيمة BigInt الآن. |
v8.4.0 | تم دعم مُحددات %o و %O الآن. |
v0.5.3 | تمت الإضافة في: v0.5.3 |
format
<سلسلة> سلسلة تنسيق تشبهprintf
.
ترجع طريقة util.format()
سلسلة مُنسّقة باستخدام الوسيط الأول كسلسلة تنسيق تشبه printf
والتي يمكن أن تحتوي على مُحدد تنسيق واحد أو أكثر. يتم استبدال كل مُحدد بالقيمة المُحوّلة من الوسيط المقابل. المُحددات المدعومة هي:
%s
: سيتم استخدامString
لتحويل جميع القيم باستثناءBigInt
،Object
و-0
. سيتم تمثيل قيمBigInt
بـn
ويتم فحص الكائنات التي ليس لديها دالةtoString
مُعرّفة بواسطة المستخدم باستخدامutil.inspect()
مع الخيارات{ depth: 0, colors: false, compact: 3 }
.%d
: سيتم استخدامNumber
لتحويل جميع القيم باستثناءBigInt
وSymbol
.%i
: يتم استخدامparseInt(value, 10)
لجميع القيم باستثناءBigInt
وSymbol
.%f
: يتم استخدامparseFloat(value)
لجميع القيم باستثناءSymbol
.%j
: JSON. يتم استبداله بسلسلة'[Circular]'
إذا كانت الوسيط تحتوي على مراجع دائرية.%o
:Object
. تمثيل نصي لكائن بتنسيق كائن JavaScript عام. مشابه لـutil.inspect()
مع الخيارات{ showHidden: true, showProxy: true }
. سيعرض هذا الكائن الكامل بما في ذلك الخصائص غير القابلة للعد والوكلاء.%O
:Object
. تمثيل نصي لكائن بتنسيق كائن JavaScript عام. مشابه لـutil.inspect()
بدون خيارات. سيعرض هذا الكائن الكامل بدون تضمين الخصائص غير القابلة للعد والوكلاء.%c
:CSS
. يتم تجاهل هذا المُحدد وسيتخطى أي CSS مُمرر.%%
: علامة النسبة المئوية المفردة ('%'
). هذا لا يستهلك وسيطًا.- الإرجاع: <سلسلة> السلسلة المُنسّقة
إذا لم يكن لدى مُحدد وسيط مُقابل، فلن يتم استبداله:
util.format('%s:%s', 'foo')
// الإرجاع: 'foo:%s'
يتم تنسيق القيم التي ليست جزءًا من سلسلة التنسيق باستخدام util.inspect()
إذا لم يكن نوعها string
.
إذا كانت هناك وسيطات إضافية مُمرّرة إلى طريقة util.format()
أكثر من عدد المُحددات، فسيتم دمج الوسيطات الإضافية في السلسلة المُرجعة، مفصولة بمسافات:
util.format('%s:%s', 'foo', 'bar', 'baz')
// الإرجاع: 'foo:bar baz'
إذا لم يحتوِ الوسيط الأول على مُحدد تنسيق صالح، فإن util.format()
تُرجع سلسلة هي دمج جميع الوسيطات مفصولة بمسافات:
util.format(1, 2, 3)
// الإرجاع: '1 2 3'
إذا تم تمرير وسيط واحد فقط إلى util.format()
، فسيتم إرجاعه كما هو بدون أي تنسيق:
util.format('%% %s')
// الإرجاع: '%% %s'
util.format()
هي طريقة متزامنة مُصممة كأداة تصحيح أخطاء. قد يكون لبعض قيم الإدخال عبء أداء كبير يمكن أن يحجب حلقة الأحداث. استخدم هذه الدالة بحذر ولا تستخدمها أبدًا في مسار شفرة ساخن.
util.formatWithOptions(inspectOptions, format[, ...args])
مضاف في: v10.0.0
هذه الدالة مطابقة لـ util.format()
، إلا أنها تأخذ وسيطة inspectOptions
والتي تحدد الخيارات التي يتم تمريرها إلى util.inspect()
.
util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 })
// ترجع 'See object { foo: 42 }'، حيث يتم تلوين `42` كرقم
// عند الطباعة على محطة الطرفية.
util.getCallSites(frameCountOrOptions, [options])
[مستقر: 1 - تجريبي]
مستقر: 1 استقرار: 1.1 - تطوير نشط
[السجل]
الإصدار | التغييرات |
---|---|
v23.3.0 | تم تغيير اسم واجهة برمجة التطبيقات من util.getCallSite إلى util.getCallSites() . |
v22.9.0 | مضاف في: v22.9.0 |
frameCount
<number> عدد إطارات اختياري لالتقاطها كأشياء موقع استدعاء. افتراضي:10
. النطاق المسموح به هو بين 1 و 200.options
<Object> اختياريsourceMap
<boolean> إعادة بناء الموقع الأصلي في تتبع المكدس من خريطة المصدر. ممكّن افتراضيًا باستخدام العلم--enable-source-maps
.
ترجع: <Object[]> مصفوفة من أجسام مواقع الاستدعاء
functionName
<string> ترجع اسم الدالة المرتبطة بموقع الاستدعاء هذا.scriptName
<string> ترجع اسم المورد الذي يحتوي على البرنامج النصي للدالة لموقع الاستدعاء هذا.lineNumber
<number> ترجع الرقم، القائم على 1، للسطر لاستدعاء الدالة المرتبطة.column
<number> ترجع الإزاحة العمودية القائمة على 1 على السطر لاستدعاء الدالة المرتبطة.
ترجع مصفوفة من أجسام مواقع الاستدعاء التي تحتوي على مكدس دالة المتصل.
const util = require('node:util')
function exampleFunction() {
const callSites = util.getCallSites()
console.log('مواقع الاستدعاء:')
callSites.forEach((callSite, index) => {
console.log(`موقع الاستدعاء ${index + 1}:`)
console.log(`اسم الدالة: ${callSite.functionName}`)
console.log(`اسم البرنامج النصي: ${callSite.scriptName}`)
console.log(`رقم السطر: ${callSite.lineNumber}`)
console.log(`رقم العمود: ${callSite.column}`)
})
// موقع الاستدعاء 1:
// اسم الدالة: exampleFunction
// اسم البرنامج النصي: /home/example.js
// رقم السطر: 5
// رقم العمود: 26
// موقع الاستدعاء 2:
// اسم الدالة: anotherFunction
// اسم البرنامج النصي: /home/example.js
// رقم السطر: 22
// رقم العمود: 3
// ...
}
// دالة لمحاكاة طبقة مكدس أخرى
function anotherFunction() {
exampleFunction()
}
anotherFunction()
من الممكن إعادة بناء المواقع الأصلية عن طريق تعيين الخيار sourceMap
إلى true
. إذا لم تتوفر خريطة المصدر، فسيكون الموقع الأصلي هو نفسه الموقع الحالي. عندما يتم تمكين علم --enable-source-maps
، على سبيل المثال عند استخدام --experimental-transform-types
، سيكون sourceMap
صحيحًا افتراضيًا.
import util from 'node:util'
interface Foo {
foo: string
}
const callSites = util.getCallSites({ sourceMap: true })
// مع sourceMap:
// اسم الدالة: ''
// اسم البرنامج النصي: example.js
// رقم السطر: 7
// رقم العمود: 26
// بدون sourceMap:
// اسم الدالة: ''
// اسم البرنامج النصي: example.js
// رقم السطر: 2
// رقم العمود: 26
util.getSystemErrorName(err)
مضاف في: v9.7.0
يرجع اسمًا نصيًا لرمز خطأ رقمي يأتي من واجهة برمجة تطبيقات Node.js. يعتمد التعيين بين رموز الأخطاء وأسماء الأخطاء على النظام الأساسي. راجع أخطاء النظام الشائعة لأسماء الأخطاء الشائعة.
fs.access('file/that/does/not/exist', err => {
const name = util.getSystemErrorName(err.errno)
console.error(name) // ENOENT
})
util.getSystemErrorMap()
مضاف في: v16.0.0، v14.17.0
- قيمة الإرجاع: <Map>
يرجع خريطة لجميع رموز أخطاء النظام المتاحة من واجهة برمجة تطبيقات Node.js. يعتمد التعيين بين رموز الأخطاء وأسماء الأخطاء على النظام الأساسي. راجع أخطاء النظام الشائعة لأسماء الأخطاء الشائعة.
fs.access('file/that/does/not/exist', err => {
const errorMap = util.getSystemErrorMap()
const name = errorMap.get(err.errno)
console.error(name) // ENOENT
})
util.getSystemErrorMessage(err)
مضاف في: v23.1.0
يرجع رسالة نصية لرمز خطأ رقمي يأتي من واجهة برمجة تطبيقات Node.js. يعتمد التعيين بين رموز الأخطاء والرسائل النصية على النظام الأساسي.
fs.access('file/that/does/not/exist', err => {
const name = util.getSystemErrorMessage(err.errno)
console.error(name) // No such file or directory
})
util.inherits(constructor, superConstructor)
[السجل]
الإصدار | التغييرات |
---|---|
v5.0.0 | يمكن لمعامل constructor الآن الإشارة إلى فئة ES6. |
v0.3.0 | مضاف في: v0.3.0 |
[مستقر: 3 - تراثي]
مستقر: 3 ثبات: 3 - تراثي: استخدم بناء جملة فئة ES2015 وكلمة المفتاح extends
بدلاً من ذلك.
constructor
<Function>superConstructor
<Function>
يُنصح بتجنب استخدام util.inherits()
. يرجى استخدام كلمات المفتاح ES6 class
و extends
للحصول على دعم وراثة مستوى اللغة. لاحظ أيضًا أن الأسلوبين غير متوافقين دلاليًا.
ورث طرق النموذج الأولي من مُنشئ constructor إلى آخر. سيتم تعيين النموذج الأولي لـ constructor
إلى كائن جديد تم إنشاؤه من superConstructor
.
يضيف هذا بشكل أساسي بعض التحقق من الإدخال فوق Object.setPrototypeOf(constructor.prototype, superConstructor.prototype)
. كراحة إضافية، سيكون superConstructor
في متناول اليد من خلال خاصية constructor.super_
.
const util = require('node:util')
const EventEmitter = require('node:events')
function MyStream() {
EventEmitter.call(this)
}
util.inherits(MyStream, EventEmitter)
MyStream.prototype.write = function (data) {
this.emit('data', data)
}
const stream = new MyStream()
console.log(stream instanceof EventEmitter) // true
console.log(MyStream.super_ === EventEmitter) // true
stream.on('data', data => {
console.log(`Received data: "${data}"`)
})
stream.write('It works!') // Received data: "It works!"
مثال ES6 باستخدام class
و extends
:
const EventEmitter = require('node:events')
class MyStream extends EventEmitter {
write(data) {
this.emit('data', data)
}
}
const stream = new MyStream()
stream.on('data', data => {
console.log(`Received data: "${data}"`)
})
stream.write('With ES6')
util.inspect(object[, options])
util.inspect(object[, showHidden[, depth[, colors]]])
[History]
الإصدار | التغييرات |
---|---|
v16.18.0 | إضافة دعم لـ maxArrayLength عند فحص Set و Map . |
v17.3.0، v16.14.0 | خيار numericSeparator مدعوم الآن. |
v13.0.0 | المرجعيات الدائرية تتضمن الآن علامة مرجعية. |
v14.6.0، v12.19.0 | إذا كان object من vm.Context مختلف الآن، فلن تتلقى دالة الفحص المخصصة عليه وسيطات محددة بالسياق بعد الآن. |
v13.13.0، v12.17.0 | خيار maxStringLength مدعوم الآن. |
v13.5.0، v12.16.0 | يتم فحص خصائص النموذج الأولي المُعرّفة من قِبل المستخدم في حالة تعيين showHidden على true . |
v12.0.0 | تم تغيير قيمة خيار compact الافتراضية إلى 3 وتم تغيير قيمة خيار breakLength الافتراضية إلى 80 . |
v12.0.0 | لم تعد الخصائص الداخلية تظهر في وسيط السياق لوظيفة الفحص المخصصة. |
v11.11.0 | خيار compact يقبل الأرقام لوضع إخراج جديد. |
v11.7.0 | تُظهر مصفوفات البايت الآن محتوياتها الثنائية أيضًا. |
v11.5.0 | خيار getters مدعوم الآن. |
v11.4.0 | تم تغيير قيمة depth الافتراضية مرة أخرى إلى 2 . |
v11.0.0 | تم تغيير قيمة depth الافتراضية إلى 20 . |
v11.0.0 | تم تقييد إخراج الفحص الآن إلى حوالي 128 ميجابايت. لن يتم فحص البيانات التي تتجاوز هذا الحجم بالكامل. |
v10.12.0 | خيار sorted مدعوم الآن. |
v10.6.0 | أصبح فحص القوائم المرتبطة والأشياء المماثلة ممكنًا حتى الحد الأقصى لحجم مكدس المكالمات. |
v10.0.0 | يمكن الآن فحص إدخالات WeakMap و WeakSet أيضًا. |
v9.9.0 | خيار compact مدعوم الآن. |
v6.6.0 | يمكن لوظائف الفحص المخصصة الآن إرجاع this . |
v6.3.0 | خيار breakLength مدعوم الآن. |
v6.1.0 | خيار maxArrayLength مدعوم الآن؛ على وجه الخصوص، يتم اقتطاع المصفوفات الطويلة بشكل افتراضي. |
v6.1.0 | خيار showProxy مدعوم الآن. |
v0.3.0 | تمت الإضافة في: v0.3.0 |
object
<any> أي بدائي JavaScript أوObject
.options
<Object>showHidden
<boolean> إذا كانtrue
، فسيتم تضمين الرموز والخصائص غير القابلة للعد لـobject
في النتيجة المُنسّقة. يتم تضمين إدخالاتWeakMap
وWeakSet
أيضًا بالإضافة إلى خصائص النموذج الأولي المُعرّفة من قِبل المستخدم (باستثناء خصائص الأسلوب). الافتراضي:false
.depth
<number> يحدد عدد مرات التكرار أثناء تنسيقobject
. هذا مفيد لفحص الكائنات الكبيرة. لإجراء تكرار يصل إلى الحد الأقصى لحجم مكدس المكالمات، مرّرInfinity
أوnull
. الافتراضي:2
.colors
<boolean> إذا كانtrue
، فسيتم تصميم الإخراج باستخدام رموز ألوان ANSI. الألوان قابلة للتخصيص. انظر تخصيص ألوانutil.inspect
. الافتراضي:false
.customInspect
<boolean> إذا كانfalse
، فلن يتم استدعاء دوال[util.inspect.custom](depth, opts, inspect)
. الافتراضي:true
.showProxy
<boolean> إذا كانtrue
، فإن فحصProxy
يتضمن كائناتtarget
وhandler
. الافتراضي:false
.maxArrayLength
<integer> يحدد الحد الأقصى لعدد عناصرArray
،TypedArray
،Map
،Set
،WeakMap
، وWeakSet
التي سيتم تضمينها عند التنسيق. عيّن علىnull
أوInfinity
لإظهار جميع العناصر. عيّن على0
أو قيمة سالبة لإخفاء جميع العناصر. الافتراضي:100
.maxStringLength
<integer> يحدد الحد الأقصى لعدد الأحرف التي سيتم تضمينها عند التنسيق. عيّن علىnull
أوInfinity
لإظهار جميع العناصر. عيّن على0
أو قيمة سالبة لإخفاء جميع الأحرف. الافتراضي:10000
.breakLength
<integer> الطول الذي يتم عنده تقسيم قيم الإدخال على أسطر متعددة. عيّن علىInfinity
لتنسيق الإدخال كسطر واحد (بالتزامن مع تعيينcompact
علىtrue
أو أي رقم >=1
). الافتراضي:80
.compact
<boolean> | <integer> يؤدي تعيين هذا الخيار علىfalse
إلى عرض كل مفتاح كائن على سطر جديد. سيتم الفصل إلى أسطر جديدة في النص الذي يزيد طوله عنbreakLength
. إذا تم تعيينه على رقم، فسيتم توحيد معظم العناصر الداخليةn
في سطر واحد طالما أن جميع الخصائص تناسبbreakLength
. كما يتم تجميع عناصر المصفوفة القصيرة معًا. لمزيد من المعلومات، راجع المثال أدناه. الافتراضي:3
.sorted
<boolean> | <Function> إذا تم تعيينه علىtrue
أو دالة، فسيتم فرز جميع خصائص الكائن، وإدخالاتSet
وMap
في السلسلة الناتجة. إذا تم تعيينه علىtrue
، فسيتم استخدام الفرز الافتراضي. إذا تم تعيينه على دالة، فسيتم استخدامه كـ دالة مقارنة.getters
<boolean> | <string> إذا تم تعيينه علىtrue
، فسيتم فحص المُنشّئات. إذا تم تعيينه على'get'
، فسيتم فحص المُنشّئات فقط بدون مُعيّن مقابل. إذا تم تعيينه على'set'
، فسيتم فحص المُنشّئات فقط مع مُعيّن مقابل. قد يتسبب هذا في آثار جانبية حسب دالة المُنشّئ. الافتراضي:false
.numericSeparator
<boolean> إذا تم تعيينه علىtrue
، فسيتم استخدام الشرطة السفلية لفصل كل ثلاثة أرقام في جميع الأعداد الصحيحة الكبيرة والأرقام. الافتراضي:false
.
الإرجاع: <string> تمثيل
object
.
ترجع طريقة util.inspect()
تمثيلًا نصيًا لـ object
يُقصد به التصحيح. قد يتغير إخراج util.inspect
في أي وقت ولا يجب الاعتماد عليه برمجيًا. يمكن تمرير خيارات إضافية تغير النتيجة. سيستخدم util.inspect()
اسم المُنشئ و/أو @@toStringTag
لإنشاء علامة قابلة للتعريف لقيمة مُفحصة.
class Foo {
get [Symbol.toStringTag]() {
return 'bar'
}
}
class Bar {}
const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } })
util.inspect(new Foo()) // 'Foo [bar] {}'
util.inspect(new Bar()) // 'Bar {}'
util.inspect(baz) // '[foo] {}'
تشير المرجعيات الدائرية إلى مرساها باستخدام فهرس مرجعي:
const { inspect } = require('node:util')
const obj = {}
obj.a = [obj]
obj.b = {}
obj.b.inner = obj.b
obj.b.obj = obj
console.log(inspect(obj))
// <ref *1> {
// a: [ [Circular *1] ],
// b: <ref *2> { inner: [Circular *2], obj: [Circular *1] }
// }
يُوضح المثال التالي فحص جميع خصائص كائن util
:
const util = require('node:util')
console.log(util.inspect(util, { showHidden: true, depth: null }))
يُوضح المثال التالي تأثير خيار compact
:
const util = require('node:util')
const o = {
a: [
1,
2,
[
[
'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' +
'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.',
'test',
'foo',
],
],
4,
],
b: new Map([
['za', 1],
['zb', 'test'],
]),
}
console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 }))
// { a:
// [ 1,
// 2,
// [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line
// 'test',
// 'foo' ] ],
// 4 ],
// b: Map(2) { 'za' => 1, 'zb' => 'test' } }
// تعيين `compact` على false أو عدد صحيح ينتج عنه إخراج أكثر ملاءمة للقارئ.
console.log(util.inspect(o, { compact: false, depth: 5, breakLength: 80 }))
// {
// a: [
// 1,
// 2,
// [
// [
// 'Lorem ipsum dolor sit amet,\n' +
// 'consectetur adipiscing elit, sed do eiusmod \n' +
// 'tempor incididunt ut labore et dolore magna aliqua.',
// 'test',
// 'foo'
// ]
// ],
// 4
// ],
// b: Map(2) {
// 'za' => 1,
// 'zb' => 'test'
// }
// }
// تعيين `breakLength` على سبيل المثال 150 سيطبع نص "Lorem ipsum" في سطر واحد.
يسمح خيار showHidden
بفحص إدخالات WeakMap
و WeakSet
. إذا كان هناك المزيد من الإدخالات من maxArrayLength
، فلا يوجد ضمان لعرض الإدخالات. هذا يعني أن استرجاع نفس إدخالات WeakSet
مرتين قد ينتج عنه إخراج مختلف. علاوة على ذلك، قد يتم جمع القمامة للإدخالات التي لا تحتوي على مراجع قوية متبقية في أي وقت.
const { inspect } = require('node:util')
const obj = { a: 1 }
const obj2 = { b: 2 }
const weakSet = new WeakSet([obj, obj2])
console.log(inspect(weakSet, { showHidden: true }))
// WeakSet { { a: 1 }, { b: 2 } }
يضمن خيار sorted
أن ترتيب إدراج خاصية الكائن لا يؤثر على نتيجة util.inspect()
.
const { inspect } = require('node:util')
const assert = require('node:assert')
const o1 = {
b: [2, 3, 1],
a: '`a` comes before `b`',
c: new Set([2, 3, 1]),
}
console.log(inspect(o1, { sorted: true }))
// { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } }
console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) }))
// { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' }
const o2 = {
c: new Set([2, 1, 3]),
a: '`a` comes before `b`',
b: [2, 3, 1],
}
assert.strict.equal(inspect(o1, { sorted: true }), inspect(o2, { sorted: true }))
يضيف خيار numericSeparator
شرطة سفلية لكل ثلاثة أرقام لجميع الأرقام.
const { inspect } = require('node:util')
const thousand = 1_000
const million = 1_000_000
const bigNumber = 123_456_789n
const bigDecimal = 1_234.123_45
console.log(inspect(thousand, { numericSeparator: true }))
// 1_000
console.log(inspect(million, { numericSeparator: true }))
// 1_000_000
console.log(inspect(bigNumber, { numericSeparator: true }))
// 123_456_789n
console.log(inspect(bigDecimal, { numericSeparator: true }))
// 1_234.123_45
util.inspect()
هي طريقة متزامنة مخصصة للتصحيح. يبلغ الحد الأقصى لطول إخراجها حوالي 128 ميجابايت. سيتم اقتطاع المدخلات التي تؤدي إلى إخراج أطول.
تخصيص ألوان util.inspect
يمكن تخصيص إخراج الألوان (إذا تم تمكينه) لـ util.inspect
عالميًا عبر خصائص util.inspect.styles
و util.inspect.colors
.
util.inspect.styles
هي خريطة تربط اسم نمط بلون من util.inspect.colors
.
أنماط الافتراضية والألوان المرتبطة بها هي:
bigint
:yellow
boolean
:yellow
date
:magenta
module
:underline
name
: (بدون تنسيق)null
:bold
number
:yellow
regexp
:red
special
:cyan
(مثلًا،Proxies
)string
:green
symbol
:green
undefined
:grey
يستخدم تنسيق الألوان رموز التحكم ANSI التي قد لا تكون مدعومة في جميع المحطات. للتحقق من دعم الألوان، استخدم tty.hasColors()
.
رموز التحكم المحددة مسبقًا مدرجة أدناه (مُجَمَّعة كـ "معدلات"، "ألوان المقدمة"، و"ألوان الخلفية").
المعدلات
يختلف دعم المعدلات عبر المحطات المختلفة. سيتم تجاهلها في الغالب، إذا لم يتم دعمها.
reset
- إعادة تعيين جميع معدلات (الألوان) إلى إعداداتها الافتراضية- bold - جعل النص غامقًا
- italic - جعل النص مائلًا
underline
- جعل النص مسطرًا تحتهstrikethrough- وضع خط أفقي عبر وسط النص (اسم آخر:strikeThrough
,crossedout
,crossedOut
)hidden
- طباعة النص، لكن جعله غير مرئي (اسم آخر:conceal
)dim
- تقليل شدة اللون (اسم آخر:faint
)overlined
- جعل النص مسطرًا فوقهblink
- إخفاء وإظهار النص في فاصل زمنيinverse
- تبديل ألوان المقدمة والخلفية (اسم آخر:swapcolors
,swapColors
)doubleunderline
- جعل النص مسطرًا تحته مرتين (اسم آخر:doubleUnderline
)framed
- رسم إطار حول النص
ألوان المقدمة
black
red
green
yellow
blue
magenta
cyan
white
gray
(اسم آخر:grey
,blackBright
)redBright
greenBright
yellowBright
blueBright
magentaBright
cyanBright
whiteBright
ألوان الخلفية
bgBlack
bgRed
bgGreen
bgYellow
bgBlue
bgMagenta
bgCyan
bgWhite
bgGray
(اسم آخر:bgGrey
,bgBlackBright
)bgRedBright
bgGreenBright
bgYellowBright
bgBlueBright
bgMagentaBright
bgCyanBright
bgWhiteBright
دوال الفحص المخصصة على الكائنات
[السجل]
الإصدار | التغييرات |
---|---|
v17.3.0، v16.14.0 | تمت إضافة وسيطة الفحص لمزيد من التشغيل البيني. |
v0.1.97 | تمت الإضافة في: v0.1.97 |
قد تقوم الكائنات أيضًا بتعريف دالة [util.inspect.custom](depth, opts, inspect)
الخاصة بها، والتي ستقوم دالة util.inspect()
باستدعائها واستخدام نتيجتها عند فحص الكائن.
const util = require('node:util')
class Box {
constructor(value) {
this.value = value
}
[util.inspect.custom](depth, options, inspect) {
if (depth < 0) {
return options.stylize('[Box]', 'special')
}
const newOptions = Object.assign({}, options, {
depth: options.depth === null ? null : options.depth - 1,
})
// خمس مسافات فراغ لأن هذا هو حجم "Box< ".
const padding = ' '.repeat(5)
const inner = inspect(this.value, newOptions).replace(/\n/g, `\n${padding}`)
return `${options.stylize('Box', 'special')}< ${inner} >`
}
}
const box = new Box(true)
util.inspect(box)
// تُرجع: "Box< true >"
عادةً ما تُرجع دوال [util.inspect.custom](depth, opts, inspect)
المخصصة سلسلة، ولكن قد تُرجع قيمة من أي نوع سيتم تنسيقها وفقًا لذلك بواسطة util.inspect()
.
const util = require('node:util')
const obj = { foo: 'this will not show up in the inspect() output' }
obj[util.inspect.custom] = depth => {
return { bar: 'baz' }
}
util.inspect(obj)
// تُرجع: "{ bar: 'baz' }"
util.inspect.custom
[السجل]
الإصدار | التغييرات |
---|---|
v10.12.0 | تم تعريف هذا الآن كرمز مشترك. |
v6.6.0 | تمت الإضافة في: v6.6.0 |
- <رمز> يمكن استخدامه للإعلان عن دوال فحص مخصصة.
بالإضافة إلى إمكانية الوصول إليها من خلال util.inspect.custom
، تم تسجيل هذا الرمز عالميًا ويمكن الوصول إليه في أي بيئة كـ Symbol.for('nodejs.util.inspect.custom')
.
يسمح استخدام هذا بكتابة التعليمات البرمجية بطريقة قابلة للنقل، بحيث يتم استخدام دالة الفحص المخصصة في بيئة Node.js ويتم تجاهلها في المتصفح. يتم تمرير دالة util.inspect()
نفسها كوسيطة ثالثة لدالة الفحص المخصصة للسماح بمزيد من قابلية النقل.
const customInspectSymbol = Symbol.for('nodejs.util.inspect.custom')
class Password {
constructor(value) {
this.value = value
}
toString() {
return 'xxxxxxxx'
}
[customInspectSymbol](depth, inspectOptions, inspect) {
return `Password <${this.toString()}>`
}
}
const password = new Password('r0sebud')
console.log(password)
// يطبع Password <xxxxxxxx>
راجع دوّال الفحص المخصصة على الكائنات لمزيد من التفاصيل.
util.inspect.defaultOptions
مضاف في: v6.4.0
تتيح قيمة defaultOptions
تخصيص الخيارات الافتراضية المستخدمة بواسطة util.inspect
. هذا مفيد لوظائف مثل console.log
أو util.format
التي تستدعي ضمنيًا util.inspect
. يجب تعيينها إلى كائن يحتوي على خيار واحد أو أكثر صالح من خيارات util.inspect()
. كما يدعم تعيين خصائص الخيار مباشرة.
const util = require('node:util')
const arr = Array(101).fill(0)
console.log(arr) // يسجل المصفوفة المختصرة
util.inspect.defaultOptions.maxArrayLength = null
console.log(arr) // يسجل المصفوفة الكاملة
util.isDeepStrictEqual(val1, val2)
مضاف في: v9.0.0
يرجع true
إذا كانت هناك مساواة صارمة عميقة بين val1
و val2
. خلاف ذلك، يُرجع false
.
انظر إلى assert.deepStrictEqual()
لمزيد من المعلومات حول المساواة الصارمة العميقة.
الصف: util.MIMEType
مضاف في: v19.1.0، v18.13.0
تنفيذ لـ صف MIMEType.
وفقًا لاتفاقيات المتصفح، يتم تنفيذ جميع خصائص كائنات MIMEType
كـ getters و setters على النموذج الأولي للصف، بدلاً من خصائص البيانات على الكائن نفسه.
سلسلة MIME هي سلسلة مُهيكلة تحتوي على مكونات ذات معنى متعددة. عند تحليلها، يتم إرجاع كائن MIMEType
يحتوي على خصائص لكل من هذه المكونات.
مُنشئ: new MIMEType(input)
input
<string> مدخل MIME المراد تحليله
يُنشئ كائن MIMEType
جديدًا عن طريق تحليل input
.
import { MIMEType } from 'node:util'
const myMIME = new MIMEType('text/plain')
const { MIMEType } = require('node:util')
const myMIME = new MIMEType('text/plain')
سيتم طرح TypeError
إذا لم يكن input
MIME صالحًا. لاحظ أنه سيتم بذل جهد لتحويل القيم المعطاة إلى سلاسل. على سبيل المثال:
import { MIMEType } from 'node:util'
const myMIME = new MIMEType({ toString: () => 'text/plain' })
console.log(String(myMIME))
// يُطبع: text/plain
const { MIMEType } = require('node:util')
const myMIME = new MIMEType({ toString: () => 'text/plain' })
console.log(String(myMIME))
// يُطبع: text/plain
mime.type
يحصل على جزء نوع MIME ويضبطه.
import { MIMEType } from 'node:util'
const myMIME = new MIMEType('text/javascript')
console.log(myMIME.type)
// يطبع: text
myMIME.type = 'application'
console.log(myMIME.type)
// يطبع: application
console.log(String(myMIME))
// يطبع: application/javascript
const { MIMEType } = require('node:util')
const myMIME = new MIMEType('text/javascript')
console.log(myMIME.type)
// يطبع: text
myMIME.type = 'application'
console.log(myMIME.type)
// يطبع: application
console.log(String(myMIME))
// يطبع: application/javascript
mime.subtype
يحصل على جزء النوع الفرعي لـ MIME ويضبطه.
import { MIMEType } from 'node:util'
const myMIME = new MIMEType('text/ecmascript')
console.log(myMIME.subtype)
// يطبع: ecmascript
myMIME.subtype = 'javascript'
console.log(myMIME.subtype)
// يطبع: javascript
console.log(String(myMIME))
// يطبع: text/javascript
const { MIMEType } = require('node:util')
const myMIME = new MIMEType('text/ecmascript')
console.log(myMIME.subtype)
// يطبع: ecmascript
myMIME.subtype = 'javascript'
console.log(myMIME.subtype)
// يطبع: javascript
console.log(String(myMIME))
// يطبع: text/javascript
mime.essence
يحصل على جوهر MIME. هذه الخاصية للقراءة فقط. استخدم mime.type
أو mime.subtype
لتغيير MIME.
import { MIMEType } from 'node:util'
const myMIME = new MIMEType('text/javascript;key=value')
console.log(myMIME.essence)
// يطبع: text/javascript
myMIME.type = 'application'
console.log(myMIME.essence)
// يطبع: application/javascript
console.log(String(myMIME))
// يطبع: application/javascript;key=value
const { MIMEType } = require('node:util')
const myMIME = new MIMEType('text/javascript;key=value')
console.log(myMIME.essence)
// يطبع: text/javascript
myMIME.type = 'application'
console.log(myMIME.essence)
// يطبع: application/javascript
console.log(String(myMIME))
// يطبع: application/javascript;key=value
mime.params
يحصل على كائن MIMEParams
الذي يمثل معلمات MIME. هذه الخاصية للقراءة فقط. راجع وثائق MIMEParams
للحصول على التفاصيل.
mime.toString()
- الإرجاع:
<string>
ترجع طريقة toString()
على كائن MIMEType
MIME المتسلسل.
بسبب الحاجة إلى الامتثال للمعايير، لا تسمح هذه الطريقة للمستخدمين بتخصيص عملية تسلسل MIME.
mime.toJSON()
- الإرجاع:
<string>
اسم مستعار لـ mime.toString()
.
يتم استدعاء هذه الطريقة تلقائيًا عند تسلسل كائن MIMEType
باستخدام JSON.stringify()
.
import { MIMEType } from 'node:util'
const myMIMES = [new MIMEType('image/png'), new MIMEType('image/gif')]
console.log(JSON.stringify(myMIMES))
// Prints: ["image/png", "image/gif"]
const { MIMEType } = require('node:util')
const myMIMES = [new MIMEType('image/png'), new MIMEType('image/gif')]
console.log(JSON.stringify(myMIMES))
// Prints: ["image/png", "image/gif"]
Class: util.MIMEParams
مضاف في: v19.1.0، v18.13.0
يوفر واجهة برمجة التطبيقات MIMEParams
إمكانية القراءة والكتابة لمعلمات MIMEType
.
مُنشئ: new MIMEParams()
يُنشئ كائن MIMEParams
جديدًا بمعلمات فارغة.
import { MIMEParams } from 'node:util'
const myParams = new MIMEParams()
const { MIMEParams } = require('node:util')
const myParams = new MIMEParams()
mimeParams.delete(name)
name
<string>
يزيل جميع أزواج اسم-قيمة التي اسمها هو name
.
mimeParams.entries()
- عائد: <Iterator>
يُرجع مُكررًا لكل زوج من أزواج اسم-القيمة في المعلمات. كل عنصر من عناصر المُكرر هو مصفوفة جافا سكريبت. العنصر الأول من المصفوفة هو name
، والعنصر الثاني هو value
.
mimeParams.get(name)
يُرجع قيمة أول زوج اسم-قيمة اسمه name
. إذا لم تكن هناك أزواج كهذه، يتم إرجاع null
.
mimeParams.has(name)
يُرجع true
إذا كان هناك زوج اسم-قيمة واحد على الأقل اسمه name
.
mimeParams.keys()
- عائد: <Iterator>
يُرجع مُكررًا لأسماء كل زوج اسم-قيمة.
import { MIMEType } from 'node:util'
const { params } = new MIMEType('text/plain;foo=0;bar=1')
for (const name of params.keys()) {
console.log(name)
}
// يُطبع:
// foo
// bar
const { MIMEType } = require('node:util')
const { params } = new MIMEType('text/plain;foo=0;bar=1')
for (const name of params.keys()) {
console.log(name)
}
// يُطبع:
// foo
// bar
mimeParams.set(name, value)
يُعيّن القيمة في كائن MIMEParams
المرتبط بـ name
إلى value
. إذا كانت هناك أزواج اسم-قيمة موجودة مسبقًا أسماؤها name
، فعيّن قيمة أول زوج من هذه الأزواج إلى value
.
import { MIMEType } from 'node:util'
const { params } = new MIMEType('text/plain;foo=0;bar=1')
params.set('foo', 'def')
params.set('baz', 'xyz')
console.log(params.toString())
// يُطبع: foo=def;bar=1;baz=xyz
const { MIMEType } = require('node:util')
const { params } = new MIMEType('text/plain;foo=0;bar=1')
params.set('foo', 'def')
params.set('baz', 'xyz')
console.log(params.toString())
// يُطبع: foo=def;bar=1;baz=xyz
mimeParams.values()
- عائد: <Iterator>
يعيد مُكررًا لقيم كل زوج اسم-قيمة.
mimeParams[@@iterator]()
- عائد: <Iterator>
اسم مستعار لـ mimeParams.entries()
.
import { MIMEType } from 'node:util'
const { params } = new MIMEType('text/plain;foo=bar;xyz=baz')
for (const [name, value] of params) {
console.log(name, value)
}
// يطبع:
// foo bar
// xyz baz
const { MIMEType } = require('node:util')
const { params } = new MIMEType('text/plain;foo=bar;xyz=baz')
for (const [name, value] of params) {
console.log(name, value)
}
// يطبع:
// foo bar
// xyz baz
util.parseArgs([config])
[History]
الإصدار | التغييرات |
---|---|
v22.4.0, v20.16.0 | إضافة دعم للسماح بالخيارات السالبة في مُدخَل config . |
v20.0.0 | لم يعد هذا الواجهة البرمجية تجريبيًا. |
v18.11.0, v16.19.0 | إضافة دعم للقيم الافتراضية في مُدخَل config . |
v18.7.0, v16.17.0 | إضافة دعم لإرجاع معلومات تحليل مفصلة باستخدام tokens في مُدخَل config والخصائص المُرجعة. |
v18.3.0, v16.17.0 | تمت الإضافة في: v18.3.0, v16.17.0 |
config
<Object> يستخدم لتوفير وسيطات للتحليل ولتكوين المُحلل. يدعمconfig
الخصائص التالية:args
<string[]> مصفوفة من سلاسل الوسيطات. الافتراضي:process.argv
مع إزالةexecPath
وfilename
.options
<Object> يستخدم لوصف الوسيطات المعروفة للمحلل. مفاتيحoptions
هي الأسماء الطويلة للخيارات والقيم هي <Object> التي تقبل الخصائص التالية:type
<string> نوع الوسيط، والذي يجب أن يكون إماboolean
أوstring
.multiple
<boolean> ما إذا كان يمكن توفير هذا الخيار عدة مرات. إذا كانتtrue
، فسيتم جمع جميع القيم في مصفوفة. إذا كانتfalse
، فإن قيم الخيار هي آخرها يفوز. الافتراضي:false
.short
<string> اسم مستعار مكون من حرف واحد للخيار.default
<string> | <boolean> | <string[]> | <boolean[]> قيمة الخيار الافتراضية عندما لا يتم تعيينها بواسطةargs
. يجب أن يكون من نفس نوع خاصيةtype
. عندما تكونmultiple
هيtrue
، فيجب أن تكون مصفوفة.strict
<boolean> هل يجب إخراج خطأ عند مواجهة وسيطات غير معروفة، أو عند تمرير وسيطات لا تتطابق معtype
المُهيأ فيoptions
. الافتراضي:true
.allowPositionals
<boolean> ما إذا كان هذا الأمر يقبل وسيطات موضعية. الافتراضي:false
إذا كانتstrict
هيtrue
، وإلاtrue
.allowNegative
<boolean> إذا كانتtrue
، يسمح بتعيين خيارات منطقية إلىfalse
صراحةً من خلال إضافة بادئة لاسم الخيار بـ--no-
. الافتراضي:false
.tokens
<boolean> إرجاع الرموز المُحللة. هذا مفيد لتوسيع السلوك المُدمج، من إضافة عمليات تحقق إضافية إلى إعادة معالجة الرموز بطرق مختلفة. الافتراضي:false
.
عائد: <Object> الوسيطات المُحللة لسطر الأوامر:
values
<Object> تعيين لأسماء الخيارات المُحللة مع قيمها <string> أو <boolean>.positionals
<string[]> وسيطات موضعية.tokens
<Object[]> | <undefined> انظر قسم parseArgs tokens. يتم إرجاعه فقط إذا كانconfig
يتضمنtokens: true
.
يوفر واجهة برمجة تطبيقات عالية المستوى لتحليل وسيطات سطر الأوامر أكثر من التفاعل مع process.argv
مباشرةً. يأخذ مواصفات الوسيطات المُتوقعة ويعيد كائنًا مُهيكلًا مع الخيارات المُحللة والموضعيات.
import { parseArgs } from 'node:util'
const args = ['-f', '--bar', 'b']
const options = {
foo: {
type: 'boolean',
short: 'f',
},
bar: {
type: 'string',
},
}
const { values, positionals } = parseArgs({ args, options })
console.log(values, positionals)
// يطبع: [Object: null prototype] { foo: true, bar: 'b' } []
const { parseArgs } = require('node:util')
const args = ['-f', '--bar', 'b']
const options = {
foo: {
type: 'boolean',
short: 'f',
},
bar: {
type: 'string',
},
}
const { values, positionals } = parseArgs({ args, options })
console.log(values, positionals)
// يطبع: [Object: null prototype] { foo: true, bar: 'b' } []
parseArgs
tokens
تتوفر معلومات تحليل مفصلة لإضافة سلوكيات مخصصة من خلال تحديد tokens: true
في التكوين. تملك الرموز المُعادة خصائص تصف:
جميع الرموز
رموز الخيارات
name
<string> الاسم الطويل للخيار.rawName
<string> كيفية استخدام الخيار فيargs
، مثل-f
لـ--foo
.value
<string> | <undefined> قيمة الخيار المحددة فيargs
. غير محددة للخيارات المنطقية.inlineValue
<boolean> | <undefined> ما إذا كانت قيمة الخيار محددة بشكل مباشر، مثل--foo=bar
.
رموز المواضع
value
<string> قيمة وسيطة الموضع فيargs
(أيargs[index]
).
رمز مُنهي الخيارات
الرموز المُعادة مُرتبة بالترتيب الذي تم العثور عليها فيه في وسيطات الإدخال. تنتج الخيارات التي تظهر أكثر من مرة في args
رمزًا لكل استخدام. تتوسع مجموعات الخيارات القصيرة مثل -xy
إلى رمز لكل خيار. لذا فإن -xxx
ينتج ثلاثة رموز.
على سبيل المثال، لإضافة دعم لخيار مُنفي مثل --no-color
(الذي يدعمه allowNegative
عندما يكون الخيار من النوع boolean
)، يمكن إعادة معالجة الرموز المُعادة لتغيير القيمة المخزنة للخيار المُنفي.
import { parseArgs } from 'node:util'
const options = {
color: { type: 'boolean' },
'no-color': { type: 'boolean' },
logfile: { type: 'string' },
'no-logfile': { type: 'boolean' },
}
const { values, tokens } = parseArgs({ options, tokens: true })
// إعادة معالجة رموز الخيارات والكتابة فوق القيم المُعادة.
tokens
.filter(token => token.kind === 'option')
.forEach(token => {
if (token.name.startsWith('no-')) {
// تخزين foo:false لـ --no-foo
const positiveName = token.name.slice(3)
values[positiveName] = false
delete values[token.name]
} else {
// إعادة حفظ القيمة حتى يفوز الأخير إذا كان كلا من --foo و --no-foo.
values[token.name] = token.value ?? true
}
})
const color = values.color
const logfile = values.logfile ?? 'default.log'
console.log({ logfile, color })
const { parseArgs } = require('node:util')
const options = {
color: { type: 'boolean' },
'no-color': { type: 'boolean' },
logfile: { type: 'string' },
'no-logfile': { type: 'boolean' },
}
const { values, tokens } = parseArgs({ options, tokens: true })
// إعادة معالجة رموز الخيارات والكتابة فوق القيم المُعادة.
tokens
.filter(token => token.kind === 'option')
.forEach(token => {
if (token.name.startsWith('no-')) {
// تخزين foo:false لـ --no-foo
const positiveName = token.name.slice(3)
values[positiveName] = false
delete values[token.name]
} else {
// إعادة حفظ القيمة حتى يفوز الأخير إذا كان كلا من --foo و --no-foo.
values[token.name] = token.value ?? true
}
})
const color = values.color
const logfile = values.logfile ?? 'default.log'
console.log({ logfile, color })
مثال على الاستخدام يُظهر الخيارات المُنفية، وعندما يتم استخدام خيار بطرق متعددة، فإن الأخير هو الذي يفوز.
$ node negate.js
{ logfile: 'default.log', color: undefined }
$ node negate.js --no-logfile --no-color
{ logfile: false, color: false }
$ node negate.js --logfile=test.log --color
{ logfile: 'test.log', color: true }
$ node negate.js --no-logfile --logfile=test.log --color --no-color
{ logfile: 'test.log', color: false }
util.parseEnv(content)
[مستقر: 1 - تجريبي]
مستقر: 1 استقرار: 1.1 - تطوير نشط
تم الإضافة في: v21.7.0، v20.12.0
content
<string>
المحتويات الخام لملف .env
.
- الإرجاع: <Object>
بافتراض ملف .env
مثالي:
const { parseEnv } = require('node:util')
parseEnv('HELLO=world\nHELLO=oh my\n')
// الإرجاع: { HELLO: 'oh my' }
import { parseEnv } from 'node:util'
parseEnv('HELLO=world\nHELLO=oh my\n')
// الإرجاع: { HELLO: 'oh my' }
util.promisify(original)
[السجل]
الإصدار | التغييرات |
---|---|
v20.8.0 | إن استدعاء promisify على دالة تُرجع Promise أمر مُحذّر. |
v8.0.0 | تم الإضافة في: v8.0.0 |
original
<Function>- الإرجاع: <Function>
تأخذ دالة تتبع أسلوب الاستدعاء الشائع للخطأ أولاً، أي أخذ استدعاء (err, value) =\> ...
كحجة أخيرة، وترجع إصدارًا يُرجع الوعود.
const util = require('node:util')
const fs = require('node:fs')
const stat = util.promisify(fs.stat)
stat('.')
.then(stats => {
// افعل شيئًا ما مع `stats`
})
.catch(error => {
// تعامل مع الخطأ.
})
أو، بشكل مكافئ باستخدام async function
s:
const util = require('node:util')
const fs = require('node:fs')
const stat = util.promisify(fs.stat)
async function callStat() {
const stats = await stat('.')
console.log(`هذا الدليل مملوك من قبل ${stats.uid}`)
}
callStat()
إذا كانت خاصية original[util.promisify.custom]
موجودة، فسيرجع promisify
قيمتها، انظر الدوال المَعَدة للوعود المُخصصة.
يفترض promisify()
أن original
هي دالة تأخذ استدعاءً كحجتها الأخيرة في جميع الحالات. إذا لم تكن original
دالة، فسيرمي promisify()
خطأ. إذا كانت original
دالة لكن حجتها الأخيرة ليست استدعاءً للخطأ أولاً، فسيظل يتم تمرير استدعاء خطأ أولاً كحجته الأخيرة.
قد لا يعمل استخدام promisify()
على طرق الفئة أو الطرق الأخرى التي تستخدم this
كما هو متوقع ما لم يتم التعامل معها بشكل خاص:
const util = require('node:util')
class Foo {
constructor() {
this.a = 42
}
bar(callback) {
callback(null, this.a)
}
}
const foo = new Foo()
const naiveBar = util.promisify(foo.bar)
// TypeError: لا يمكن قراءة خاصية 'a' من undefined
// naiveBar().then(a => console.log(a));
naiveBar.call(foo).then(a => console.log(a)) // '42'
const bindBar = naiveBar.bind(foo)
bindBar().then(a => console.log(a)) // '42'
الدوال المخصصة المُعدّة للوعد
باستخدام رمز util.promisify.custom
، يمكن للمرء تجاوز قيمة الإرجاع لـ util.promisify()
:
const util = require('node:util')
function doSomething(foo, callback) {
// ...
}
doSomething[util.promisify.custom] = foo => {
return getPromiseSomehow()
}
const promisified = util.promisify(doSomething)
console.log(promisified === doSomething[util.promisify.custom])
// يطبع 'true'
يمكن أن يكون هذا مفيدًا في الحالات التي لا تتبع فيها الوظيفة الأصلية التنسيق القياسي لأخذ مُستدعي أولوية الخطأ كحجة أخيرة.
على سبيل المثال، مع دالة تأخذ (foo, onSuccessCallback, onErrorCallback)
:
doSomething[util.promisify.custom] = foo => {
return new Promise((resolve, reject) => {
doSomething(foo, resolve, reject)
})
}
إذا تم تعريف promisify.custom
ولكنه ليس دالة، فسيرمي promisify()
خطأ.
util.promisify.custom
[السجل]
الإصدار | التغييرات |
---|---|
v13.12.0, v12.16.2 | أصبح مُعرّفًا الآن كرمز مُشترك. |
v8.0.0 | تمت الإضافة في: v8.0.0 |
- <رمز> يمكن استخدامه للإعلان عن متغيرات مُعدّة للوعد مخصصة للوظائف، انظر الدوال المخصصة المُعدّة للوعد.
بالإضافة إلى إمكانية الوصول إليها من خلال util.promisify.custom
، يتم تسجيل هذا الرمز عالميًا ويمكن الوصول إليه في أي بيئة كـ Symbol.for('nodejs.util.promisify.custom')
.
على سبيل المثال، مع دالة تأخذ (foo, onSuccessCallback, onErrorCallback)
:
const kCustomPromisifiedSymbol = Symbol.for('nodejs.util.promisify.custom')
doSomething[kCustomPromisifiedSymbol] = foo => {
return new Promise((resolve, reject) => {
doSomething(foo, resolve, reject)
})
}
util.stripVTControlCharacters(str)
مضاف في: v16.11.0
يرجع str
مع إزالة أي أكواد هروب ANSI.
console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m'))
// يطبع "value"
util.styleText(format, text[, options])
[السجل]
الإصدار | التغييرات |
---|---|
v23.5.0 | أصبح styleText الآن مستقرًا. |
v22.8.0, v20.18.0 | احترام isTTY ومتغيرات البيئة مثل NO_COLORS و NODE_DISABLE_COLORS و FORCE_COLOR. |
v21.7.0, v20.12.0 | مضاف في: v21.7.0, v20.12.0 |
format
<string> | <Array> تنسيق نص أو مصفوفة من تنسيقات النصوص المُعرّفة فيutil.inspect.colors
.text
<string> النص المراد تنسيقه.options
<Object>
تقوم هذه الدالة بإرجاع نص مُنسّق مع مراعاة format
المُمرر للطباعة في محطة. وهي تدرك إمكانيات المحطة وتتصرف وفقًا للتكوين المُعيّن عبر متغيرات بيئة NO_COLORS
و NODE_DISABLE_COLORS
و FORCE_COLOR
.
import { styleText } from 'node:util'
import { stderr } from 'node:process'
const successMessage = styleText('green', 'Success!')
console.log(successMessage)
const errorMessage = styleText(
'red',
'Error! Error!',
// التحقق مما إذا كان process.stderr يحتوي على TTY
{ stream: stderr }
)
console.error(successMessage)
const { styleText } = require('node:util')
const { stderr } = require('node:process')
const successMessage = styleText('green', 'Success!')
console.log(successMessage)
const errorMessage = styleText(
'red',
'Error! Error!',
// التحقق مما إذا كان process.stderr يحتوي على TTY
{ stream: stderr }
)
console.error(successMessage)
يوفر util.inspect.colors
أيضًا تنسيقات نصية مثل italic
و underline
ويمكنك الجمع بين كليهما:
console.log(util.styleText(['underline', 'italic'], 'My italic underlined message'))
عند تمرير مصفوفة من التنسيقات، يكون ترتيب التنسيق المُطبق من اليسار إلى اليمين، لذلك قد يُلغي النمط التالي النمط السابق.
console.log(
util.styleText(['red', 'green'], 'text') // green
)
يمكن العثور على القائمة الكاملة للتنسيقات في المعدِّلات.
الصنف: util.TextDecoder
[السجل]
الإصدار | التغييرات |
---|---|
v11.0.0 | أصبح هذا الصنف متاحًا الآن على الكائن العام. |
v8.3.0 | تمت الإضافة في: v8.3.0 |
تنفيذ واجهة برمجة التطبيقات TextDecoder
لـ معيار الترميز WHATWG.
const decoder = new TextDecoder()
const u8arr = new Uint8Array([72, 101, 108, 108, 111])
console.log(decoder.decode(u8arr)) // Hello
ترميزات WHATWG المدعومة
وفقًا لـ معيار ترميز WHATWG, يتم تحديد الترميزات المدعومة بواسطة واجهة برمجة التطبيقات TextDecoder
في الجداول أدناه. لكل ترميز، قد يتم استخدام اسم مستعار واحد أو أكثر.
تدعم تكوينات إنشاء Node.js المختلفة مجموعات مختلفة من الترميزات. (انظر الدولية)
الترميزات المدعومة افتراضيًا (مع بيانات ICU الكاملة)
الترميز | أسماء مستعارة |
---|---|
'ibm866' | '866' , 'cp866' , 'csibm866' |
'iso-8859-2' | 'csisolatin2' , 'iso-ir-101' , 'iso8859-2' , 'iso88592' , 'iso_8859-2' , 'iso_8859-2:1987' , 'l2' , 'latin2' |
'iso-8859-3' | 'csisolatin3' , 'iso-ir-109' , 'iso8859-3' , 'iso88593' , 'iso_8859-3' , 'iso_8859-3:1988' , 'l3' , 'latin3' |
'iso-8859-4' | 'csisolatin4' , 'iso-ir-110' , 'iso8859-4' , 'iso88594' , 'iso_8859-4' , 'iso_8859-4:1988' , 'l4' , 'latin4' |
'iso-8859-5' | 'csisolatincyrillic' , 'cyrillic' , 'iso-ir-144' , 'iso8859-5' , 'iso88595' , 'iso_8859-5' , 'iso_8859-5:1988' |
'iso-8859-6' | 'arabic' , 'asmo-708' , 'csiso88596e' , 'csiso88596i' , 'csisolatinarabic' , 'ecma-114' , 'iso-8859-6-e' , 'iso-8859-6-i' , 'iso-ir-127' , 'iso8859-6' , 'iso88596' , 'iso_8859-6' , 'iso_8859-6:1987' |
'iso-8859-7' | 'csisolatingreek' , 'ecma-118' , 'elot_928' , 'greek' , 'greek8' , 'iso-ir-126' , 'iso8859-7' , 'iso88597' , 'iso_8859-7' , 'iso_8859-7:1987' , 'sun_eu_greek' |
'iso-8859-8' | 'csiso88598e' , 'csisolatinhebrew' , 'hebrew' , 'iso-8859-8-e' , 'iso-ir-138' , 'iso8859-8' , 'iso88598' , 'iso_8859-8' , 'iso_8859-8:1988' , 'visual' |
'iso-8859-8-i' | 'csiso88598i' , 'logical' |
'iso-8859-10' | 'csisolatin6' , 'iso-ir-157' , 'iso8859-10' , 'iso885910' , 'l6' , 'latin6' |
'iso-8859-13' | 'iso8859-13' , 'iso885913' |
'iso-8859-14' | 'iso8859-14' , 'iso885914' |
'iso-8859-15' | 'csisolatin9' , 'iso8859-15' , 'iso885915' , 'iso_8859-15' , 'l9' |
'koi8-r' | 'cskoi8r' , 'koi' , 'koi8' , 'koi8_r' |
'koi8-u' | 'koi8-ru' |
'macintosh' | 'csmacintosh' , 'mac' , 'x-mac-roman' |
'windows-874' | 'dos-874' , 'iso-8859-11' , 'iso8859-11' , 'iso885911' , 'tis-620' |
'windows-1250' | 'cp1250' , 'x-cp1250' |
'windows-1251' | 'cp1251' , 'x-cp1251' |
'windows-1252' | 'ansi_x3.4-1968' , 'ascii' , 'cp1252' , 'cp819' , 'csisolatin1' , 'ibm819' , 'iso-8859-1' , 'iso-ir-100' , 'iso8859-1' , 'iso88591' , 'iso_8859-1' , 'iso_8859-1:1987' , 'l1' , 'latin1' , 'us-ascii' , 'x-cp1252' |
'windows-1253' | 'cp1253' , 'x-cp1253' |
'windows-1254' | 'cp1254' , 'csisolatin5' , 'iso-8859-9' , 'iso-ir-148' , 'iso8859-9' , 'iso88599' , 'iso_8859-9' , 'iso_8859-9:1989' , 'l5' , 'latin5' , 'x-cp1254' |
'windows-1255' | 'cp1255' , 'x-cp1255' |
'windows-1256' | 'cp1256' , 'x-cp1256' |
'windows-1257' | 'cp1257' , 'x-cp1257' |
'windows-1258' | 'cp1258' , 'x-cp1258' |
'x-mac-cyrillic' | 'x-mac-ukrainian' |
'gbk' | 'chinese' , 'csgb2312' , 'csiso58gb231280' , 'gb2312' , 'gb_2312' , 'gb_2312-80' , 'iso-ir-58' , 'x-gbk' |
'gb18030' | |
'big5' | 'big5-hkscs' , 'cn-big5' , 'csbig5' , 'x-x-big5' |
'euc-jp' | 'cseucpkdfmtjapanese' , 'x-euc-jp' |
'iso-2022-jp' | 'csiso2022jp' |
'shift_jis' | 'csshiftjis' , 'ms932' , 'ms_kanji' , 'shift-jis' , 'sjis' , 'windows-31j' , 'x-sjis' |
'euc-kr' | 'cseuckr' , 'csksc56011987' , 'iso-ir-149' , 'korean' , 'ks_c_5601-1987' , 'ks_c_5601-1989' , 'ksc5601' , 'ksc_5601' , 'windows-949' |
ترميزات مدعومة عند بناء Node.js باستخدام خيار small-icu
الترميز | الأسماء المستعارة |
---|---|
'utf-8' | 'unicode-1-1-utf-8' ، 'utf8' |
'utf-16le' | 'utf-16' |
'utf-16be' |
ترميزات مدعومة عند تعطيل ICU
الترميز | الأسماء المستعارة |
---|---|
'utf-8' | 'unicode-1-1-utf-8' ، 'utf8' |
'utf-16le' | 'utf-16' |
لا يُدعم ترميز 'iso-8859-16'
المدرج في معيار ترميز WHATWG.
new TextDecoder([encoding[, options]])
encoding
<سلسلة> يُحدد ترميزencoding
الذي يدعمه هذا المثال منTextDecoder
. الافتراضي:'utf-8'
.options
<كائن>fatal
<قيمة منطقية>true
إذا كانت أخطاء فك التشفير خطيرة. لا يُدعم هذا الخيار عند تعطيل ICU (انظر الدولية). الافتراضي:false
.ignoreBOM
<قيمة منطقية> عندما تكونtrue
، فإنTextDecoder
سيتضمن علامة ترتيب البايت في النتيجة المُشفّرة. عندما تكونfalse
، سيتم إزالة علامة ترتيب البايت من الإخراج. يُستخدم هذا الخيار فقط عندما يكونencoding
هو'utf-8'
، أو'utf-16be'
، أو'utf-16le'
. الافتراضي:false
.
يُنشئ مثيلًا جديدًا من TextDecoder
. قد يُحدد encoding
أحد الترميزات المدعومة أو اسمًا مستعارًا.
تتوفر فئة TextDecoder
أيضًا على الكائن العام.
textDecoder.decode([input[, options]])
input
<ArrayBuffer> | <DataView> | <TypedArray> مثيلArrayBuffer
، أوDataView
، أوTypedArray
يحتوي على البيانات المشفرة.options
<كائن>stream
<قيمة منطقية>true
إذا كانت هناك أجزاء إضافية من البيانات متوقعة. الافتراضي:false
.
الإرجاع: <سلسلة>
يُشفّر input
ويرجع سلسلة. إذا كان options.stream
يساوي true
، فسيتم تخزين أي تسلسلات بايت غير كاملة تحدث في نهاية input
مؤقتًا داخليًا وإصدارها بعد المكالمة التالية لـ textDecoder.decode()
.
إذا كان textDecoder.fatal
يساوي true
، فإن أخطاء فك التشفير التي تحدث ستؤدي إلى طرح TypeError
.
textDecoder.encoding
ترميز مدعوم بواسطة مثيل TextDecoder
.
textDecoder.fatal
ستكون القيمة true
إذا أدت أخطاء فك التشفير إلى طرح TypeError
.
textDecoder.ignoreBOM
ستكون القيمة true
إذا تضمنت نتيجة فك التشفير علامة ترتيب البايت.
Class: util.TextEncoder
[History]
الإصدار | التغييرات |
---|---|
v11.0.0 | أصبحت الفئة الآن متاحة على الكائن العام. |
v8.3.0 | تمت الإضافة في: v8.3.0 |
تنفيذ لواجهة برمجة تطبيقات TextEncoder
من معيار ترميز WHATWG. تدعم جميع حالات TextEncoder
ترميز UTF-8 فقط.
const encoder = new TextEncoder()
const uint8array = encoder.encode('this is some data')
تتوفر فئة TextEncoder
أيضًا على الكائن العام.
textEncoder.encode([input])
input
<string> النص الذي سيتم ترميزه. الافتراضي: سلسلة فارغة.- الإرجاع: <Uint8Array>
يقوم بترميز سلسلة input
باستخدام UTF-8، ويرجع Uint8Array
يحتوي على البايتات المشفرة.
textEncoder.encodeInto(src, dest)
تمت الإضافة في: v12.11.0
src
<string> النص الذي سيتم ترميزه.dest
<Uint8Array> المصفوفة التي ستحتوي على نتيجة الترميز.- الإرجاع: <Object>
يقوم بترميز سلسلة src
إلى dest
Uint8Array باستخدام UTF-8، ويرجع كائنًا يحتوي على وحدات كود Unicode المقروءة وبايتات UTF-8 المكتوبة.
const encoder = new TextEncoder()
const src = 'this is some data'
const dest = new Uint8Array(10)
const { read, written } = encoder.encodeInto(src, dest)
textEncoder.encoding
ترميز مُدعم بواسطة مثيل TextEncoder
. مُعيّن دائمًا إلى 'utf-8'
.
util.toUSVString(string)
مُضاف في: v16.8.0، v14.18.0
string
<string>
يُعيد السلسلة بعد استبدال أي نقاط رمزية بديلة (أو ما يعادلها، أي وحدات رمزية بديلة غير مُزوجة) بـ "رمز الاستبدال" العالمي U+FFFD.
util.transferableAbortController()
مُضاف في: v18.11.0
يُنشئ ويُعيد مثيل <AbortController> الذي تم وضع علامة قابلة للنقل على <AbortSignal> الخاصة به، ويمكن استخدامه مع structuredClone()
أو postMessage()
.
util.transferableAbortSignal(signal)
مُضاف في: v18.11.0
signal
<AbortSignal>- المُرجّع: <AbortSignal>
يُحدد <AbortSignal> المُعطى على أنه قابل للنقل بحيث يمكن استخدامه مع structuredClone()
و postMessage()
.
const signal = transferableAbortSignal(AbortSignal.timeout(100))
const channel = new MessageChannel()
channel.port2.postMessage(signal, [signal])
util.aborted(signal, resource)
مُضاف في: v19.7.0، v18.16.0
signal
<AbortSignal>resource
<Object> أي كائن غير فارغ مرتبط بالعملية القابلة للإلغاء والمحفوظة بشكل ضعيف. إذا تم جمع نفاياتresource
قبل إلغاءsignal
، فإن الوعد يبقى مُعلقًا، مما يسمح لـ Node.js بالتوقف عن تعقبه. هذا يساعد في منع تسرب الذاكرة في العمليات الطويلة أو غير القابلة للإلغاء.- المُرجّع: <Promise>
يستمع إلى حدث الإلغاء على signal
المُقدّم ويُعيد وعدًا يتم حله عندما يتم إلغاء signal
. إذا تم تقديم resource
، فإنه يشير بشكل ضعيف إلى الكائن المرتبط بعملية، لذلك إذا تم جمع نفايات resource
قبل إلغاء signal
، فإن الوعد المُرجّع سيبقى مُعلقًا. هذا يمنع تسرب الذاكرة في العمليات الطويلة أو غير القابلة للإلغاء.
const { aborted } = require('node:util')
// الحصول على كائن به إشارة قابلة للإلغاء، مثل مورد أو عملية مخصصة.
const dependent = obtainSomethingAbortable()
// تمرير `dependent` كمورد، مما يشير إلى أن الوعد يجب أن يتم حله فقط
// إذا كان `dependent` لا يزال في الذاكرة عند إلغاء الإشارة.
aborted(dependent.signal, dependent).then(() => {
// يتم تشغيل هذا الكود عندما يتم إلغاء `dependent`.
console.log('تم إلغاء المورد التابع.')
})
// محاكاة حدث يُؤدي إلى إلغاء العملية.
dependent.on('event', () => {
dependent.abort() // هذا سيؤدي إلى حل وعد `aborted`.
})
import { aborted } from 'node:util'
// الحصول على كائن به إشارة قابلة للإلغاء، مثل مورد أو عملية مخصصة.
const dependent = obtainSomethingAbortable()
// تمرير `dependent` كمورد، مما يشير إلى أن الوعد يجب أن يتم حله فقط
// إذا كان `dependent` لا يزال في الذاكرة عند إلغاء الإشارة.
aborted(dependent.signal, dependent).then(() => {
// يتم تشغيل هذا الكود عندما يتم إلغاء `dependent`.
console.log('تم إلغاء المورد التابع.')
})
// محاكاة حدث يُؤدي إلى إلغاء العملية.
dependent.on('event', () => {
dependent.abort() // هذا سيؤدي إلى حل وعد `aborted`.
})
util.types
[السجل]
الإصدار | التغييرات |
---|---|
v15.3.0 | تم الكشف عنها كـ require('util/types') . |
v10.0.0 | تمت الإضافة في: v10.0.0 |
يوفر util.types
عمليات تحقق من النوع لأنواع مختلفة من الكائنات المدمجة. على عكس instanceof
أو Object.prototype.toString.call(value)
, لا تفحص عمليات التحقق هذه خصائص الكائن التي يمكن الوصول إليها من JavaScript (مثل النموذج الأولي الخاص بها)، وعادة ما يكون لها عبء إضافي يتمثل في الاتصال بـ C++.
النتيجة بشكل عام لا تقدم أي ضمانات حول أنواع الخصائص أو السلوك الذي يعرضه قيمة في JavaScript. إنها مفيدة بشكل أساسي لمطوري الوظائف الإضافية الذين يفضلون إجراء فحص الأنواع في JavaScript.
يمكن الوصول إلى واجهة برمجة التطبيقات عبر require('node:util').types
أو require('node:util/types')
.
util.types.isAnyArrayBuffer(value)
تمت الإضافة في: v10.0.0
يرجع true
إذا كانت القيمة عبارة عن مثيل مُدمج من ArrayBuffer
أو SharedArrayBuffer
.
راجع أيضًا util.types.isArrayBuffer()
و util.types.isSharedArrayBuffer()
.
util.types.isAnyArrayBuffer(new ArrayBuffer()) // ترجع true
util.types.isAnyArrayBuffer(new SharedArrayBuffer()) // ترجع true
util.types.isArrayBufferView(value)
تمت الإضافة في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا لأحد عروض ArrayBuffer
، مثل كائنات المصفوفة المكتوبة أو DataView
. ما يعادل ArrayBuffer.isView()
.
util.types.isArrayBufferView(new Int8Array()) // true
util.types.isArrayBufferView(Buffer.from('hello world')) // true
util.types.isArrayBufferView(new DataView(new ArrayBuffer(16))) // true
util.types.isArrayBufferView(new ArrayBuffer()) // false
util.types.isArgumentsObject(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة هي كائن arguments
.
function foo() {
util.types.isArgumentsObject(arguments) // ترجع true
}
util.types.isArrayBuffer(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ ArrayBuffer
. هذا لا يشمل مثيلات SharedArrayBuffer
. عادةً، يكون من المرغوب فيه اختبار كليهما؛ راجع util.types.isAnyArrayBuffer()
لذلك.
util.types.isArrayBuffer(new ArrayBuffer()) // ترجع true
util.types.isArrayBuffer(new SharedArrayBuffer()) // ترجع false
util.types.isAsyncFunction(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة دالة غير متزامنة. هذا فقط يُبلغ بما تراه آلة جافا سكريبت؛ على وجه الخصوص، قد لا تتطابق قيمة الإرجاع مع التعليمات البرمجية المصدر الأصلية إذا تم استخدام أداة تحويل.
util.types.isAsyncFunction(function foo() {}) // ترجع false
util.types.isAsyncFunction(async function foo() {}) // ترجع true
util.types.isBigInt64Array(value)
مضاف في: v10.0.0
يُرجع true
إذا كانت القيمة مثيلًا لـ BigInt64Array
.
util.types.isBigInt64Array(new BigInt64Array()) // يُرجع true
util.types.isBigInt64Array(new BigUint64Array()) // يُرجع false
util.types.isBigIntObject(value)
مضاف في: v10.4.0
يُرجع true
إذا كانت القيمة كائن BigInt، مثل الذي تم إنشاؤه بواسطة Object(BigInt(123))
.
util.types.isBigIntObject(Object(BigInt(123))) // يُرجع true
util.types.isBigIntObject(BigInt(123)) // يُرجع false
util.types.isBigIntObject(123) // يُرجع false
util.types.isBigUint64Array(value)
مضاف في: v10.0.0
يُرجع true
إذا كانت القيمة مثيلًا لـ BigUint64Array
.
util.types.isBigUint64Array(new BigInt64Array()) // يُرجع false
util.types.isBigUint64Array(new BigUint64Array()) // يُرجع true
util.types.isBooleanObject(value)
مضاف في: v10.0.0
يُرجع true
إذا كانت القيمة كائنًا منطقيًا، مثل الذي تم إنشاؤه بواسطة new Boolean()
.
util.types.isBooleanObject(false) // يُرجع false
util.types.isBooleanObject(true) // يُرجع false
util.types.isBooleanObject(new Boolean(false)) // يُرجع true
util.types.isBooleanObject(new Boolean(true)) // يُرجع true
util.types.isBooleanObject(Boolean(false)) // يُرجع false
util.types.isBooleanObject(Boolean(true)) // يُرجع false
util.types.isBoxedPrimitive(value)
مضاف في: v10.11.0
يرجع true
إذا كانت القيمة أي كائن بدائي مُغلف، مثل الذي تم إنشاؤه بواسطة new Boolean()
، أو new String()
أو Object(Symbol())
.
مثال:
util.types.isBoxedPrimitive(false) // يَرجع false
util.types.isBoxedPrimitive(new Boolean(false)) // يَرجع true
util.types.isBoxedPrimitive(Symbol('foo')) // يَرجع false
util.types.isBoxedPrimitive(Object(Symbol('foo'))) // يَرجع true
util.types.isBoxedPrimitive(Object(BigInt(5))) // يَرجع true
util.types.isCryptoKey(value)
مضاف في: v16.2.0
يرجع true
إذا كان value
هو <CryptoKey>، false
خلاف ذلك.
util.types.isDataView(value)
مضاف في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ DataView
.
const ab = new ArrayBuffer(20)
util.types.isDataView(new DataView(ab)) // يَرجع true
util.types.isDataView(new Float64Array()) // يَرجع false
انظر أيضًا ArrayBuffer.isView()
.
util.types.isDate(value)
مضاف في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ Date
.
util.types.isDate(new Date()) // يَرجع true
util.types.isExternal(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة قيمة External
أصلية.
قيمة External
الأصلية هي نوع خاص من الكائنات يحتوي على مؤشر C++ خام (void*
) للوصول منه من التعليمات البرمجية الأصلية، وليس له خصائص أخرى. يتم إنشاء هذه الكائنات إما بواسطة Node.js الداخلية أو الإضافات الأصلية. في JavaScript، هي كائنات مجمدة بنموذج أولي null
.
#include <js_native_api.h>
#include <stdlib.h>
napi_value result;
static napi_value MyNapi(napi_env env, napi_callback_info info) {
int* raw = (int*) malloc(1024);
napi_status status = napi_create_external(env, (void*) raw, NULL, NULL, &result);
if (status != napi_ok) {
napi_throw_error(env, NULL, "napi_create_external failed");
return NULL;
}
return result;
}
...
DECLARE_NAPI_PROPERTY("myNapi", MyNapi)
...
const native = require('napi_addon.node')
const data = native.myNapi()
util.types.isExternal(data) // ترجع true
util.types.isExternal(0) // ترجع false
util.types.isExternal(new String('foo')) // ترجع false
لمزيد من المعلومات حول napi_create_external
، راجع napi_create_external()
.
util.types.isFloat32Array(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مدمجًا لـ Float32Array
.
util.types.isFloat32Array(new ArrayBuffer()) // ترجع false
util.types.isFloat32Array(new Float32Array()) // ترجع true
util.types.isFloat32Array(new Float64Array()) // ترجع false
util.types.isFloat64Array(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ Float64Array
.
util.types.isFloat64Array(new ArrayBuffer()) // ترجع false
util.types.isFloat64Array(new Uint8Array()) // ترجع false
util.types.isFloat64Array(new Float64Array()) // ترجع true
util.types.isGeneratorFunction(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة دالة مُولدة. يُبلغ هذا فقط عما يراه محرك جافا سكريبت؛ على وجه الخصوص، قد لا تتطابق قيمة الإرجاع مع التعليمات البرمجية المصدر الأصلية إذا تم استخدام أداة تحويل.
util.types.isGeneratorFunction(function foo() {}) // ترجع false
util.types.isGeneratorFunction(function* foo() {}) // ترجع true
util.types.isGeneratorObject(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة كائنًا مُولِّدًا كما هو مُرجَع من دالة مُولِّدة مُدمجة. يُبلغ هذا فقط عما يراه محرك جافا سكريبت؛ على وجه الخصوص، قد لا تتطابق قيمة الإرجاع مع التعليمات البرمجية المصدر الأصلية إذا تم استخدام أداة تحويل.
function* foo() {}
const generator = foo()
util.types.isGeneratorObject(generator) // ترجع true
util.types.isInt8Array(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ Int8Array
.
util.types.isInt8Array(new ArrayBuffer()) // ترجع false
util.types.isInt8Array(new Int8Array()) // ترجع true
util.types.isInt8Array(new Float64Array()) // ترجع false
util.types.isInt16Array(value)
تم الإضافة في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا مدمجًا لـ Int16Array
.
util.types.isInt16Array(new ArrayBuffer()) // ترجع false
util.types.isInt16Array(new Int16Array()) // ترجع true
util.types.isInt16Array(new Float64Array()) // ترجع false
util.types.isInt32Array(value)
تم الإضافة في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا مدمجًا لـ Int32Array
.
util.types.isInt32Array(new ArrayBuffer()) // ترجع false
util.types.isInt32Array(new Int32Array()) // ترجع true
util.types.isInt32Array(new Float64Array()) // ترجع false
util.types.isKeyObject(value)
تم الإضافة في: v16.2.0
يرجع true
إذا كانت value
<KeyObject> ، false
خلاف ذلك.
util.types.isMap(value)
تم الإضافة في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا مدمجًا لـ Map
.
util.types.isMap(new Map()) // ترجع true
util.types.isMapIterator(value)
مضاف في: v10.0.0
يرجع true
إذا كانت القيمة عبارة عن مُكرر مُرجع لمثال مُدمج من النوع Map
.
const map = new Map()
util.types.isMapIterator(map.keys()) // يرجع true
util.types.isMapIterator(map.values()) // يرجع true
util.types.isMapIterator(map.entries()) // يرجع true
util.types.isMapIterator(map[Symbol.iterator]()) // يرجع true
util.types.isModuleNamespaceObject(value)
مضاف في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا لـ كائن مساحة اسم الوحدة النمطية.
import * as ns from './a.js'
util.types.isModuleNamespaceObject(ns) // يرجع true
util.types.isNativeError(value)
مضاف في: v10.0.0
يرجع true
إذا كانت القيمة مُرجعَة بواسطة مُنشئ نوع Error
مُدمج.
console.log(util.types.isNativeError(new Error())) // true
console.log(util.types.isNativeError(new TypeError())) // true
console.log(util.types.isNativeError(new RangeError())) // true
الأنواع الفرعية لأنواع الخطأ الأصلية هي أيضًا أخطاء أصلية:
class MyError extends Error {}
console.log(util.types.isNativeError(new MyError())) // true
إن كون قيمة ما instanceof
فئة خطأ أصلية لا يُعادل isNativeError()
الذي يُرجع true
لتلك القيمة. isNativeError()
يُرجع true
للأخطاء القادمة من مجال مختلف بينما instanceof Error
يُرجع false
لهذه الأخطاء:
const vm = require('node:vm')
const context = vm.createContext({})
const myError = vm.runInContext('new Error()', context)
console.log(util.types.isNativeError(myError)) // true
console.log(myError instanceof Error) // false
على العكس، isNativeError()
يُرجع false
لجميع الكائنات التي لم تُرجع بواسطة مُنشئ خطأ أصلي. وهذا يشمل القيم التي هي instanceof
أخطاء أصلية:
const myError = { __proto__: Error.prototype }
console.log(util.types.isNativeError(myError)) // false
console.log(myError instanceof Error) // true
util.types.isNumberObject(value)
أضيف في: v10.0.0
يُرجع true
إذا كانت القيمة عبارة عن كائن عدد، مثل الذي تم إنشاؤه بواسطة new Number()
.
util.types.isNumberObject(0) // يُرجع false
util.types.isNumberObject(new Number(0)) // يُرجع true
util.types.isPromise(value)
أضيف في: v10.0.0
يُرجع true
إذا كانت القيمة عبارة عن وعد مُدمج Promise
.
util.types.isPromise(Promise.resolve(42)) // يُرجع true
util.types.isProxy(value)
أضيف في: v10.0.0
يُرجع true
إذا كانت القيمة عبارة عن مثيل لـ Proxy
.
const target = {}
const proxy = new Proxy(target, {})
util.types.isProxy(target) // يُرجع false
util.types.isProxy(proxy) // يُرجع true
util.types.isRegExp(value)
أضيف في: v10.0.0
يُرجع true
إذا كانت القيمة عبارة عن كائن تعبير عادي.
util.types.isRegExp(/abc/) // يُرجع true
util.types.isRegExp(new RegExp('abc')) // يُرجع true
util.types.isSet(value)
مضاف في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ Set
.
util.types.isSet(new Set()) // ترجع true
util.types.isSetIterator(value)
مضاف في: v10.0.0
يرجع true
إذا كانت القيمة مُكررًا مُرجعًا لمثيل مُدمج من Set
.
const set = new Set()
util.types.isSetIterator(set.keys()) // ترجع true
util.types.isSetIterator(set.values()) // ترجع true
util.types.isSetIterator(set.entries()) // ترجع true
util.types.isSetIterator(set[Symbol.iterator]()) // ترجع true
util.types.isSharedArrayBuffer(value)
مضاف في: v10.0.0
يرجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ SharedArrayBuffer
. هذا لا يشمل أمثلة ArrayBuffer
. عادةً، يكون من المرغوب فيه اختبار كليهما؛ راجع util.types.isAnyArrayBuffer()
لذلك.
util.types.isSharedArrayBuffer(new ArrayBuffer()) // ترجع false
util.types.isSharedArrayBuffer(new SharedArrayBuffer()) // ترجع true
util.types.isStringObject(value)
مضاف في: v10.0.0
ترجع true
إذا كانت القيمة كائن سلسلة، مثل الذي تم إنشاؤه بواسطة new String()
.
util.types.isStringObject('foo') // ترجع false
util.types.isStringObject(new String('foo')) // ترجع true
util.types.isSymbolObject(value)
مضاف في: v10.0.0
ترجع true
إذا كانت القيمة كائن رمز، تم إنشاؤه باستدعاء Object()
على قيمة رمز بدائية.
const symbol = Symbol('foo')
util.types.isSymbolObject(symbol) // ترجع false
util.types.isSymbolObject(Object(symbol)) // ترجع true
util.types.isTypedArray(value)
مضاف في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مضمنًا لـ TypedArray
.
util.types.isTypedArray(new ArrayBuffer()) // ترجع false
util.types.isTypedArray(new Uint8Array()) // ترجع true
util.types.isTypedArray(new Float64Array()) // ترجع true
انظر أيضًا ArrayBuffer.isView()
.
util.types.isUint8Array(value)
مضاف في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مضمنًا لـ Uint8Array
.
util.types.isUint8Array(new ArrayBuffer()) // ترجع false
util.types.isUint8Array(new Uint8Array()) // ترجع true
util.types.isUint8Array(new Float64Array()) // ترجع false
util.types.isUint8ClampedArray(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ Uint8ClampedArray
.
util.types.isUint8ClampedArray(new ArrayBuffer()) // ترجع false
util.types.isUint8ClampedArray(new Uint8ClampedArray()) // ترجع true
util.types.isUint8ClampedArray(new Float64Array()) // ترجع false
util.types.isUint16Array(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ Uint16Array
.
util.types.isUint16Array(new ArrayBuffer()) // ترجع false
util.types.isUint16Array(new Uint16Array()) // ترجع true
util.types.isUint16Array(new Float64Array()) // ترجع false
util.types.isUint32Array(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ Uint32Array
.
util.types.isUint32Array(new ArrayBuffer()) // ترجع false
util.types.isUint32Array(new Uint32Array()) // ترجع true
util.types.isUint32Array(new Float64Array()) // ترجع false
util.types.isWeakMap(value)
تم الإضافة في: v10.0.0
ترجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ WeakMap
.
util.types.isWeakMap(new WeakMap()) // ترجع true
util.types.isWeakSet(value)
مُضاف في: v10.0.0
يُرجع true
إذا كانت القيمة مثيلًا مُدمجًا لـ WeakSet
.
util.types.isWeakSet(new WeakSet()) // يُرجع true
واجهات برمجة التطبيقات المُهملة
واجهات برمجة التطبيقات التالية مُهملة ويجب عدم استخدامها بعد الآن. يجب تحديث التطبيقات والوحدات النمطية الموجودة للعثور على طرق بديلة.
util._extend(target, source)
مُضاف في: v0.7.5
مُهمل منذ: v6.0.0
[مستقر: 0 - مُهمل]
مستقر: 0 استقرار: 0 - مُهمل: استخدم Object.assign()
بدلاً من ذلك.
لم تكن طريقة util._extend()
مُخصصة للاستخدام خارج وحدات Node.js الداخلية. وجد المجتمع واستخدمها على أي حال.
لقد أصبحت مُهملة ويجب عدم استخدامها في التعليمات البرمجية الجديدة. تأتي JavaScript مع وظائف مُدمجة مُشابهة جدًا من خلال Object.assign()
.
util.isArray(object)
مُضاف في: v0.6.0
مُهمل منذ: v4.0.0
[مستقر: 0 - مُهمل]
مستقر: 0 استقرار: 0 - مُهمل: استخدم Array.isArray()
بدلاً من ذلك.
مُرادف لـ Array.isArray()
.
يُرجع true
إذا كان object
المُعطى عبارة عن Array
. خلاف ذلك، يُرجع false
.
const util = require('node:util')
util.isArray([])
// قيمة مُرجعه: true
util.isArray(new Array())
// قيمة مُرجعه: true
util.isArray({})
// قيمة مُرجعه: false