Files
klz-cables.com/.pnpm-store/v10/files/26/13fc43341aee384b839a83855c720c713e694e2d09b018481b0a73ddf96b55ac301f9ed7efa0bccba030980c2d7296b0e03e798ff3aff62b64d68f8f6631e3
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

126 lines
2.7 KiB
Plaintext

const parseInt64 = require('pg-int8')
const parseNumeric = require('pg-numeric')
const parseInt16 = function (value) {
return value.readInt16BE(0)
}
const parseInt32 = function (value) {
return value.readInt32BE(0)
}
const parseFloat32 = function (value) {
return value.readFloatBE(0)
}
const parseFloat64 = function (value) {
return value.readDoubleBE(0)
}
const parseTimestampUTC = function (value) {
const rawValue = 0x100000000 * value.readInt32BE(0) + value.readUInt32BE(4)
// discard usecs and shift from 2000 to 1970
const result = new Date(Math.round(rawValue / 1000) + 946684800000)
return result
}
const parseArray = function (value) {
const dim = value.readInt32BE(0)
const elementType = value.readUInt32BE(8)
let offset = 12
const dims = []
for (let i = 0; i < dim; i++) {
// parse dimension
dims[i] = value.readInt32BE(offset)
offset += 4
// ignore lower bounds
offset += 4
}
const parseElement = function (elementType) {
// parse content length
const length = value.readInt32BE(offset)
offset += 4
// parse null values
if (length === -1) {
return null
}
let result
if (elementType === 0x17) {
// int
result = value.readInt32BE(offset)
offset += length
return result
} else if (elementType === 0x14) {
// bigint
result = parseInt64(value.slice(offset, offset += length))
return result
} else if (elementType === 0x19) {
// string
result = value.toString('utf8', offset, offset += length)
return result
} else {
throw new Error('ElementType not implemented: ' + elementType)
}
}
const parse = function (dimension, elementType) {
const array = []
let i
if (dimension.length > 1) {
const count = dimension.shift()
for (i = 0; i < count; i++) {
array[i] = parse(dimension, elementType)
}
dimension.unshift(count)
} else {
for (i = 0; i < dimension[0]; i++) {
array[i] = parseElement(elementType)
}
}
return array
}
return parse(dims, elementType)
}
const parseText = function (value) {
return value.toString('utf8')
}
const parseBool = function (value) {
return value[0] !== 0
}
const init = function (register) {
register(20, parseInt64)
register(21, parseInt16)
register(23, parseInt32)
register(26, parseInt32)
register(1700, parseNumeric)
register(700, parseFloat32)
register(701, parseFloat64)
register(16, parseBool)
register(1114, parseTimestampUTC)
register(1184, parseTimestampUTC)
register(1000, parseArray)
register(1007, parseArray)
register(1016, parseArray)
register(1008, parseArray)
register(1009, parseArray)
register(25, parseText)
}
module.exports = {
init: init
}