Implement misc and tests
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
.idea/
|
||||
._*
|
||||
.DS_Store
|
||||
bun.lockb
|
||||
package-lock.json
|
||||
node_modules/
|
||||
@@ -0,0 +1,27 @@
|
||||
import {a2b64, a2str, b642a, str2a} from './index'
|
||||
|
||||
import {test, expect} from 'bun:test'
|
||||
|
||||
test('str2a and a2str are reciprocal', () => {
|
||||
const from = "Testing value !"
|
||||
|
||||
let buff = str2a(from)
|
||||
let to = a2str(buff)
|
||||
|
||||
expect(to).toBe(from)
|
||||
})
|
||||
|
||||
test('b642a and a2b64 are reciprocal', () => {
|
||||
const from_str = "Testing value !"
|
||||
const from = btoa(from_str)
|
||||
|
||||
let buff = b642a(from).expect("Should encode valid b64")
|
||||
let to = a2b64(buff)
|
||||
|
||||
expect(to).toBe(from)
|
||||
})
|
||||
|
||||
|
||||
test("b642a doesn't accept invalid b64", () => {
|
||||
b642a("pa'0ac'i !!").expect_err("Shouldn't unpack invalid b64")
|
||||
})
|
||||
@@ -0,0 +1,26 @@
|
||||
import {Result} from 'result'
|
||||
|
||||
export function a2str(buf: Uint8Array) : string {
|
||||
// @ts-ignore
|
||||
return String.fromCharCode.apply(null, buf)
|
||||
}
|
||||
export function str2a(str: string) : Uint8Array {
|
||||
const buf = new Uint8Array(str.length)
|
||||
|
||||
for (let i= 0, strLen = str.length; i < strLen; i++) {
|
||||
buf[i] = str.charCodeAt(i)
|
||||
}
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
export function a2b64(buf: Uint8Array) : string {
|
||||
return btoa(a2str(buf))
|
||||
}
|
||||
export function b642a(b64: string) : Result<Uint8Array> {
|
||||
try {
|
||||
return Result.ok(str2a(atob(b64)))
|
||||
} catch (e) {}
|
||||
|
||||
return Result.error([])
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "misc",
|
||||
"description": "Various utils",
|
||||
"module": "index.ts",
|
||||
"type": "module",
|
||||
"files": ["index.ts"],
|
||||
"dependencies": {
|
||||
"result": "git+git@git.pband.ch/typescript/result"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/bun": "^1.0.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5.0.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
|
||||
// Enable latest features
|
||||
"lib": [
|
||||
"ESNext",
|
||||
"dom"
|
||||
],
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
"moduleDetection": "force",
|
||||
"allowJs": false,
|
||||
"checkJs": true,
|
||||
|
||||
// Bundler mode
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"verbatimModuleSyntax": true,
|
||||
"noEmit": true,
|
||||
|
||||
// Best practices
|
||||
"strict": true,
|
||||
"skipLibCheck": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
|
||||
// Some stricter flags (disabled by default)
|
||||
"noUnusedLocals": false,
|
||||
"noUnusedParameters": false,
|
||||
"noPropertyAccessFromIndexSignature": false
|
||||
},
|
||||
"include": [
|
||||
"index.ts",
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user