snipe/web/node_modules/@exodus/bytes/base32.js
pyr0ball 7a704441a6 feat(snipe): Vue 3 frontend scaffold + Docker web service
- web/: Vue 3 + Vite + UnoCSS + Pinia, dark tactical theme (amber/#0d1117)
- AppNav, ListingCard, SearchView with filters/sort, composables
  (useSnipeMode, useKonamiCode, useMotion), Pinia search store
- Steal shimmer, auction countdown, Snipe Mode easter egg all native in Vue
- docker/web/: nginx + multi-stage Dockerfile (node build → nginx serve)
- compose.yml: api (8510) + web (8509) services
- Dockerfile CMD updated to uvicorn for upcoming FastAPI layer
- Clean build: 0 TS errors, 380 modules
2026-03-25 15:11:35 -07:00

37 lines
1.5 KiB
JavaScript

import { assertEmptyRest } from './assert.js'
import { fromUint8, E_STRING } from './fallback/_utils.js'
import * as js from './fallback/base32.js'
// See https://datatracker.ietf.org/doc/html/rfc4648
// 8 chars per 5 bytes
function fromBase32common(str, mode, padding, format, rest) {
if (typeof str !== 'string') throw new TypeError(E_STRING)
if (rest !== null) assertEmptyRest(rest)
if (padding === true) {
if (str.length % 8 !== 0) throw new SyntaxError(js.E_PADDING)
} else if (padding === false) {
if (str.endsWith('=')) throw new SyntaxError('Did not expect padding in base32 input')
} else if (padding !== 'both') {
throw new TypeError('Invalid padding option')
}
return fromUint8(js.fromBase32(str, mode), format)
}
// By default, valid padding is accepted but not required
const fromBase32wrap = (mode) => (str, options) => {
if (!options) return fromBase32common(str, mode, 'both', 'uint8', null)
const { format = 'uint8', padding = 'both', ...rest } = options
return fromBase32common(str, mode, padding, format, rest)
}
export const fromBase32 = fromBase32wrap(0)
export const fromBase32hex = fromBase32wrap(1)
export const fromBase32crockford = fromBase32wrap(2)
export const toBase32 = (arr, { padding = false } = {}) => js.toBase32(arr, 0, padding)
export const toBase32hex = (arr, { padding = false } = {}) => js.toBase32(arr, 1, padding)
export const toBase32crockford = (arr, { padding = false } = {}) => js.toBase32(arr, 2, padding)