Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | 1x 1x 1x 3x 3x 2x 1x 4x 1x 1x 1x 3x 1x 3x | import { Cache, MimeType, PipelineIO } from '../../lib'; /** * Called when a tracker detects a dependency on a resource. * @param resPath Path to the dependency. */ export type TrackerCallback = (resPath: string) => void; /** * Wrapper around {@link PipelineIO} that tracks read resources and logs them to a {@link TrackerCallback}. */ export class TrackingPipelineIO implements PipelineIO { private readonly realIO: PipelineIO; private readonly trackerCallback: TrackerCallback; constructor(realIO: PipelineIO, trackerCallback: TrackerCallback) { this.realIO = realIO; this.trackerCallback = trackerCallback; } get destinationPath(): string { return this.realIO.destinationPath; } get sourcePath(): string { return this.realIO.sourcePath; } async createResource(type: MimeType, contents: string): Promise<string> { return await this.realIO.createResource(type, contents); } async getResource(type: MimeType, resPath: string): Promise<string> { this.trackerCallback(resPath); return await this.realIO.getResource(type, resPath); } async writeResource(type: MimeType, resPath: string, contents: string): Promise<void> { await this.realIO.writeResource(type, resPath, contents); } createResPath(type: MimeType, contents: string): string { return this.realIO.createResPath(type, contents); } getDestinationResPathForAbsolutePath(rawResPath: string): string { return this.realIO.getDestinationResPathForAbsolutePath(rawResPath); } getSourceResPathForAbsolutePath(rawResPath: string): string { return this.realIO.getSourceResPathForAbsolutePath(rawResPath); } resolveDestinationResource(resPath: string): string { return this.realIO.resolveDestinationResource(resPath); } resolveSourceResource(resPath: string): string { return this.realIO.resolveSourceResource(resPath); } } /** * Wrapper around {@link Cache} that tracks accessed keys and logs them to a {@link TrackerCallback}. * This implementation can be used with any Cache that uses string keys, * but semantically it should only be used for caches where the key is a resource path. */ export class TrackingCache<TKey> implements Cache<string, TKey> { private readonly realCache: Cache<string, TKey>; private readonly trackerCallback: TrackerCallback; constructor(realCache: Cache<string, TKey>, trackerCallback: TrackerCallback) { this.realCache = realCache; this.trackerCallback = trackerCallback; } clear(): void { this.realCache.clear(); } get(resPath: string): TKey { this.trackerCallback(resPath); return this.realCache.get(resPath); } has(resPath: string): boolean { return this.realCache.has(resPath); } remove(resPath: string): void { this.realCache.remove(resPath); } store(resPath: string, fragment: TKey): void { this.realCache.store(resPath, fragment); } } |