Nonchalant Programming Master
    Wondering what’s next for npm?Check out our public roadmap! »

    @47ng/codec
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.1 • Public • Published

    @47ng/codec

    NPM MIT License Continuous Integration Coverage Status Dependabot Status

    Universal conversion of Uint8Array from/into UTF-8, base64url and hex in the browser and Node.js

    Installation

    $ yarn add @47ng/codec
    # or
    $ npm i @47ng/codec

    Features

    Available codecs:

    Watch out ! utf8 uses a different convention than the other codecs (encode and decode are swapped), to reflect how TextEncoder and TextDecoder behave.

    Support

    • Node.js: >=11.x
    • Browser: See caniuse for TextEncoder / TextDecoder

    Examples

    import { b64, hex, utf8 } from '@47ng/codec'
    
    b64.encode(utf8.encode('Hello, World !')) // SGVsbG8sIFdvcmxkICE=
    hex.encode(b64.decode('SGVsbG8sIFdvcmxkICE=')) // 48656c6c6f2c20576f726c642021
    utf8.decode(hex.decode('48656c6c6f2c20576f726c642021')) // Hello, World !
    
    b64.decode('SGVsbG8sIFdvcmxkICE=') // <Buffer 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 20 21>

    Documentation

    UTF-8

    • utf8.encode: Convert an UTF-8 string into an array of bytes (Uint8Array)
    • utf8.decode: Convert an array of bytes into an UTF-8 string

    Examples:

    import { utf8 } from '@47ng/codec'
    
    const uint8Array = utf8.encode('Hello, World!')
    // Uint8Array [72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33]
    
    const backToText = utf8.decode(uint8Array)
    // 'Hello, World!'

    Base 64

    • b64.encode: Convert an array of bytes into a base64url string
    • b64.decode: Convert a base64 string into an array of bytes
    • b64.urlSafe: Convert a standard base64 string to base64url
    • b64.urlUnsafe: Convert a base64url string to standard base64 dictionary

    Note: For decoding, any dictionary is supported, and trailing padding (=) is optional.

    Examples:

    import { b64, utf8 } from '@47ng/codec'
    
    const uint8Array = b64.decode('8J-Ri_CfjI0')
    // Uint8Array [240, 159, 145, 139, 240, 159, 140, 141]
    
    // Encoding always emits padding
    const backToBase64 = b64.encode(uint8Array)
    // '8J-Ri_CfjI0='
    
    const asText = utf8.decode(uint8Array)
    // '👋🌍'

    Hex

    • hex.encode: Convert an array of bytes into a hex string
    • hex.decode: Convert a hex string into an array of bytes

    Note: Decoding accepts any case (lowercase, uppercase, mixed).

    Examples:

    import { hex } from '@47ng/codec'
    
    const uint8Array = hex.decode('48656C6C6F2C20576f726c642021')
    // Uint8Array [72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33]
    
    // Encoding is always lowercase
    const backToBase64 = hex.encode(uint8Array)
    // '48656c6c6f2c20576f726c642021'

    Utilities

    The library exports convenience methods for hex to/from base64 conversions:

    import { hexToBase64url, base64ToHex } from '@47ng/codec'
    
    const hex = base64ToHex('SGVsbG8sIFdvcmxkICE=')
    // 48656c6c6f2c20576f726c642021
    
    const b64 = hexToBase64url('48656c6c6f2c20576f726c642021')
    // SGVsbG8sIFdvcmxkICE=

    As well as encoder / decoder objects with strong TypeScript types, to help you build your own encoders & decoders:

    import { encoders, decoders, Encoding } from '@47ng/codec'
    
    // type Encoding = 'base64' | 'utf8' | 'hex'
    
    function convert(
      input: string,
      inputEncoding: Encoding,
      outputEncoding: Encoding
    ): string {
      const decoder = decoders[inputEncoding]
      const encoder = encoders[outputEncoding]
      return encoder(decoder(input))
    }
    
    convert('Hello, World!', 'utf8', 'base64')
    // SGVsbG8sIFdvcmxkICE
    
    convert('Hello, World!', 'utf8', 'hex')
    // 48656c6c6f2c20576f726c642021

    License

    MIT - Made with ❤️ by François Best - Donations welcome 🙏

    Install

    npm i @47ng/codec

    DownloadsWeekly Downloads

    458

    Version

    1.0.1

    License

    MIT

    Unpacked Size

    12 kB

    Total Files

    11

    Last publish

    Collaborators

    • avatar