From d081873ca5615e8d06c7ab54e26c9449eb3d4092 Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Mon, 12 Dec 2022 17:50:59 +0100 Subject: [PATCH] fixup! feat(frontend/player):use resolver for urlBased message both in FileReader and JSONReader in live-sessions --- .../player/web/messages/urlBasedResolver.ts | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 frontend/app/player/web/messages/urlBasedResolver.ts diff --git a/frontend/app/player/web/messages/urlBasedResolver.ts b/frontend/app/player/web/messages/urlBasedResolver.ts new file mode 100644 index 000000000..53bf1ed81 --- /dev/null +++ b/frontend/app/player/web/messages/urlBasedResolver.ts @@ -0,0 +1,69 @@ +import type { + RawMessage, + RawSetNodeAttributeURLBased, + RawSetNodeAttribute, + RawSetCssDataURLBased, + RawSetCssData, + RawCssInsertRuleURLBased, + RawCssInsertRule, + RawAdoptedSsInsertRuleURLBased, + RawAdoptedSsInsertRule, + RawAdoptedSsReplaceURLBased, + RawAdoptedSsReplace, +} from './raw.gen' +import { MType } from './raw.gen' +import { resolveURL, resolveCSS } from './urlResolve' + +// type PickMessage = Extract; +// type ResolversMap = { +// [Key in MType]: (event: PickMessage) => RawMessage +// } + +// 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 + + +export default function resolve(msg: RawMessage): RawMessage { + // @ts-ignore --- any idea? + if (resolvers[msg.tp]) { + // @ts-ignore + return resolvers[msg.tp](msg) + } + return msg +} \ No newline at end of file