Nominal Pizza Masticator

    lex62

    1.0.2 • Public • Published

    lex62 Build Status js-standard-style

    Fast, lexicographic base62 encode and decode

    Installation

    npm i --save lex62

    Design notes

    • ideas from http://www.zanopha.com/docs/elen.pdf
    • lexigraphical order: A < Z < a < z < 0 < 9
    • ensures lexicographical order by appending an alphabetic prefix (based on number of digits).
    • decode will only work with base64 numbers that have an expected prefix (alphabetic prefix appended to ensure lexigraphic order).
    • encode should work with any positive integer (and zero) as long as it is not very large ~> 1e90.

    Usage

    encode
    var lex62 = require('lex62')
     
    lex62.encode(0) // 'A0'
    lex62.encode(1) // 'A1'
    lex62.encode(9) // 'A9'
    lex62.encode(10) // 'AA'
    lex62.encode(35) // 'AZ'
    lex62.encode(36) // 'Aa'
    lex62.encode(61) // 'Az'
    lex62.encode(62) // 'B10'
    lex62.encode(123) // 'B1z'
    lex62.encode(3843) // 'Bzz'
    lex62.encode(3844) // 'C100'
    lex62.encode(238327) // 'Czzz'
     
    // errors
    lex62.encode('yo')
    // throws [AssertionError: 'encode: invalid base10 (not a number)']
    lex62.encode(-10)
    // throws [AssertionError: 'encode: number not supported (must be a positive integer or zero)']
    lex62.encode(1e90)
    // throws [AssertionError: 'encode: number not supported (too large)']
    decode
    • decode only works w/ base62 numbers which follow the format outputted by encode.
    var lex62 = require('lex62')
     
    lex62.encode('A0') // 0
    lex62.encode('A1') // 1
    lex62.encode('A9') // 9
    lex62.encode('AA') // 10
    lex62.encode('AZ') // 35
    lex62.encode('Aa') // 36
    lex62.encode('Az') // 61
    lex62.encode('B10') // 62
    lex62.encode('B1z') // 123
    lex62.encode('Bzz') // 3843
    lex62.encode('C100') // 3844
    lex62.encode('Czzz') // 238327
     
    // errors
    lex62.encode('A*')
    // throws [AssertionError: 'decode: invalid base62 ("A*" not base62)']
    lex62.encode('B0')
    // throws [AssertionError: 'decode: number not supported (unexpected prefix)']
    lex62.encode('B00')
    // throws [AssertionError: 'decode: number not supported (unexpected zero)']
    lex62.encode('zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz')
    // throws [AssertionError: 'decode: number not supported (too large)']

    License

    MIT

    Install

    npm i lex62

    DownloadsWeekly Downloads

    2

    Version

    1.0.2

    License

    MIT

    Last publish

    Collaborators

    • tjmehta