PHP WebShell

Текущая директория: /opt/BitGoJS/modules/deser-lib/src

Просмотр файла: cbor.ts

import { decodeFirstSync, encode } from 'cbor';

/**
 * Transform value into its canonical, serializable form.
 * @param value - Value to transform.
 * @returns Canonical, serializable form of value.
 */
export function transform<T>(value: T): T | Buffer {
  if (value === null || value === undefined) {
    return value;
  }
  if (typeof value === 'string') {
    // Transform hex strings to buffers.
    if (value.startsWith('0x')) {
      if (!value.match(/^0x([0-9a-fA-F]{2})*$/)) {
        throw new Error('0x prefixed string contains non-hex characters.');
      }
      return Buffer.from(value.slice(2), 'hex');
    } else if (value.startsWith('\\0x')) {
      return value.slice(1) as unknown as T;
    }
  } else if (value instanceof Array) {
    value = [...value] as unknown as T;
    return (value as unknown as Array<unknown>).map(transform) as unknown as T;
  } else if (value instanceof Object) {
    const properties = Object.getOwnPropertyNames(value);
    return properties.reduce((acc, name) => {
      acc[name] = transform(value[name]);
      return acc;
    }, {}) as unknown as T;
  }
  return value;
}

/**
 * Untransform value into its human readable form.
 * @param value - Value to untransform.
 * @returns Untransformed, human readable form of value.
 */
export function untransform<T>(value: T): T | string {
  if (Buffer.isBuffer(value)) {
    return '0x' + value.toString('hex');
  } else if (typeof value === 'string') {
    if (value.startsWith('0x')) {
      return '\\' + value;
    }
  } else if (value instanceof Array) {
    return value.map(untransform) as unknown as T;
  } else if (value instanceof Object) {
    const properties = Object.getOwnPropertyNames(value);
    return properties.reduce((acc, name) => {
      acc[name] = untransform(value[name]);
      return acc;
    }, {}) as unknown as T;
  }
  return value;
}

/**
 * Serialize a value.
 * @param value - Value to serialize.
 * @returns Buffer representing serialized value.
 */
export function serialize<T>(value: T): Buffer {
  return encode(transform(value));
}

/**
 * Deserialize a value.
 * @param value - Buffer to deserialize.
 * @returns Deserialized value.
 */
export function deserialize(value: Buffer): unknown {
  return untransform(decodeFirstSync(value));
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!