Skip to content

Commit 5b5ffa7

Browse files
committed
🐛 pr-feedback: replace implementation code with a function
1 parent fb7dc9c commit 5b5ffa7

File tree

4 files changed

+37
-41
lines changed

4 files changed

+37
-41
lines changed

test/e2e/lib/framework/createTest.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class TestBuilder {
5858
logsConfiguration?: LogsInitConfiguration
5959
} = {}
6060
private hostName?: string
61-
private workerImplementationFactory?: (setup: string) => string
61+
private workerImplementationFactory?: WorkerImplementationFactory
6262

6363
constructor(private title: string) {}
6464

@@ -130,18 +130,16 @@ class TestBuilder {
130130
return this
131131
}
132132

133-
withWorker(implementation: WorkerImplementationFactory, isModule = false) {
134-
implementation.isModule = isModule
133+
withWorker(implementation: WorkerImplementationFactory, options: RegistrationOptions = {}) {
134+
implementation.isModule = options.type === 'module'
135135
this.workerImplementationFactory = implementation
136136

137-
const options = isModule ? '{ type: "module" }' : '{}'
138-
139137
// Service workers require HTTPS or localhost due to browser security restrictions
140138
this.withHostName('localhost')
141139
this.withBody(html`
142140
<script>
143141
if (!window.myServiceWorker && 'serviceWorker' in navigator) {
144-
navigator.serviceWorker.register('/sw.js', ${options}).then((registration) => {
142+
navigator.serviceWorker.register('/sw.js', ${JSON.stringify(options)}).then((registration) => {
145143
window.myServiceWorker = registration
146144
})
147145
}

test/e2e/lib/framework/pageSetups.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
import { stripTypeScriptTypes } from 'node:module'
12
import { generateUUID, INTAKE_URL_PARAMETERS } from '@datadog/browser-core'
2-
import type { LogsInitConfiguration } from '@datadog/browser-logs'
3+
import type { LogsInitConfiguration, DatadogLogs } from '@datadog/browser-logs'
34
import type { RumInitConfiguration, RemoteConfiguration } from '@datadog/browser-rum-core'
5+
import type { DatadogRum } from '@datadog/browser-rum'
46
import type test from '@playwright/test'
57
import { DEFAULT_LOGS_CONFIGURATION } from '../helpers/configuration'
68
import { isBrowserStack, isContinuousIntegration } from './environment'
79
import type { Servers } from './httpServers'
810

911
export interface WorkerImplementationFactory {
10-
(setup: string): string
12+
(self: WorkerGlobalScope & { DD_LOGS: DatadogLogs; DD_RUM: DatadogRum }): void
1113
isModule?: boolean
1214
}
1315
export interface SetupOptions {
@@ -230,7 +232,9 @@ export function workerSetup(options: SetupOptions, servers: Servers) {
230232
`
231233
}
232234

233-
return options.workerImplementation(script)
235+
script += `;(${options.workerImplementation.toString()})(self);`
236+
237+
return script
234238
}
235239

236240
export function basePage({ header, body }: { header?: string; body?: string }) {

test/e2e/scenario/logs.scenario.ts

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT } from '@datadog/browser-logs/cjs/domain/configuration'
22
import { test, expect } from '@playwright/test'
3-
import { createTest, js } from '../lib/framework'
3+
import { createTest } from '../lib/framework'
44
import { APPLICATION_ID } from '../lib/helpers/configuration'
55

66
const UNREACHABLE_URL = 'http://localhost:9999/unreachable'
@@ -15,18 +15,14 @@ test.describe('logs', () => {
1515
createTest('service worker with worker logs - esm')
1616
.withLogs()
1717
.withWorker(
18-
(setup) => js`
19-
// Initialize DD_LOGS in service worker
20-
${setup}
21-
22-
// Handle messages from main thread
18+
function (self) {
2319
self.addEventListener('message', (event) => {
24-
const message = event.data;
20+
const message = (event as MessageEvent<string>).data
2521

26-
DD_LOGS.logger.log(message);
27-
});
28-
`,
29-
true
22+
self.DD_LOGS.logger.log(message)
23+
})
24+
},
25+
{ type: 'module' }
3026
)
3127
.run(async ({ flushEvents, intakeRegistry, browserName, interactWithWorker }) => {
3228
test.skip(browserName !== 'chromium', 'Non-Chromium browsers do not support ES modules in Service Workers')
@@ -43,19 +39,13 @@ test.describe('logs', () => {
4339

4440
createTest('service worker with worker logs - importScripts')
4541
.withLogs()
46-
.withWorker(
47-
(setup) => js`
48-
// Initialize DD_LOGS in service worker
49-
${setup}
50-
51-
// Handle messages from main thread
52-
self.addEventListener('message', (event) => {
53-
const message = event.data;
42+
.withWorker(function (self) {
43+
self.addEventListener('message', (event) => {
44+
const message = (event as MessageEvent<string>).data
5445

55-
DD_LOGS.logger.log(message);
56-
});
57-
`
58-
)
46+
self.DD_LOGS.logger.log(message)
47+
})
48+
})
5949
.run(async ({ flushEvents, intakeRegistry, browserName, interactWithWorker }) => {
6050
test.skip(
6151
browserName === 'webkit',
@@ -74,20 +64,23 @@ test.describe('logs', () => {
7464

7565
createTest('service worker console forwarding')
7666
.withLogs({ forwardConsoleLogs: 'all', forwardErrorsToLogs: true })
77-
.withWorker(
78-
(setup) => js`
79-
// Initialize DD_LOGS in service worker
80-
${setup}
81-
82-
console.log('SW console log test');
83-
`
84-
)
85-
.run(async ({ flushEvents, intakeRegistry, browserName }) => {
67+
.withWorker(function (self) {
68+
self.addEventListener('message', (event) => {
69+
const message = (event as MessageEvent<string>).data
70+
71+
console.log(message)
72+
})
73+
})
74+
.run(async ({ flushEvents, intakeRegistry, interactWithWorker, browserName }) => {
8675
test.skip(
8776
browserName === 'webkit',
8877
'BrowserStack overrides the localhost URL with bs-local.com and cannot be used to install a Service Worker'
8978
)
9079

80+
await interactWithWorker((worker) => {
81+
worker.postMessage('SW console log test')
82+
})
83+
9184
await flushEvents()
9285

9386
// Expect logs for console, error, and report events from service worker

test/e2e/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"target": "ES2022",
1111
"module": "ES2020",
1212
"types": ["node", "ajv"],
13+
"lib": ["WebWorker"],
1314
"allowJs": true,
1415
"noEmit": true
1516
}

0 commit comments

Comments
 (0)