const e = require("compact-encoding"),
d = require("@holepunchto/hyperindex"),
{ GENERIC_EVENTS: n, DISPLAY_TYPES: o } = require("@holepunchto/keet-core-api"),
c = 0,
t = [d.UINT, d.UINT],
r = [d.BUFFER, d.UINT],
i = e.fixed32,
p = d.UINT,
u = {
preencode(d, n) {
;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.seq))
},
encode(d, n) {
;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.seq))
},
decode: (d) => ({ key: e.fixed32.decode(d), seq: e.uint.decode(d) }),
},
s = {
preencode(d, n) {
;(e.uint.preencode(d, n[0]), e.uint.preencode(d, n[1]))
},
encode(d, n) {
;(e.uint.encode(d, n[0]), e.uint.encode(d, n[1]))
},
decode: (d) => [e.uint.decode(d), e.uint.decode(d)],
},
l = {
TYPE: o.MENTION,
preencode(e, d) {
;(i.preencode(e, d.memberId), I.preencode(e, d))
},
encode(e, d) {
;(i.encode(e, d.memberId), I.encode(e, d))
},
decode: (e) => ({ memberId: i.decode(e), ...I.decode(e) }),
},
a = {
preencode(d, n) {
let o = 0
;(n.title && (o |= 1),
n.description && (o |= 2),
n.file && (o |= 4),
e.uint.preencode(d, o),
e.string.preencode(d, n.url),
n.title && e.string.preencode(d, n.title),
n.description && e.string.preencode(d, n.description),
n.file && L.preencode(d, n.file))
},
encode(d, n) {
let o = 0
;(n.title && (o |= 1),
n.description && (o |= 2),
n.file && (o |= 4),
e.uint.encode(d, o),
e.string.encode(d, n.url),
n.title && e.string.encode(d, n.title),
n.description && e.string.encode(d, n.description),
n.file && L.encode(d, n.file))
},
decode(d) {
const n = e.uint.decode(d)
return {
url: e.string.decode(d),
title: 1 & n ? e.string.decode(d) : null,
description: 2 & n ? e.string.decode(d) : null,
file: 4 & n ? L.decode(d) : null,
}
},
},
E = {
TYPE: o.HTTP_LINK,
preencode(d, n) {
let o = 0
;(n.preview && (o |= 1),
e.uint.preencode(d, o),
h.preencode(d, n),
n.preview && a.preencode(d, n.preview))
},
encode(d, n) {
let o = 0
;(n.preview && (o |= 1),
e.uint.encode(d, o),
h.encode(d, n),
n.preview && a.encode(d, n.preview))
},
decode(d) {
const n = e.uint.decode(d)
return { ...h.decode(d), preview: 1 & n ? a.decode(d) : null }
},
},
v = {
TYPE: o.PEAR_LINK,
preencode(d, n) {
let o = 0
;(n.preview && (o |= 1),
e.uint.preencode(d, o),
h.preencode(d, n),
n.preview && a.preencode(d, n.preview))
},
encode(d, n) {
let o = 0
;(n.preview && (o |= 1),
e.uint.encode(d, o),
h.encode(d, n),
n.preview && a.encode(d, n.preview))
},
decode(d) {
const n = e.uint.decode(d)
return { ...h.decode(d), preview: 1 & n ? a.decode(d) : null }
},
},
y = {
TYPE: o.CODE,
preencode(e, d) {
I.preencode(e, d)
},
encode(e, d) {
I.encode(e, d)
},
decode: (e) => I.decode(e),
},
T = {
TYPE: o.CODE_BLOCK,
preencode(e, d) {
I.preencode(e, d)
},
encode(e, d) {
I.encode(e, d)
},
decode: (e) => I.decode(e),
},
f = {
TYPE: o.BOLD,
preencode(e, d) {
I.preencode(e, d)
},
encode(e, d) {
I.encode(e, d)
},
decode: (e) => I.decode(e),
},
w = {
TYPE: o.ITALIC,
preencode(e, d) {
I.preencode(e, d)
},
encode(e, d) {
I.encode(e, d)
},
decode: (e) => I.decode(e),
},
g = {
TYPE: o.STRIKE_THROUGH,
preencode(e, d) {
I.preencode(e, d)
},
encode(e, d) {
I.encode(e, d)
},
decode: (e) => I.decode(e),
},
m = {
TYPE: o.EMOJI,
preencode(e, d) {
h.preencode(e, d)
},
encode(e, d) {
h.encode(e, d)
},
decode: (e) => h.decode(e),
},
h = {
preencode(d, n) {
;(e.string.preencode(d, n.content), I.preencode(d, n))
},
encode(d, n) {
;(e.string.encode(d, n.content), I.encode(d, n))
},
decode: (d) => ({ content: e.string.decode(d), ...I.decode(d) }),
},
I = {
preencode(d, n) {
;(e.uint.preencode(d, n.start), e.uint.preencode(d, n.length))
},
encode(d, n) {
;(e.uint.encode(d, n.start), e.uint.encode(d, n.length))
},
decode: (d) => ({ start: e.uint.decode(d), length: e.uint.decode(d) }),
}
function P(e) {
switch (e) {
case l.TYPE:
return l
case E.TYPE:
return E
case v.TYPE:
return v
case f.TYPE:
return f
case w.TYPE:
return w
case y.TYPE:
return y
case T.TYPE:
return T
case g.TYPE:
return g
case m.TYPE:
return m
default:
return null
}
}
const Y = {
preencode(d, n) {
const o = P(n.type)
if (!o) throw new Error("Unsupported display type")
;(e.uint.preencode(d, n.type), o.preencode(d, n.value))
},
encode(d, n) {
const o = P(n.type)
if (!o) throw new Error("Unsupported display type")
;(e.uint.encode(d, n.type), o.encode(d, n.value))
},
decode(d) {
const n = e.uint.decode(d),
o = P(n)
if (!o) throw new Error("Unsupported display type")
return { type: n, value: o.decode(d) }
},
},
R = e.array(Y),
x = {
preencode(d, n) {
;(d.end++, e.string.preencode(d, n.text))
},
encode(d, n) {
const o = d.start++
e.string.encode(d, n.text)
let c = 0
;(n.edited && (c |= 1), (d.buffer[o] = c))
},
decode(d) {
const n = e.uint.decode(d)
return { text: e.string.decode(d), edited: !!(1 & n) }
},
},
_ = {
preencode(e, d) {
L.preencode(e, d)
},
encode(e, d) {
L.encode(e, d)
},
decode: (e) => L.decode(e),
}
function N(d) {
switch (d) {
case n.MEMBER_JOINED:
case n.CALL_STARTED:
case n.ROOM_AVATAR_CHANGED:
case n.INVITATION_CREATED:
case n.MEMBER_LEFT:
return M
case n.MEMBER_REMOVED:
return k
case n.ROOM_TITLE_CHANGED:
return O
default:
return e.buffer
}
}
const A = {
preencode(d, n) {
e.uint.preencode(d, n.type)
const o = N(n.type)
o.preencode && o.preencode(d, n.value)
},
encode(d, n) {
e.uint.encode(d, n.type)
const o = N(n.type)
o.preencode && o.encode(d, n.value)
},
decode(d) {
const n = e.uint.decode(d),
o = N(n)
return o.preencode ? { type: n, value: o.decode(d) } : { type: n, value: null }
},
},
M = {},
O = {
preencode(d, n) {
;(e.string.preencode(d, n.from), e.string.preencode(d, n.to))
},
encode(d, n) {
;(e.string.encode(d, n.from), e.string.encode(d, n.to))
},
decode: (d) => ({ from: e.string.decode(d), to: e.string.decode(d) }),
},
k = {
preencode(d, n) {
e.fixed32.preencode(d, n.memberKey)
},
encode(d, n) {
e.fixed32.encode(d, n.memberKey)
},
decode: (d) => ({ memberKey: e.fixed32.decode(d) }),
},
D = {
preencode(d, n) {
let o = 0
;(n.deleted && (o |= 1),
n.timestamp && (o |= 2),
n.chat && (o |= 4),
n.file && (o |= 8),
n.display && (o |= 16),
n.event && (o |= 32),
n.parent && (o |= 64),
n.replyTo && (o |= 128),
e.uint.preencode(d, o),
e.uint.preencode(d, n.clock),
u.preencode(d, n.id),
n.timestamp && e.uint.preencode(d, n.timestamp),
n.chat && x.preencode(d, n.chat),
n.file && _.preencode(d, n.file),
n.display && R.preencode(d, n.display),
n.event && A.preencode(d, n.event),
n.parent && u.preencode(d, n.parent),
n.replyTo && u.preencode(d, n.replyTo))
},
encode(d, n) {
let o = 0
;(n.deleted && (o |= 1),
n.timestamp && (o |= 2),
n.chat && (o |= 4),
n.file && (o |= 8),
n.display && (o |= 16),
n.event && (o |= 32),
n.parent && (o |= 64),
n.replyTo && (o |= 128),
e.uint.encode(d, o),
e.uint.encode(d, n.clock),
u.encode(d, n.id),
n.timestamp && e.uint.encode(d, n.timestamp),
n.chat && x.encode(d, n.chat),
n.file && _.encode(d, n.file),
n.display && R.encode(d, n.display),
n.event && A.encode(d, n.event),
n.parent && u.encode(d, n.parent),
n.replyTo && u.encode(d, n.replyTo))
},
decode(d) {
const n = e.uint.decode(d)
return {
clock: e.uint.decode(d),
id: u.decode(d),
deleted: !!(1 & n),
timestamp: 2 & n ? e.uint.decode(d) : null,
chat: 4 & n ? x.decode(d) : null,
file: 8 & n ? _.decode(d) : null,
display: 16 & n ? R.decode(d) : null,
event: 32 & n ? A.decode(d) : null,
parent: 64 & n ? u.decode(d) : null,
replyTo: 128 & n ? u.decode(d) : null,
}
},
},
b = {
preencode(d, n) {
;(e.fixed32.preencode(d, n.key),
e.string.preencode(d, n.path),
e.uint.preencode(d, n.version))
},
encode(d, n) {
;(e.fixed32.encode(d, n.key), e.string.encode(d, n.path), e.uint.encode(d, n.version))
},
decode: (d) => ({
key: e.fixed32.decode(d),
path: e.string.decode(d),
version: e.uint.decode(d),
}),
},
C = {
preencode(d, n) {
;(e.uint.preencode(d, n.width), e.uint.preencode(d, n.height))
},
encode(d, n) {
;(e.uint.encode(d, n.width), e.uint.encode(d, n.height))
},
decode: (d) => ({ width: e.uint.decode(d), height: e.uint.decode(d) }),
},
L = {
preencode(d, n) {
let o = 0
;(n.type && (o |= 1),
n.dimensions && (o |= 2),
n.preview && (o |= 4),
n.previewPointer && (o |= 8),
e.uint.preencode(d, o),
b.preencode(d, n),
n.type && e.string.preencode(d, n.type),
n.dimensions && C.preencode(d, n.dimensions),
n.preview && e.buffer.preencode(d, n.preview),
n.previewPointer && b.preencode(d, n.previewPointer))
},
encode(d, n) {
let o = 0
;(n.type && (o |= 1),
n.dimensions && (o |= 2),
n.preview && (o |= 4),
n.previewPointer && (o |= 8),
e.uint.encode(d, o),
b.encode(d, n),
n.type && e.string.encode(d, n.type),
n.dimensions && C.encode(d, n.dimensions),
n.preview && e.buffer.encode(d, n.preview),
n.previewPointer && b.encode(d, n.previewPointer))
},
decode(d) {
const n = e.uint.decode(d),
{ key: o, path: c, version: t } = b.decode(d)
return {
key: o,
path: c,
version: t,
type: 1 & n ? e.string.decode(d) : null,
dimensions: 2 & n ? C.decode(d) : null,
preview: 4 & n ? e.buffer.decode(d) : null,
previewPointer: 8 & n ? b.decode(d) : null,
}
},
}
module.exports = {
PRIMARY_THREAD_ID: 0,
IndexEventId: t,
IndexMessageId: r,
ClockIndexEncoding: p,
MessageId: u,
EventIdValueEncoding: s,
GenericEvent: A,
DisplayEvent: R,
ChatEvent: x,
EventRecord: D,
FileRecord: L,
}