@@ -4,13 +4,12 @@ import {getArrayBuffer} from '../util/ajax';
44
55import type { Callback } from '../types/callback' ;
66import type { WorkerSourceVectorTileRequest } from './worker_source' ;
7- import type Scheduler from '../util/scheduler' ;
7+ import type { default as Scheduler , TaskMetadata } from '../util/scheduler' ;
88
99export type LoadVectorTileResult = {
1010 rawData : ArrayBuffer ;
1111 vectorTile ?: VectorTile ;
12- resourceTiming ?: Array < PerformanceResourceTiming > ;
13- responseHeaders ?: Map < string , string >
12+ responseHeaders ?: Map < string , string > ;
1413} ;
1514
1615/**
@@ -21,61 +20,52 @@ export type LoadVectorTileResult = {
2120 */
2221export type LoadVectorDataCallback = Callback < LoadVectorTileResult | null | undefined > ;
2322
24- export type AbortVectorData = ( ) => void ;
25- export type LoadVectorData = ( params : WorkerSourceVectorTileRequest , callback : LoadVectorDataCallback ) => AbortVectorData | undefined ;
23+ export type LoadVectorData = ( params : WorkerSourceVectorTileRequest , callback : LoadVectorDataCallback ) => AbortVectorDataRequest | undefined ;
24+
25+ type VectorDataRequest = ( callback : LoadVectorDataCallback ) => AbortVectorDataRequest ;
26+ type AbortVectorDataRequest = ( ) => void ;
27+
28+ type DedupedRequestEntry = {
29+ result ?: [ Error | null , LoadVectorTileResult ] ;
30+ cancel ?: AbortVectorDataRequest ;
31+ callbacks ?: LoadVectorDataCallback [ ] ;
32+ } ;
33+
2634export class DedupedRequest {
27- entries : {
28- // eslint-disable-next-line @typescript-eslint/no-explicit-any
29- [ key : string ] : any ;
30- } ;
31- scheduler : Scheduler | null | undefined ;
35+ scheduler ?: Scheduler ;
36+ entries : { [ key : string ] : DedupedRequestEntry ; } ;
3237
3338 constructor ( scheduler ?: Scheduler ) {
3439 this . entries = { } ;
3540 this . scheduler = scheduler ;
3641 }
3742
38- // eslint-disable-next-line @typescript-eslint/no-explicit-any
39- request ( key : string , metadata : any , request : any , callback : LoadVectorDataCallback ) : ( ) => void {
40- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
43+ request ( key : string , metadata : TaskMetadata , request : VectorDataRequest , callback : LoadVectorDataCallback ) : AbortVectorDataRequest {
4144 const entry = this . entries [ key ] = this . entries [ key ] || { callbacks : [ ] } ;
4245
43- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
4446 if ( entry . result ) {
45- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
4647 const [ err , result ] = entry . result ;
4748 if ( this . scheduler ) {
4849 this . scheduler . add ( ( ) => {
49- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
5050 callback ( err , result ) ;
51- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
5251 } , metadata ) ;
5352 } else {
54- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
5553 callback ( err , result ) ;
5654 }
5755 return ( ) => { } ;
5856 }
5957
60- // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
6158 entry . callbacks . push ( callback ) ;
6259
63- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
6460 if ( ! entry . cancel ) {
65- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
66- entry . cancel = request ( ( err , result ) => {
67- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
61+ entry . cancel = request ( ( err : Error , result : LoadVectorTileResult ) => {
6862 entry . result = [ err , result ] ;
69- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
7063 for ( const cb of entry . callbacks ) {
7164 if ( this . scheduler ) {
7265 this . scheduler . add ( ( ) => {
73- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
7466 cb ( err , result ) ;
75- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
7667 } , metadata ) ;
7768 } else {
78- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
7969 cb ( err , result ) ;
8070 }
8171 }
@@ -84,13 +74,9 @@ export class DedupedRequest {
8474 }
8575
8676 return ( ) => {
87- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
8877 if ( entry . result ) return ;
89- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
9078 entry . callbacks = entry . callbacks . filter ( cb => cb !== callback ) ;
91- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
9279 if ( ! entry . callbacks . length ) {
93- // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
9480 entry . cancel ( ) ;
9581 delete this . entries [ key ] ;
9682 }
@@ -102,20 +88,21 @@ export class DedupedRequest {
10288 * @private
10389 */
10490export function loadVectorTile (
91+ this : { deduped : DedupedRequest } ,
10592 params : WorkerSourceVectorTileRequest ,
10693 callback : LoadVectorDataCallback ,
10794 skipParse ?: boolean ,
108- ) : ( ) => void {
95+ ) : AbortVectorDataRequest {
10996 const key = JSON . stringify ( params . request ) ;
11097
111- const makeRequest = ( callback : LoadVectorDataCallback ) => {
98+ const makeRequest : VectorDataRequest = ( callback : LoadVectorDataCallback ) => {
11299 const request = getArrayBuffer ( params . request , ( err ?: Error | null , data ?: ArrayBuffer | null , responseHeaders ?: Headers ) => {
113100 if ( err ) {
114101 callback ( err ) ;
115102 } else if ( data ) {
116103 callback ( null , {
117- vectorTile : skipParse ? undefined : new VectorTile ( new Protobuf ( data ) ) ,
118104 rawData : data ,
105+ vectorTile : skipParse ? undefined : new VectorTile ( new Protobuf ( data ) ) ,
119106 responseHeaders : new Map ( responseHeaders . entries ( ) )
120107 } ) ;
121108 }
@@ -128,11 +115,9 @@ export function loadVectorTile(
128115
129116 if ( params . data ) {
130117 // if we already got the result earlier (on the main thread), return it directly
131- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
132- ( this . deduped as DedupedRequest ) . entries [ key ] = { result : [ null , params . data ] } ;
118+ this . deduped . entries [ key ] = { result : [ null , params . data ] } ;
133119 }
134120
135- const callbackMetadata = { type : 'parseTile' , isSymbolTile : params . isSymbolTile , zoom : params . tileZoom } ;
136- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
137- return ( this . deduped as DedupedRequest ) . request ( key , callbackMetadata , makeRequest , callback ) ;
121+ const callbackMetadata : TaskMetadata = { type : 'parseTile' , isSymbolTile : params . isSymbolTile , zoom : params . tileZoom } ;
122+ return this . deduped . request ( key , callbackMetadata , makeRequest , callback ) ;
138123}
0 commit comments