mqtt-ingest draft
This commit is contained in:
20
app/src/helpers/parse.ts
Normal file
20
app/src/helpers/parse.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
export function parseUtf8(payload: Buffer): string {
|
||||
return payload.toString('utf8')
|
||||
}
|
||||
|
||||
export function parseJson<T = unknown>(payload: Buffer): T {
|
||||
const text = parseUtf8(payload)
|
||||
return JSON.parse(text) as T
|
||||
}
|
||||
|
||||
export function parseJsonArray(payload: Buffer): unknown[] {
|
||||
const value = parseJson(payload)
|
||||
if (!Array.isArray(value)) {
|
||||
throw new Error('Expected JSON array')
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
export function decodeBase64(payload: Buffer): Buffer {
|
||||
return Buffer.from(payload.toString('utf8'), 'base64')
|
||||
}
|
||||
39
app/src/helpers/validate.ts
Normal file
39
app/src/helpers/validate.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
const EXPECTED_CHUNK_LENGTH = 125
|
||||
|
||||
export function isNonEmptyString(value: unknown): value is string {
|
||||
return typeof value === 'string' && value.length > 0
|
||||
}
|
||||
|
||||
export function isFiniteNumber(value: unknown): value is number {
|
||||
return typeof value === 'number' && Number.isFinite(value)
|
||||
}
|
||||
|
||||
export function isArrayOfLength(
|
||||
value: unknown,
|
||||
length: number,
|
||||
): value is unknown[] {
|
||||
return Array.isArray(value) && value.length === length
|
||||
}
|
||||
|
||||
export function isArrayOfLength125(value: unknown): value is unknown[] {
|
||||
return isArrayOfLength(value, EXPECTED_CHUNK_LENGTH)
|
||||
}
|
||||
|
||||
export function isArrayOfChunks125(
|
||||
value: unknown,
|
||||
): value is unknown[][] {
|
||||
if (!Array.isArray(value)) {
|
||||
return false
|
||||
}
|
||||
return value.every((chunk) => isArrayOfLength125(chunk))
|
||||
}
|
||||
|
||||
export function assertValid<T>(
|
||||
value: unknown,
|
||||
guard: (v: unknown) => v is T,
|
||||
label: string,
|
||||
): asserts value is T {
|
||||
if (!guard(value)) {
|
||||
throw new Error(`Invalid payload: ${label}`)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user