Утилита вывода сообщений отладки для JavaScript

e22m4u 7f2f569816 chore: bumps version to 0.1.3 7 months ago
.husky e3bf09d49a chore: initial commit 8 months ago
dist 2ea6f1e5ef chore: adds namespace prefix for eache line 7 months ago
src 2ea6f1e5ef chore: adds namespace prefix for eache line 7 months ago
.c8rc e3bf09d49a chore: initial commit 8 months ago
.commitlintrc e3bf09d49a chore: initial commit 8 months ago
.editorconfig e3bf09d49a chore: initial commit 8 months ago
.gitignore e3bf09d49a chore: initial commit 8 months ago
.mocharc.cjs e3bf09d49a chore: initial commit 8 months ago
.prettierrc e3bf09d49a chore: initial commit 8 months ago
LICENSE e3bf09d49a chore: initial commit 8 months ago
README.md 5482799adc chore: extends createDebugger parameters with additional segments 8 months ago
build-cjs.js e3bf09d49a chore: initial commit 8 months ago
eslint.config.js e3bf09d49a chore: initial commit 8 months ago
package.json bc077fb36d chore: bumps version to 0.1.3 7 months ago
tsconfig.json e3bf09d49a chore: initial commit 8 months ago

README.md

@e22m4u/js-debug

Утилита вывода сообщений отладки для JavaScript.

Содержание

Установка

npm install @e22m4u/js-debug

Поддержка ESM и CommonJS стандартов.

ESM

import {createDebugger} from '@e22m4u/js-debug';

CommonJS

const {createDebugger} = require('@e22m4u/js-debug');

Использование

Интерполяция строк (см. спецификаторы @e22m4u/js-format).

import {createDebugger} from '@e22m4u/js-debug';

const debug = createDebugger();
debug('Got value %v.', 100);
debug('Got values %l.', ['foo', 10, true]);
// Got value 100.
// Got values "foo", 10, true.

Дамп значений.

import {createDebugger} from '@e22m4u/js-debug';

const debug = createDebugger();
debug({
  email: 'john.doe@example.com',
  phone: {
    mobile: '+1-555-123-4567',
    home: '+1-555-987-6543'
  },
});
// {
//   email: 'john.doe@example.com',
//   phone: {
//     mobile: '+1-555-123-4567',
//     home: '+1-555-987-6543'
//   }
// }

Дополнительное сообщение над дампом.

import {createDebugger} from '@e22m4u/js-debug';

const debug = createDebugger();
debug({
  orderId: 988,
  date: '2023-10-27',
  totalAmount: 120.50,
}, 'Order details:');

// Order details:
// {
//   orderId: 988,
//   date: '2023-10-27',
//   totalAmount: 120.50,
// }

Определение пространства имен.

import {createDebugger} from '@e22m4u/js-debug';

const debug1 = createDebugger('myApp');
const debug2 = createDebugger('myApp', 'myService');
const debug3 = createDebugger('myApp:myService');
debug1('Hello world');
debug2('Hello world');
debug3('Hello world');
// myApp Hello world
// myApp:myService Hello world
// myApp:myService Hello world

Использование пространства имен из переменной окружения.

import {createDebugger} from '@e22m4u/js-debug';

process.env['DEBUGGER_NAMESPACE'] = 'myApp';

const debug = createDebugger();
debug('Hello world');
// myApp Hello world

Расширение сегментов пространства имен.

import {createDebugger} from '@e22m4u/js-debug';

const debug1 = createDebugger();
const debug2 = debug1.withNs('myApp');
const debug3 = debug2.withNs('myService');
debug1('Hello world');
debug2('Hello world');
debug3('Hello world');
// Hello world
// myApp Hello world
// myApp:myService Hello world

Использование статичного хэша.

import {createDebugger} from '@e22m4u/js-debug';

const debug1 = createDebugger().withHash();
debug1('Hi John');
debug1('Hi Tommy');
// r34s Hi John
// r34s Hi Tommy

const debug2 = createDebugger().withHash();
debug2('Hi John');
debug2('Hi Tommy');
// ier0 Hi John
// ier0 Hi Tommy

Определение длины хэша.

import {createDebugger} from '@e22m4u/js-debug';

const debug = createDebugger().withHash(15);
debug('Hi John');
debug('Hi Tommy');
// we1gf4uyc4dj8f0 Hi John
// we1gf4uyc4dj8f0 Hi Tommy

Использование смещений.

import {createDebugger} from '@e22m4u/js-debug';

const debug1 = createDebugger().withOffset(1);
const debug2 = createDebugger().withOffset(2);
const debug3 = createDebugger().withOffset(3);
debug1('Hello world');
debug2('Hello world');
debug3('Hello world');
// Hello world
//    Hello world
//        Hello world

Комбинирование методов.

import {createDebugger} from '@e22m4u/js-debug';

const debug = createDebugger('myApp').withNs('myService').withHash();
const debugWo1 = debug.withOffset(1);

const contact = {
  email: 'john.doe@example.com',
  phone: {
    mobile: '+1-555-123-4567',
    home: '+1-555-987-6543'
  },
}

debug('Iterating over %v participants.', 10);
debugWo1('Looking for contacts of %v participant.', 1);
debugWo1(contact, 'Participant contacts found:');

// myApp:myService:o3pk Iterating over 10 participants.
// myApp:myService:o3pk   Looking for contacts of 1 participant.
// myApp:myService:o3pk   Participant contacts found:
// myApp:myService:o3pk   {
// myApp:myService:o3pk     email: 'john.doe@example.com',
// myApp:myService:o3pk     phone: {
// myApp:myService:o3pk       mobile: '+1-555-123-4567',
// myApp:myService:o3pk       home: '+1-555-987-6543'
// myApp:myService:o3pk     },
// myApp:myService:o3pk   }

Управление выводом

По умолчанию вызовы функции debug ничего не выводят. Чтобы увидеть отладочные сообщения, необходимо указать, какие именно пространства имен вас интересуют. Это делается с помощью специального паттерна (шаблона). Механизм включения зависит от среды выполнения.

Node.js: Переменная окружения DEBUG

В среде Node.js используется переменная окружения DEBUG. Вы можете установить её при запуске вашего скрипта.

# включить конкретное пространство имен
DEBUG=myApp node your_script.js

# включить все пространства имен, начинающиеся с 'myApp:'
DEBUG=myApp:* node your_script.js

# включить несколько пространств имен через запятую
DEBUG=myApp:service,lib:utils node your_script.js
# если используете пробелы, нужны кавычки
DEBUG="myApp:service lib:utils" node your_script.js

# включить ВСЕ пространства имен
DEBUG=* node your_script.js

Браузер: localStorage.debug

В веб-браузерах для управления выводом используется ключ debug в localStorage. Вы можете установить его значение через консоль разработчика.

// включить конкретное пространство имен
localStorage.debug = 'myApp';

// включить все пространства имен, начинающиеся с 'myApp:'
localStorage.debug = 'myApp:*';

// включить несколько (через запятую или пробел)
localStorage.debug = 'myApp:service,lib:utils';
// или
localStorage.debug = 'myApp:service lib:utils';

// включить ВСЕ
localStorage.debug = '*';

// отключить вывод
localStorage.removeItem('debug');
// или
localStorage.debug = '';

i. После изменения localStorage.debug обычно требуется перезагрузить страницу, чтобы изменения вступили в силу.

Синтаксис паттернов

  • Точное совпадение (например, myApp:myService);
  • Wildcard (*): myApp* соответствует myApp, myApp:myService и т.д.;
  • Несколько паттернов можно указать разделив из запятой или пробелом;
  • Включить всё: * включает вывод для всех пространств имен;

Примеры шаблонов в окружении Node.js:

node main.js # ничего не выведет
DEBUG=* node main.js # выведет все сообщения
DEBUG=app node main.js # только пространство имен app
DEBUG=app:* node main.js # пространства имен с префиксом app:
DEBUG=app:worker,legacy node main.js # только app:worker и legacy

Тесты

npm run test

Лицензия

MIT