@@ -2,12 +2,10 @@ import zarr from 'zarr-js'
22
33import { getPyramidMetadata } from './utils'
44
5- // return promises for all for consistency
6- const wrapGet = ( getFn ) => {
7- return ( chunkIndices ) =>
8- new Promise ( ( resolve , reject ) => {
9- getFn ( chunkIndices , ( err , out ) => ( err ? reject ( err ) : resolve ( out ) ) )
10- } )
5+ const createLoader = ( { callGet, variable } ) => {
6+ return {
7+ load : ( { level, chunk } ) => callGet ( `${ level } /${ variable } ` , chunk ) ,
8+ }
119}
1210
1311const initializeStore = async (
@@ -18,13 +16,13 @@ const initializeStore = async (
1816 metadataCache = { }
1917) => {
2018 let metadata
21- let loaders
2219 let dimensions
2320 let shape
2421 let chunks
2522 let fill_value
2623 let dtype
2724 let levels , maxZoom , tileSize , crs
25+ let loader
2826 const coordinates = { }
2927 const cacheKey = `${ source } -${ version } `
3028
@@ -85,15 +83,9 @@ const initializeStore = async (
8583 } )
8684 )
8785
88- loaders = { }
89- levels . forEach ( ( level ) => {
90- const key = `${ level } /${ variable } `
91- loaders [ key ] = ( chunkIndices ) => callGet ( key , chunkIndices )
92- } )
93-
94- coordinateKeys . forEach ( ( key ) => {
95- const coordKey = `${ levels [ 0 ] } /${ key } `
96- loaders [ coordKey ] = ( chunkIndices ) => callGet ( coordKey , chunkIndices )
86+ loader = createLoader ( {
87+ callGet,
88+ variable,
9789 } )
9890 } catch ( e ) {
9991 // Fallback to openGroup
@@ -130,9 +122,15 @@ const initializeStore = async (
130122 } )
131123 )
132124
133- loaders = { }
134- Object . keys ( rawLoaders ) . forEach ( ( key ) => {
135- loaders [ key ] = wrapGet ( rawLoaders [ key ] )
125+ loader = createLoader ( {
126+ callGet : ( key , chunkIndices ) =>
127+ new Promise ( ( resolve , reject ) => {
128+ rawLoaders [ key ] ( chunkIndices , ( err , out ) => {
129+ if ( err ) return reject ( err )
130+ resolve ( out )
131+ } )
132+ } ) ,
133+ variable,
136134 } )
137135 }
138136
@@ -191,16 +189,16 @@ const initializeStore = async (
191189 } )
192190 )
193191
194- loaders = { }
195- levels . forEach ( ( level ) => {
196- const key = ` ${ level } / ${ variable } `
197- const meta = level === 0 ? arrayMetadata : null
198- loaders [ key ] = ( chunkIndices ) => callGet ( key , chunkIndices , meta )
199- } )
192+ const getChunk = ( key , chunkIndices ) => {
193+ const meta = key . startsWith ( ` ${ levels [ 0 ] } / ${ variable } ` )
194+ ? arrayMetadata
195+ : null
196+ return callGet ( key , chunkIndices , meta )
197+ }
200198
201- coordinateKeys . forEach ( ( key ) => {
202- const coordKey = ` ${ levels [ 0 ] } / ${ key } `
203- loaders [ coordKey ] = ( chunkIndices ) => callGet ( coordKey , chunkIndices )
199+ loader = createLoader ( {
200+ callGet : getChunk ,
201+ variable ,
204202 } )
205203 break
206204 default :
@@ -211,7 +209,7 @@ const initializeStore = async (
211209
212210 return {
213211 metadata,
214- loaders ,
212+ loader ,
215213 dimensions,
216214 shape,
217215 chunks,
0 commit comments