UNPKG

chrome-devtools-frontend

Version:
54 lines (44 loc) 1.99 kB
// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import type * as Common from '../../core/common/common.js'; import type * as Platform from '../../core/platform/platform.js'; import {type ContentProvider, type DeferredContent, type SearchMatch} from './ContentProvider.js'; import {performSearchInContent} from './TextUtils.js'; export class StaticContentProvider implements ContentProvider { private readonly contentURLInternal: Platform.DevToolsPath.UrlString; private readonly contentTypeInternal: Common.ResourceType.ResourceType; private readonly lazyContent: () => Promise<DeferredContent>; constructor( contentURL: Platform.DevToolsPath.UrlString, contentType: Common.ResourceType.ResourceType, lazyContent: () => Promise<DeferredContent>) { this.contentURLInternal = contentURL; this.contentTypeInternal = contentType; this.lazyContent = lazyContent; } static fromString( contentURL: Platform.DevToolsPath.UrlString, contentType: Common.ResourceType.ResourceType, content: string): StaticContentProvider { const lazyContent = (): Promise<{ content: string, isEncoded: boolean, }> => Promise.resolve({content, isEncoded: false}); return new StaticContentProvider(contentURL, contentType, lazyContent); } contentURL(): Platform.DevToolsPath.UrlString { return this.contentURLInternal; } contentType(): Common.ResourceType.ResourceType { return this.contentTypeInternal; } requestContent(): Promise<DeferredContent> { return this.lazyContent(); } async searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<SearchMatch[]> { const {content} = (await this.lazyContent() as { content: string, isEncoded: boolean, }); return content ? performSearchInContent(content, query, caseSensitive, isRegex) : []; } }