First commit
This commit is contained in:
74
node_modules/@ldapjs/asn1/lib/buffer-to-hex-dump.js
generated
vendored
Normal file
74
node_modules/@ldapjs/asn1/lib/buffer-to-hex-dump.js
generated
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
'use strict'
|
||||
|
||||
const { createWriteStream } = require('fs')
|
||||
|
||||
/**
|
||||
* @typedef {object} HexDumpParams
|
||||
* @property {Buffer} buffer The buffer instance to serialize into a hex dump.
|
||||
* @property {string} [prefix=''] A string to prefix each byte with, e.g.
|
||||
* `0x`.
|
||||
* @property {string} [separator=''] A string to separate each byte with, e.g.
|
||||
* `, '.
|
||||
* @property {string[]} [wrapCharacters=[]] A set of characters to wrap the
|
||||
* output with. For example, `wrapCharacters=['[', ']']` will start the hex
|
||||
* dump with `[` and end it with `]`.
|
||||
* @property {number} [width=10] How many bytes to write per line.
|
||||
* @property {WriteStream | string} [destination=process.stdout] Where to
|
||||
* write the serialized data. If a string is provided, it is assumed to be
|
||||
* the path to a file. This file will be completely overwritten.
|
||||
* @property {boolean} [closeDestination=false] Indicates whether the
|
||||
* `destination` should be closed when done. This _should_ be `true` when the
|
||||
* passed in `destination` is a stream that you control. If a string path is
|
||||
* supplied for the `destination`, this will automatically be handled.
|
||||
*/
|
||||
|
||||
// We'd like to put this coverage directive after the doc block,
|
||||
// but that confuses doc tooling (e.g. WebStorm).
|
||||
/* istanbul ignore next: defaults don't need 100% coverage */
|
||||
/**
|
||||
* Given a buffer of bytes, generate a hex dump that can be loaded later
|
||||
* or viewed in a hex editor (e.g. [Hex Fiend](https://hexfiend.com)).
|
||||
*
|
||||
* @param {HexDumpParams} params
|
||||
*
|
||||
* @throws When the destination cannot be accessed.
|
||||
*/
|
||||
module.exports = function bufferToHexDump ({
|
||||
buffer,
|
||||
prefix = '',
|
||||
separator = '',
|
||||
wrapCharacters = [],
|
||||
width = 10,
|
||||
destination = process.stdout,
|
||||
closeDestination = false
|
||||
}) {
|
||||
let closeStream = closeDestination
|
||||
if (typeof destination === 'string') {
|
||||
destination = createWriteStream(destination)
|
||||
closeStream = true
|
||||
}
|
||||
|
||||
if (wrapCharacters[0]) {
|
||||
destination.write(wrapCharacters[0])
|
||||
}
|
||||
|
||||
for (const [i, byte] of buffer.entries()) {
|
||||
const outByte = Number(byte).toString(16).padStart(2, '0')
|
||||
destination.write(prefix + outByte)
|
||||
if (i !== buffer.byteLength - 1) {
|
||||
destination.write(separator)
|
||||
}
|
||||
if ((i + 1) % width === 0) {
|
||||
destination.write('\n')
|
||||
}
|
||||
}
|
||||
|
||||
if (wrapCharacters[1]) {
|
||||
destination.write(wrapCharacters[1])
|
||||
}
|
||||
|
||||
/* istanbul ignore else */
|
||||
if (closeStream === true) {
|
||||
destination.end()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user