feat(frontend/player):use resolver for urlBased message both in FileReader and JSONReader in live-sessions

This commit is contained in:
Alex Kaminskii 2022-12-12 17:19:59 +01:00
parent 0643b8b929
commit 85c23db4f1
3 changed files with 7 additions and 69 deletions

View file

@ -1,21 +1,9 @@
import type {
RawMessage,
RawSetNodeAttributeURLBased,
RawSetNodeAttribute,
RawSetCssDataURLBased,
RawSetCssData,
RawCssInsertRuleURLBased,
RawCssInsertRule,
RawAdoptedSsInsertRuleURLBased,
RawAdoptedSsInsertRule,
RawAdoptedSsReplaceURLBased,
RawAdoptedSsReplace,
} from './raw.gen'
import type { RawMessage } from './raw.gen'
import type { TrackerMessage } from './tracker.gen'
import { MType } from './raw.gen'
import translate from './tracker.gen'
import { TP_MAP } from './tracker-legacy.gen'
import { resolveURL, resolveCSS } from './urlResolve'
import resolveURL from './urlBasedResolver'
function legacyTranslate(msg: any): RawMessage | null {
@ -29,54 +17,6 @@ function legacyTranslate(msg: any): RawMessage | null {
}
// TODO: commonURLBased logic for feilds
const resolvers = {
[MType.SetNodeAttributeURLBased]: (msg: RawSetNodeAttributeURLBased): RawSetNodeAttribute =>
({
...msg,
value: msg.name === 'src' || msg.name === 'href'
? resolveURL(msg.baseURL, msg.value)
: (msg.name === 'style'
? resolveCSS(msg.baseURL, msg.value)
: msg.value
),
tp: MType.SetNodeAttribute,
}),
[MType.SetCssDataURLBased]: (msg: RawSetCssDataURLBased): RawSetCssData =>
({
...msg,
data: resolveCSS(msg.baseURL, msg.data),
tp: MType.SetCssData,
}),
[MType.CssInsertRuleURLBased]: (msg: RawCssInsertRuleURLBased): RawCssInsertRule =>
({
...msg,
rule: resolveCSS(msg.baseURL, msg.rule),
tp: MType.CssInsertRule,
}),
[MType.AdoptedSsInsertRuleURLBased]: (msg: RawAdoptedSsInsertRuleURLBased): RawAdoptedSsInsertRule =>
({
...msg,
rule: resolveCSS(msg.baseURL, msg.rule),
tp: MType.AdoptedSsInsertRule,
}),
[MType.AdoptedSsReplaceURLBased]: (msg: RawAdoptedSsReplaceURLBased): RawAdoptedSsReplace =>
({
...msg,
text: resolveCSS(msg.baseURL, msg.text),
tp: MType.AdoptedSsReplace,
}),
} as const
type ResolvableType = keyof typeof resolvers
type ResolvableRawMessage = RawMessage & { tp: ResolvableType }
function isResolvable(msg: RawMessage): msg is ResolvableRawMessage {
//@ts-ignore
return resolvers[msg.tp] !== undefined
}
export default class JSONRawMessageReader {
constructor(private messages: TrackerMessage[] = []){}
append(messages: TrackerMessage[]) {
@ -91,11 +31,7 @@ export default class JSONRawMessageReader {
if (!rawMsg) {
return this.readMessage()
}
if (isResolvable(rawMsg)) {
//@ts-ignore ??? too complex typscript...
return resolvers[rawMsg.tp](rawMsg)
}
return rawMsg
return resolveURL(rawMsg)
}
}

View file

@ -3,6 +3,8 @@ import type { RawMessage } from './raw.gen';
import { MType } from './raw.gen';
import logger from 'App/logger';
import RawMessageReader from './RawMessageReader.gen';
import resolveURL from './urlBasedResolver'
// TODO: composition instead of inheritance
// needSkipMessage() and next() methods here use buf and p protected properties,
@ -77,7 +79,7 @@ export default class MFileReader extends RawMessageReader {
}
const index = this.getLastMessageID()
const msg = Object.assign(rMsg, {
const msg = Object.assign(resolveURL(rMsg), {
time: this.currentTime,
_index: index,
})

View file

@ -8,7 +8,7 @@ interface RawMessageReaderI {
}
export default class MStreamReader {
constructor(private readonly r: RawMessageReaderI = new RawMessageReader(), private startTs: number = 0){}
constructor(private readonly r: RawMessageReaderI, private startTs: number = 0){}
private t: number = 0
private idx: number = 0