27 lines
930 B
TypeScript
27 lines
930 B
TypeScript
|
|
import { asUint8Array } from './util/as-uint8array.js'
|
||
|
|
import bases, { type SupportedEncodings } from './util/bases.js'
|
||
|
|
|
||
|
|
export type { SupportedEncodings }
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create a `Uint8Array` from the passed string
|
||
|
|
*
|
||
|
|
* Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.
|
||
|
|
*
|
||
|
|
* Also `ascii` which is similar to node's 'binary' encoding.
|
||
|
|
*/
|
||
|
|
export function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {
|
||
|
|
const base = bases[encoding]
|
||
|
|
|
||
|
|
if (base == null) {
|
||
|
|
throw new Error(`Unsupported encoding "${encoding}"`)
|
||
|
|
}
|
||
|
|
|
||
|
|
if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {
|
||
|
|
return asUint8Array(globalThis.Buffer.from(string, 'utf-8'))
|
||
|
|
}
|
||
|
|
|
||
|
|
// add multibase prefix
|
||
|
|
return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions
|
||
|
|
}
|