init in loadTrace
This commit is contained in:
parent
92bbb2e3df
commit
115b5ff89b
|
|
@ -36,13 +36,21 @@ const scopePath = new URL(self.registration.scope).pathname;
|
|||
|
||||
const loadedTraces = new Map<string, { traceModel: TraceModel, snapshotServer: SnapshotServer }>();
|
||||
|
||||
const clientIdToTraceUrls = new Map<string, { limit: number | undefined, traceUrls: Set<string> }>();
|
||||
const clientIdToTraceUrls = new Map<string, { limit: number | undefined, traceUrls: Set<string>, traceViewerServer: TraceViewerServer }>();
|
||||
|
||||
async function loadTrace(traceUrl: string, traceFileName: string | null, clientId: string, traceViewerServer: TraceViewerServer, limit: number | undefined, progress: (done: number, total: number) => undefined): Promise<TraceModel> {
|
||||
async function loadTrace(traceUrl: string, traceFileName: string | null, client: any | undefined, limit: number | undefined, progress: (done: number, total: number) => undefined): Promise<TraceModel> {
|
||||
await gc();
|
||||
const clientId = client?.id ?? '';
|
||||
let data = clientIdToTraceUrls.get(clientId);
|
||||
if (!data) {
|
||||
data = { limit, traceUrls: new Set() };
|
||||
let traceViewerServerBaseUrl = self.registration.scope;
|
||||
if (client?.url) {
|
||||
const clientUrl = new URL(client.url);
|
||||
if (clientUrl.searchParams.has('server'))
|
||||
traceViewerServerBaseUrl = clientUrl.searchParams.get('server')!;
|
||||
}
|
||||
|
||||
data = { limit, traceUrls: new Set(), traceViewerServer: new TraceViewerServer(traceViewerServerBaseUrl) };
|
||||
clientIdToTraceUrls.set(clientId, data);
|
||||
}
|
||||
data.traceUrls.add(traceUrl);
|
||||
|
|
@ -51,7 +59,7 @@ async function loadTrace(traceUrl: string, traceFileName: string | null, clientI
|
|||
try {
|
||||
// Allow 10% to hop from sw to page.
|
||||
const [fetchProgress, unzipProgress] = splitProgress(progress, [0.5, 0.4, 0.1]);
|
||||
const backend = traceUrl.endsWith('json') ? new FetchTraceModelBackend(traceUrl, traceViewerServer) : new ZipTraceModelBackend(traceUrl, traceViewerServer, fetchProgress);
|
||||
const backend = traceUrl.endsWith('json') ? new FetchTraceModelBackend(traceUrl, data.traceViewerServer) : new ZipTraceModelBackend(traceUrl, data.traceViewerServer, fetchProgress);
|
||||
await traceModel.load(backend, unzipProgress);
|
||||
} catch (error: any) {
|
||||
// eslint-disable-next-line no-console
|
||||
|
|
@ -69,22 +77,6 @@ async function loadTrace(traceUrl: string, traceFileName: string | null, clientI
|
|||
return traceModel;
|
||||
}
|
||||
|
||||
const traceViewerServers = new Map<string, TraceViewerServer>();
|
||||
|
||||
function getTraceViewerServer(client?: any): TraceViewerServer {
|
||||
let traceViewerServerBaseUrl = self.registration.scope;
|
||||
if (client?.url) {
|
||||
const clientUrl = new URL(client.url);
|
||||
if (clientUrl.searchParams.has('server'))
|
||||
traceViewerServerBaseUrl = clientUrl.searchParams.get('server')!;
|
||||
}
|
||||
|
||||
if (!traceViewerServers.has(traceViewerServerBaseUrl))
|
||||
traceViewerServers.set(traceViewerServerBaseUrl, new TraceViewerServer(traceViewerServerBaseUrl));
|
||||
|
||||
return traceViewerServers.get(traceViewerServerBaseUrl)!;
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
async function doFetch(event: FetchEvent): Promise<Response> {
|
||||
// In order to make Accessibility Insights for Web work.
|
||||
|
|
@ -93,7 +85,6 @@ async function doFetch(event: FetchEvent): Promise<Response> {
|
|||
|
||||
const request = event.request;
|
||||
const client = await self.clients.get(event.clientId);
|
||||
const traceViewerServer = getTraceViewerServer(client);
|
||||
|
||||
// When trace viewer is deployed over https, we will force upgrade
|
||||
// insecure http subresources to https. Otherwise, these will fail
|
||||
|
|
@ -115,7 +106,7 @@ async function doFetch(event: FetchEvent): Promise<Response> {
|
|||
if (relativePath === '/contexts') {
|
||||
try {
|
||||
const limit = url.searchParams.has('limit') ? +url.searchParams.get('limit')! : undefined;
|
||||
const traceModel = await loadTrace(traceUrl!, url.searchParams.get('traceFileName'), event.clientId, traceViewerServer, limit, (done: number, total: number) => {
|
||||
const traceModel = await loadTrace(traceUrl!, url.searchParams.get('traceFileName'), client, limit, (done: number, total: number) => {
|
||||
client.postMessage({ method: 'progress', params: { done, total } });
|
||||
});
|
||||
return new Response(JSON.stringify(traceModel!.contextEntries), {
|
||||
|
|
@ -167,6 +158,9 @@ async function doFetch(event: FetchEvent): Promise<Response> {
|
|||
|
||||
if (relativePath.startsWith('/file/')) {
|
||||
const path = url.searchParams.get('path')!;
|
||||
const traceViewerServer = clientIdToTraceUrls.get(event.clientId ?? '')?.traceViewerServer;
|
||||
if (!traceViewerServer)
|
||||
throw new Error('client is not initialized');
|
||||
const response = await traceViewerServer.readFile(path);
|
||||
if (!response)
|
||||
return new Response(null, { status: 404 });
|
||||
|
|
|
|||
Loading…
Reference in a new issue