Skip to content

الأدوات المساعدة

[مستقر: 2 - مستقر]

مستقر: 2 استقرار: 2 - مستقر

رمز المصدر: lib/util.js

يدعم مُعامل node:util احتياجات واجهات برمجة التطبيقات الداخلية لـ Node.js. وكثير من الأدوات مفيدة أيضاً لمطوري التطبيقات والوحدات. للوصول إليه:

js
const util = require('node:util')

util.callbackify(original)

مضاف في: v8.2.0

  • original <Function> دالة async
  • المُرجَع: <Function> دالة بأسلوب المُعالِج المُستدعى

تأخذ دالة async (أو دالة تُرجع وعدًا) وتُرجع دالة تتبع أسلوب المُعالِج المُستدعى الأولي للخطأ، أي أن تأخذ مُعالِجًا من نمط (err, value) =\> ... كآخر وسيطة. في المُعالِج، ستكون الوسيطة الأولى سبب الرفض (أو null إذا تم حل الوعد)، وستكون الوسيطة الثانية القيمة المحلّلة.

js
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)
})

سيتم طباعة:

text
hello world

يتم تنفيذ المُعالِج المُستدعى بشكل غير متزامن، وسيكون له تتبع مُكدس محدود. إذا قام المُعالِج المُستدعى بإلقاء استثناء، فسوف يُصدر المُعالِج حدثًا 'uncaughtException'، وإذا لم يتم التعامل معه، فسوف ينتهي.

بما أن null لها معنى خاص كأول وسيطة لمُعالِج مُستدعى، إذا رفضت دالة مُغلّفة وعدًا بقيمة خاطئة كسبب، فسيتم تغليف القيمة في خطأ مع تخزين القيمة الأصلية في حقل اسمه reason.

js
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(). وإلا، فإن الدالة المُرجعة هي عملية لا شيء.

js
const util = require('node:util')
const debuglog = util.debuglog('foo')

debuglog('hello from foo [%d]', 123)

إذا تم تشغيل هذا البرنامج باستخدام NODE_DEBUG=foo في البيئة، فسوف يُخرج شيئًا مثل:

bash
FOO 3245: hello from foo [123]

حيث أن 3245 هو معرف العملية. إذا لم يتم تشغيله مع تعيين متغير البيئة هذا، فلن يُطبع أي شيء.

يدعم section أيضًا البرية كارد:

js
const util = require('node:util')
const debuglog = util.debuglog('foo-bar')

debuglog("hi there, it's foo-bar [%d]", 2333)

إذا تم تشغيله باستخدام NODE_DEBUG=foo* في البيئة، فسوف يُخرج شيئًا مثل:

bash
FOO-BAR 3257: hi there, it's foo-bar [2333]

يمكن تحديد أسماء section متعددة مفصولة بفاصلات في متغير البيئة NODE_DEBUG: NODE_DEBUG=fs,net,tls.

يمكن استخدام وسيطة callback الاختيارية لاستبدال دالة التسجيل بدالة مختلفة لا تحتوي على أي تهيئة أو تغليف غير ضروري.

js
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.

js
const util = require('node:util')
const enabled = util.debuglog('foo').enabled
if (enabled) {
  console.log('hello from foo [%d]', 123)
}

إذا تم تشغيل هذا البرنامج مع NODE_DEBUG=foo في البيئة، فسوف يُخرج شيئًا كهذا:

bash
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

تقوم طريقة util.deprecate() بتغليف fn (والتي قد تكون دالة أو فئة) بطريقة يتم فيها تمييزها على أنها مهملة.

js
const util = require('node:util')

exports.obsoleteFunction = util.deprecate(() => {
  // قم بشيء ما هنا.
}, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.')

عند استدعائها، ستعيد util.deprecate() دالة ستُصدر DeprecationWarning باستخدام حدث 'warning'. سيتم إصدار التحذير وطباعته إلى stderr في المرة الأولى التي يتم فيها استدعاء الدالة المُرجعة. بعد إصدار التحذير، يتم استدعاء الدالة المُغلّفة بدون إصدار تحذير.

إذا تم توفير نفس code الاختياري في مكالمات متعددة إلى util.deprecate()، فسيتم إصدار التحذير مرة واحدة فقط لهذا code.

js
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

ترجع طريقة 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 مُمرر.
  • %%: علامة النسبة المئوية المفردة ('%'). هذا لا يستهلك وسيطًا.
  • الإرجاع: <سلسلة> السلسلة المُنسّقة

إذا لم يكن لدى مُحدد وسيط مُقابل، فلن يتم استبداله:

js
util.format('%s:%s', 'foo')
// الإرجاع: 'foo:%s'

يتم تنسيق القيم التي ليست جزءًا من سلسلة التنسيق باستخدام util.inspect() إذا لم يكن نوعها string.

إذا كانت هناك وسيطات إضافية مُمرّرة إلى طريقة util.format() أكثر من عدد المُحددات، فسيتم دمج الوسيطات الإضافية في السلسلة المُرجعة، مفصولة بمسافات:

js
util.format('%s:%s', 'foo', 'bar', 'baz')
// الإرجاع: 'foo:bar baz'

إذا لم يحتوِ الوسيط الأول على مُحدد تنسيق صالح، فإن util.format() تُرجع سلسلة هي دمج جميع الوسيطات مفصولة بمسافات:

js
util.format(1, 2, 3)
// الإرجاع: '1 2 3'

إذا تم تمرير وسيط واحد فقط إلى util.format()، فسيتم إرجاعه كما هو بدون أي تنسيق:

js
util.format('%% %s')
// الإرجاع: '%% %s'

util.format() هي طريقة متزامنة مُصممة كأداة تصحيح أخطاء. قد يكون لبعض قيم الإدخال عبء أداء كبير يمكن أن يحجب حلقة الأحداث. استخدم هذه الدالة بحذر ولا تستخدمها أبدًا في مسار شفرة ساخن.

util.formatWithOptions(inspectOptions, format[, ...args])

مضاف في: v10.0.0

هذه الدالة مطابقة لـ util.format()، إلا أنها تأخذ وسيطة inspectOptions والتي تحدد الخيارات التي يتم تمريرها إلى util.inspect().

js
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 على السطر لاستدعاء الدالة المرتبطة.

ترجع مصفوفة من أجسام مواقع الاستدعاء التي تحتوي على مكدس دالة المتصل.

js
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 صحيحًا افتراضيًا.

ts
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. يعتمد التعيين بين رموز الأخطاء وأسماء الأخطاء على النظام الأساسي. راجع أخطاء النظام الشائعة لأسماء الأخطاء الشائعة.

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. يعتمد التعيين بين رموز الأخطاء وأسماء الأخطاء على النظام الأساسي. راجع أخطاء النظام الشائعة لأسماء الأخطاء الشائعة.

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. يعتمد التعيين بين رموز الأخطاء والرسائل النصية على النظام الأساسي.

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 بدلاً من ذلك.

يُنصح بتجنب استخدام util.inherits(). يرجى استخدام كلمات المفتاح ES6 class و extends للحصول على دعم وراثة مستوى اللغة. لاحظ أيضًا أن الأسلوبين غير متوافقين دلاليًا.

ورث طرق النموذج الأولي من مُنشئ constructor إلى آخر. سيتم تعيين النموذج الأولي لـ constructor إلى كائن جديد تم إنشاؤه من superConstructor.

يضيف هذا بشكل أساسي بعض التحقق من الإدخال فوق Object.setPrototypeOf(constructor.prototype, superConstructor.prototype). كراحة إضافية، سيكون superConstructor في متناول اليد من خلال خاصية constructor.super_.

js
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:

js
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 لإنشاء علامة قابلة للتعريف لقيمة مُفحصة.

js
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] {}'

تشير المرجعيات الدائرية إلى مرساها باستخدام فهرس مرجعي:

js
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:

js
const util = require('node:util')

console.log(util.inspect(util, { showHidden: true, depth: null }))

يُوضح المثال التالي تأثير خيار compact:

js
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 مرتين قد ينتج عنه إخراج مختلف. علاوة على ذلك، قد يتم جمع القمامة للإدخالات التي لا تحتوي على مراجع قوية متبقية في أي وقت.

js
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().

js
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 شرطة سفلية لكل ثلاثة أرقام لجميع الأرقام.

js
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() باستدعائها واستخدام نتيجتها عند فحص الكائن.

js
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().

js
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() نفسها كوسيطة ثالثة لدالة الفحص المخصصة للسماح بمزيد من قابلية النقل.

js
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(). كما يدعم تعيين خصائص الخيار مباشرة.

js
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

[مستقر: 1 - تجريبي]

مستقر: 1 الثبات: 1 - تجريبي

تنفيذ لـ صف MIMEType.

وفقًا لاتفاقيات المتصفح، يتم تنفيذ جميع خصائص كائنات MIMEType كـ getters و setters على النموذج الأولي للصف، بدلاً من خصائص البيانات على الكائن نفسه.

سلسلة MIME هي سلسلة مُهيكلة تحتوي على مكونات ذات معنى متعددة. عند تحليلها، يتم إرجاع كائن MIMEType يحتوي على خصائص لكل من هذه المكونات.

مُنشئ: new MIMEType(input)

  • input <string> مدخل MIME المراد تحليله

يُنشئ كائن MIMEType جديدًا عن طريق تحليل input.

js
import { MIMEType } from 'node:util'

const myMIME = new MIMEType('text/plain')
js
const { MIMEType } = require('node:util')

const myMIME = new MIMEType('text/plain')

سيتم طرح TypeError إذا لم يكن input MIME صالحًا. لاحظ أنه سيتم بذل جهد لتحويل القيم المعطاة إلى سلاسل. على سبيل المثال:

js
import { MIMEType } from 'node:util'
const myMIME = new MIMEType({ toString: () => 'text/plain' })
console.log(String(myMIME))
// يُطبع: text/plain
js
const { MIMEType } = require('node:util')
const myMIME = new MIMEType({ toString: () => 'text/plain' })
console.log(String(myMIME))
// يُطبع: text/plain

mime.type

يحصل على جزء نوع MIME ويضبطه.

js
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
js
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 ويضبطه.

js
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
js
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.

js
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
js
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()

ترجع طريقة toString() على كائن MIMEType MIME المتسلسل.

بسبب الحاجة إلى الامتثال للمعايير، لا تسمح هذه الطريقة للمستخدمين بتخصيص عملية تسلسل MIME.

mime.toJSON()

اسم مستعار لـ mime.toString().

يتم استدعاء هذه الطريقة تلقائيًا عند تسلسل كائن MIMEType باستخدام JSON.stringify().

js
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"]
js
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 جديدًا بمعلمات فارغة.

js
import { MIMEParams } from 'node:util'

const myParams = new MIMEParams()
js
const { MIMEParams } = require('node:util')

const myParams = new MIMEParams()

mimeParams.delete(name)

يزيل جميع أزواج اسم-قيمة التي اسمها هو name.

mimeParams.entries()

يُرجع مُكررًا لكل زوج من أزواج اسم-القيمة في المعلمات. كل عنصر من عناصر المُكرر هو مصفوفة جافا سكريبت. العنصر الأول من المصفوفة هو name، والعنصر الثاني هو value.

mimeParams.get(name)

  • name <string>
  • عائد: <string> | <null> سلسلة أو null إذا لم يكن هناك زوج اسم-قيمة باسم name المُعطى.

يُرجع قيمة أول زوج اسم-قيمة اسمه name. إذا لم تكن هناك أزواج كهذه، يتم إرجاع null.

mimeParams.has(name)

يُرجع true إذا كان هناك زوج اسم-قيمة واحد على الأقل اسمه name.

mimeParams.keys()

يُرجع مُكررًا لأسماء كل زوج اسم-قيمة.

js
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
js
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.

js
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
js
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()

يعيد مُكررًا لقيم كل زوج اسم-قيمة.

mimeParams[@@iterator]()

اسم مستعار لـ mimeParams.entries().

js
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
js
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> الوسيطات المُحللة لسطر الأوامر:

يوفر واجهة برمجة تطبيقات عالية المستوى لتحليل وسيطات سطر الأوامر أكثر من التفاعل مع process.argv مباشرةً. يأخذ مواصفات الوسيطات المُتوقعة ويعيد كائنًا مُهيكلًا مع الخيارات المُحللة والموضعيات.

js
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' } []
js
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 في التكوين. تملك الرموز المُعادة خصائص تصف:

  • جميع الرموز

    • kind <string> أحد "option" أو "positional" أو "option-terminator".
    • index <number> مؤشر العنصر في args الذي يحتوي على الرمز. لذا فإن وسيطة المصدر لرمز ما هي args[token.index].
  • رموز الخيارات

    • 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)، يمكن إعادة معالجة الرموز المُعادة لتغيير القيمة المخزنة للخيار المُنفي.

js
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 })
js
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 })

مثال على الاستخدام يُظهر الخيارات المُنفية، وعندما يتم استخدام خيار بطرق متعددة، فإن الأخير هو الذي يفوز.

bash
$ 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

المحتويات الخام لملف .env.

بافتراض ملف .env مثالي:

js
const { parseEnv } = require('node:util')

parseEnv('HELLO=world\nHELLO=oh my\n')
// الإرجاع: { HELLO: 'oh my' }
js
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

تأخذ دالة تتبع أسلوب الاستدعاء الشائع للخطأ أولاً، أي أخذ استدعاء (err, value) =\> ... كحجة أخيرة، وترجع إصدارًا يُرجع الوعود.

js
const util = require('node:util')
const fs = require('node:fs')

const stat = util.promisify(fs.stat)
stat('.')
  .then(stats => {
    // افعل شيئًا ما مع `stats`
  })
  .catch(error => {
    // تعامل مع الخطأ.
  })

أو، بشكل مكافئ باستخدام async functions:

js
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 كما هو متوقع ما لم يتم التعامل معها بشكل خاص:

js
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():

js
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):

js
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):

js
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.

js
console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m'))
// يطبع "value"

util.styleText(format, text[, options])

[مستقر: 2 - مستقر]

مستقر: 2 الثبات: 2 - مستقر.

[السجل]

الإصدارالتغييرات
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>
    • validateStream <boolean> عندما تكون قيمتها true، يتم التحقق من stream لمعرفة ما إذا كان بإمكانه معالجة الألوان. افتراضيًا: true.
    • stream <Stream> تيار سيتم التحقق منه لمعرفة ما إذا كان يمكن تلوينه. افتراضيًا: process.stdout.

تقوم هذه الدالة بإرجاع نص مُنسّق مع مراعاة format المُمرر للطباعة في محطة. وهي تدرك إمكانيات المحطة وتتصرف وفقًا للتكوين المُعيّن عبر متغيرات بيئة NO_COLORS و NODE_DISABLE_COLORS و FORCE_COLOR.

js
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)
js
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 ويمكنك الجمع بين كليهما:

js
console.log(util.styleText(['underline', 'italic'], 'My italic underlined message'))

عند تمرير مصفوفة من التنسيقات، يكون ترتيب التنسيق المُطبق من اليسار إلى اليمين، لذلك قد يُلغي النمط التالي النمط السابق.

js
console.log(
  util.styleText(['red', 'green'], 'text') // green
)

يمكن العثور على القائمة الكاملة للتنسيقات في المعدِّلات.

الصنف: util.TextDecoder

[السجل]

الإصدارالتغييرات
v11.0.0أصبح هذا الصنف متاحًا الآن على الكائن العام.
v8.3.0تمت الإضافة في: v8.3.0

تنفيذ واجهة برمجة التطبيقات TextDecoder لـ معيار الترميز WHATWG.

js
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 ويرجع سلسلة. إذا كان 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 فقط.

js
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>
    • read <number> وحدات كود Unicode المقروءة من src.
    • written <number> بايتات UTF-8 المكتوبة في dest.

يقوم بترميز سلسلة src إلى dest Uint8Array باستخدام UTF-8، ويرجع كائنًا يحتوي على وحدات كود Unicode المقروءة وبايتات UTF-8 المكتوبة.

js
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

يُعيد السلسلة بعد استبدال أي نقاط رمزية بديلة (أو ما يعادلها، أي وحدات رمزية بديلة غير مُزوجة) بـ "رمز الاستبدال" العالمي U+FFFD.

util.transferableAbortController()

مُضاف في: v18.11.0

[مستقر: 1 - تجريبي]

مستقر: 1 الثبات: 1 - تجريبي

يُنشئ ويُعيد مثيل <AbortController> الذي تم وضع علامة قابلة للنقل على <AbortSignal> الخاصة به، ويمكن استخدامه مع structuredClone() أو postMessage().

util.transferableAbortSignal(signal)

مُضاف في: v18.11.0

[مستقر: 1 - تجريبي]

مستقر: 1 الثبات: 1 - تجريبي

يُحدد <AbortSignal> المُعطى على أنه قابل للنقل بحيث يمكن استخدامه مع structuredClone() و postMessage().

js
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

[مستقر: 1 - تجريبي]

مستقر: 1 الثبات: 1 - تجريبي

  • signal <AbortSignal>
  • resource <Object> أي كائن غير فارغ مرتبط بالعملية القابلة للإلغاء والمحفوظة بشكل ضعيف. إذا تم جمع نفايات resource قبل إلغاء signal، فإن الوعد يبقى مُعلقًا، مما يسمح لـ Node.js بالتوقف عن تعقبه. هذا يساعد في منع تسرب الذاكرة في العمليات الطويلة أو غير القابلة للإلغاء.
  • المُرجّع: <Promise>

يستمع إلى حدث الإلغاء على signal المُقدّم ويُعيد وعدًا يتم حله عندما يتم إلغاء signal. إذا تم تقديم resource، فإنه يشير بشكل ضعيف إلى الكائن المرتبط بعملية، لذلك إذا تم جمع نفايات resource قبل إلغاء signal، فإن الوعد المُرجّع سيبقى مُعلقًا. هذا يمنع تسرب الذاكرة في العمليات الطويلة أو غير القابلة للإلغاء.

js
const { aborted } = require('node:util')

// الحصول على كائن به إشارة قابلة للإلغاء، مثل مورد أو عملية مخصصة.
const dependent = obtainSomethingAbortable()

// تمرير `dependent` كمورد، مما يشير إلى أن الوعد يجب أن يتم حله فقط
// إذا كان `dependent` لا يزال في الذاكرة عند إلغاء الإشارة.
aborted(dependent.signal, dependent).then(() => {
  // يتم تشغيل هذا الكود عندما يتم إلغاء `dependent`.
  console.log('تم إلغاء المورد التابع.')
})

// محاكاة حدث يُؤدي إلى إلغاء العملية.
dependent.on('event', () => {
  dependent.abort() // هذا سيؤدي إلى حل وعد `aborted`.
})
js
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().

js
util.types.isAnyArrayBuffer(new ArrayBuffer()) // ترجع true
util.types.isAnyArrayBuffer(new SharedArrayBuffer()) // ترجع true

util.types.isArrayBufferView(value)

تمت الإضافة في: v10.0.0

يرجع true إذا كانت القيمة مثيلًا لأحد عروض ArrayBuffer، مثل كائنات المصفوفة المكتوبة أو DataView. ما يعادل ArrayBuffer.isView().

js
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.

js
function foo() {
  util.types.isArgumentsObject(arguments) // ترجع true
}

util.types.isArrayBuffer(value)

تم الإضافة في: v10.0.0

ترجع true إذا كانت القيمة مثيلًا مُدمجًا لـ ArrayBuffer. هذا لا يشمل مثيلات SharedArrayBuffer. عادةً، يكون من المرغوب فيه اختبار كليهما؛ راجع util.types.isAnyArrayBuffer() لذلك.

js
util.types.isArrayBuffer(new ArrayBuffer()) // ترجع true
util.types.isArrayBuffer(new SharedArrayBuffer()) // ترجع false

util.types.isAsyncFunction(value)

تم الإضافة في: v10.0.0

ترجع true إذا كانت القيمة دالة غير متزامنة. هذا فقط يُبلغ بما تراه آلة جافا سكريبت؛ على وجه الخصوص، قد لا تتطابق قيمة الإرجاع مع التعليمات البرمجية المصدر الأصلية إذا تم استخدام أداة تحويل.

js
util.types.isAsyncFunction(function foo() {}) // ترجع false
util.types.isAsyncFunction(async function foo() {}) // ترجع true

util.types.isBigInt64Array(value)

مضاف في: v10.0.0

يُرجع true إذا كانت القيمة مثيلًا لـ BigInt64Array.

js
util.types.isBigInt64Array(new BigInt64Array()) // يُرجع true
util.types.isBigInt64Array(new BigUint64Array()) // يُرجع false

util.types.isBigIntObject(value)

مضاف في: v10.4.0

يُرجع true إذا كانت القيمة كائن BigInt، مثل الذي تم إنشاؤه بواسطة Object(BigInt(123)).

js
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.

js
util.types.isBigUint64Array(new BigInt64Array()) // يُرجع false
util.types.isBigUint64Array(new BigUint64Array()) // يُرجع true

util.types.isBooleanObject(value)

مضاف في: v10.0.0

يُرجع true إذا كانت القيمة كائنًا منطقيًا، مثل الذي تم إنشاؤه بواسطة new Boolean().

js
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()).

مثال:

js
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.

js
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.

js
util.types.isDate(new Date()) // يَرجع true

util.types.isExternal(value)

تم الإضافة في: v10.0.0

ترجع true إذا كانت القيمة قيمة External أصلية.

قيمة External الأصلية هي نوع خاص من الكائنات يحتوي على مؤشر C++ خام (void*) للوصول منه من التعليمات البرمجية الأصلية، وليس له خصائص أخرى. يتم إنشاء هذه الكائنات إما بواسطة Node.js الداخلية أو الإضافات الأصلية. في JavaScript، هي كائنات مجمدة بنموذج أولي null.

C
#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)
...
js
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.

js
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.

js
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 إذا كانت القيمة دالة مُولدة. يُبلغ هذا فقط عما يراه محرك جافا سكريبت؛ على وجه الخصوص، قد لا تتطابق قيمة الإرجاع مع التعليمات البرمجية المصدر الأصلية إذا تم استخدام أداة تحويل.

js
util.types.isGeneratorFunction(function foo() {}) // ترجع false
util.types.isGeneratorFunction(function* foo() {}) // ترجع true

util.types.isGeneratorObject(value)

تم الإضافة في: v10.0.0

ترجع true إذا كانت القيمة كائنًا مُولِّدًا كما هو مُرجَع من دالة مُولِّدة مُدمجة. يُبلغ هذا فقط عما يراه محرك جافا سكريبت؛ على وجه الخصوص، قد لا تتطابق قيمة الإرجاع مع التعليمات البرمجية المصدر الأصلية إذا تم استخدام أداة تحويل.

js
function* foo() {}
const generator = foo()
util.types.isGeneratorObject(generator) // ترجع true

util.types.isInt8Array(value)

تم الإضافة في: v10.0.0

ترجع true إذا كانت القيمة مثيلًا مُدمجًا لـ Int8Array.

js
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.

js
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.

js
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.

js
util.types.isMap(new Map()) // ترجع true

util.types.isMapIterator(value)

مضاف في: v10.0.0

يرجع true إذا كانت القيمة عبارة عن مُكرر مُرجع لمثال مُدمج من النوع Map.

js
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 إذا كانت القيمة مثيلًا لـ كائن مساحة اسم الوحدة النمطية.

js
import * as ns from './a.js'

util.types.isModuleNamespaceObject(ns) // يرجع true

util.types.isNativeError(value)

مضاف في: v10.0.0

يرجع true إذا كانت القيمة مُرجعَة بواسطة مُنشئ نوع Error مُدمج.

js
console.log(util.types.isNativeError(new Error())) // true
console.log(util.types.isNativeError(new TypeError())) // true
console.log(util.types.isNativeError(new RangeError())) // true

الأنواع الفرعية لأنواع الخطأ الأصلية هي أيضًا أخطاء أصلية:

js
class MyError extends Error {}
console.log(util.types.isNativeError(new MyError())) // true

إن كون قيمة ما instanceof فئة خطأ أصلية لا يُعادل isNativeError() الذي يُرجع true لتلك القيمة. isNativeError() يُرجع true للأخطاء القادمة من مجال مختلف بينما instanceof Error يُرجع false لهذه الأخطاء:

js
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 أخطاء أصلية:

js
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().

js
util.types.isNumberObject(0) // يُرجع false
util.types.isNumberObject(new Number(0)) // يُرجع true

util.types.isPromise(value)

أضيف في: v10.0.0

يُرجع true إذا كانت القيمة عبارة عن وعد مُدمج Promise.

js
util.types.isPromise(Promise.resolve(42)) // يُرجع true

util.types.isProxy(value)

أضيف في: v10.0.0

يُرجع true إذا كانت القيمة عبارة عن مثيل لـ Proxy.

js
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 إذا كانت القيمة عبارة عن كائن تعبير عادي.

js
util.types.isRegExp(/abc/) // يُرجع true
util.types.isRegExp(new RegExp('abc')) // يُرجع true

util.types.isSet(value)

مضاف في: v10.0.0

يرجع true إذا كانت القيمة مثيلًا مُدمجًا لـ Set.

js
util.types.isSet(new Set()) // ترجع true

util.types.isSetIterator(value)

مضاف في: v10.0.0

يرجع true إذا كانت القيمة مُكررًا مُرجعًا لمثيل مُدمج من Set.

js
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() لذلك.

js
util.types.isSharedArrayBuffer(new ArrayBuffer()) // ترجع false
util.types.isSharedArrayBuffer(new SharedArrayBuffer()) // ترجع true

util.types.isStringObject(value)

مضاف في: v10.0.0

ترجع true إذا كانت القيمة كائن سلسلة، مثل الذي تم إنشاؤه بواسطة new String().

js
util.types.isStringObject('foo') // ترجع false
util.types.isStringObject(new String('foo')) // ترجع true

util.types.isSymbolObject(value)

مضاف في: v10.0.0

ترجع true إذا كانت القيمة كائن رمز، تم إنشاؤه باستدعاء Object() على قيمة رمز بدائية.

js
const symbol = Symbol('foo')
util.types.isSymbolObject(symbol) // ترجع false
util.types.isSymbolObject(Object(symbol)) // ترجع true

util.types.isTypedArray(value)

مضاف في: v10.0.0

ترجع true إذا كانت القيمة مثيلًا مضمنًا لـ TypedArray.

js
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.

js
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.

js
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.

js
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.

js
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.

js
util.types.isWeakMap(new WeakMap()) // ترجع true

util.types.isWeakSet(value)

مُضاف في: v10.0.0

يُرجع true إذا كانت القيمة مثيلًا مُدمجًا لـ WeakSet.

js
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.

js
const util = require('node:util')

util.isArray([])
// قيمة مُرجعه: true
util.isArray(new Array())
// قيمة مُرجعه: true
util.isArray({})
// قيمة مُرجعه: false