tracker: 16.2.1, rename inliner options for clarity

This commit is contained in:
nick-delirium 2025-04-28 16:59:21 +02:00 committed by Delirium
parent 69b8e2e774
commit e4d75467ef
3 changed files with 57 additions and 66 deletions

View file

@ -41,20 +41,12 @@ import type { Options as SessOptions } from './session.js'
import Session from './session.js'
import Ticker from './ticker.js'
import { MaintainerOptions } from './nodes/maintainer.js'
export { InlineCssMode } from './observer/top_observer.js'
interface TypedWorker extends Omit<Worker, 'postMessage'> {
postMessage(data: ToWorkerData): void
}
interface InlineOptions {
inlineRemoteCss: boolean
inlinerOptions: {
forceFetch: boolean,
forcePlain: boolean
,
},
}
// TODO: Unify and clearly describe options logic
export interface StartOptions {
userID?: string
@ -216,44 +208,6 @@ function getTimezone() {
}
const delay = (ms: number) => new Promise((res) => setTimeout(res, ms))
function getInlineOptions(mode: InlineCssMode): InlineOptions {
switch (mode) {
case InlineCssMode.RemoteOnly:
return {
inlineRemoteCss: true,
inlinerOptions: {
forceFetch: false,
forcePlain: false,
},
}
case InlineCssMode.RemoteWithForceFetch:
return {
inlineRemoteCss: true,
inlinerOptions: {
forceFetch: true,
forcePlain: false,
},
};
case InlineCssMode.All:
return {
inlineRemoteCss: true,
inlinerOptions: {
forceFetch: true,
forcePlain: true,
},
};
case InlineCssMode.None:
default:
return {
inlineRemoteCss: false,
inlinerOptions: {
forceFetch: false,
forcePlain: false,
},
};
}
}
const proto = {
// ask if there are any tabs alive
ask: 'never-gonna-give-you-up',
@ -293,7 +247,7 @@ export default class App {
private readonly startCallbacks: Array<StartCallback> = []
private readonly stopCallbacks: Array<() => any> = []
private readonly commitCallbacks: Array<CommitCallback> = []
public readonly options: AppOptions
public readonly options: Options
public readonly networkOptions?: NetworkOptions
private readonly revID: string
private activityState: ActivityState = ActivityState.NotActive
@ -305,7 +259,7 @@ export default class App {
public socketMode = false
private compressionThreshold = 24 * 1000
private readonly bc: BroadcastChannel | null = null
private readonly contextId
private readonly contextId: string
private canvasRecorder: CanvasRecorder | null = null
private uxtManager: UserTestManager
private conditionsManager: ConditionsManager | null = null
@ -320,13 +274,6 @@ export default class App {
'usability-test': true,
}
private emptyBatchCounter = 0
private inlineCss: {
inlineRemoteCss: boolean
inlinerOptions: {
forceFetch: boolean
forcePlain: boolean
}
}
constructor(
projectKey: string,
@ -338,8 +285,6 @@ export default class App {
this.contextId = Math.random().toString(36).slice(2)
this.projectKey = projectKey
this.inlineCss = getInlineOptions(options.inlineCss ?? 0)
if (
Object.keys(options).findIndex((k) => ['fixedCanvasScaling', 'disableCanvas'].includes(k)) !==
-1
@ -419,7 +364,7 @@ export default class App {
forceNgOff: Boolean(options.forceNgOff),
maintainer: this.options.nodes?.maintainer,
})
this.observer = new Observer({ app: this, options: { ...options, ...this.inlineCss } })
this.observer = new Observer({ app: this, options })
this.ticker = new Ticker(this)
this.ticker.attach(() => this.commit())
this.debug = new Logger(this.options.__debug__)

View file

@ -185,8 +185,8 @@ enum RecentsType {
}
interface Options {
inlineRemoteCss?: boolean,
disableSprites?: boolean,
inlineRemoteCss?: boolean,
inlinerOptions?: {
forceFetch?: boolean,
forcePlain?: boolean,

View file

@ -10,10 +10,52 @@ import App from '../index.js'
import { IN_BROWSER, hasOpenreplayAttribute, canAccessIframe } from '../../utils.js'
export enum InlineCssMode {
None = 0,
RemoteOnly = 1,
RemoteWithForceFetch = 2,
All = 3,
/** default behavior -- will parse and cache the css file on backend */
Disabled = 0,
/** will attempt to record the linked css file as AdoptedStyleSheet object */
Inline = 1,
/** will fetch the file, then simulated AdoptedStyleSheets behavior programmaticaly for the replay */
InlineFetched = 2,
/** will fetch the file, then save it as plain css inside <style> node */
PlainFetched = 3,
}
function getInlineOptions(mode: InlineCssMode) {
switch (mode) {
case InlineCssMode.Inline:
return {
inlineRemoteCss: true,
inlinerOptions: {
forceFetch: false,
forcePlain: false,
},
}
case InlineCssMode.InlineFetched:
return {
inlineRemoteCss: true,
inlinerOptions: {
forceFetch: true,
forcePlain: false,
},
};
case InlineCssMode.PlainFetched:
return {
inlineRemoteCss: true,
inlinerOptions: {
forceFetch: true,
forcePlain: true,
},
};
case InlineCssMode.Disabled:
default:
return {
inlineRemoteCss: false,
inlinerOptions: {
forceFetch: false,
forcePlain: false,
},
};
}
}
export interface Options {
@ -24,7 +66,7 @@ export interface Options {
* we will try to parse the css text instead and send it as css rules set
* can (and probably will) affect performance to certain degree,
* especially if the css itself is crossdomain
* @default false
* @default InlineCssMode.None = 0
* */
inlineCss: InlineCssMode;
}
@ -48,7 +90,11 @@ export default class TopObserver extends Observer {
},
params.options,
)
super(params.app, true, opts)
const observerOptions = {
disableSprites: opts.disableSprites,
...getInlineOptions(opts.inlineCss)
}
super(params.app, true, observerOptions)
this.app = params.app
this.options = opts
// IFrames