1- import { mkdir , writeFile } from 'node:fs/promises'
1+ import { mkdir , rm , writeFile } from 'node:fs/promises'
2+ import { createReadStream } from 'node:fs'
23import { join , relative } from 'node:path'
3- import { ensureArtefact , ensureArtefactFile } from '@data-fair/lib-node-registry'
4+ import { ensureArtefactFile , extractTarball } from '@data-fair/lib-node-registry'
45import config from '#config'
56import log from '#log'
67import { listArtefacts , type Artefact } from './registry-client.ts'
@@ -34,17 +35,19 @@ export const buildTileserverConfig = async (): Promise<TileserverConfig> => {
3435 root : config . dataDir ,
3536 mbtiles : join ( cacheRoot , 'tilesets' ) ,
3637 styles : join ( cacheRoot , 'styles' ) ,
37- fonts : join ( cacheRoot , 'fonts' ) ,
38+ fonts : config . fontsDir ,
3839 sprites : join ( cacheRoot , 'sprites' )
3940 }
40- for ( const d of Object . values ( dirs ) ) await mkdir ( d , { recursive : true } )
41+ for ( const d of [ dirs . root , dirs . mbtiles , dirs . styles , dirs . sprites ] ) await mkdir ( d , { recursive : true } )
42+ const styleTarballs = join ( cacheRoot , 'style-tarballs' )
43+ await mkdir ( styleTarballs , { recursive : true } )
4144
4245 log . info ( 'listing tilesets from registry...' )
4346 const tilesets = await listArtefacts ( { category : 'tileset' , format : 'file' } )
4447 log . info ( `found ${ tilesets . length } tilesets` )
4548
4649 log . info ( 'listing styles from registry...' )
47- const styles = await listArtefacts ( { category : 'maplibre-style' } )
50+ const styles = await listArtefacts ( { category : 'maplibre-style' , format : 'file' } )
4851 log . info ( `found ${ styles . length } styles` )
4952
5053 const data : TileserverConfig [ 'data' ] = { }
@@ -66,13 +69,20 @@ export const buildTileserverConfig = async (): Promise<TileserverConfig> => {
6669 const stylesCfg : TileserverConfig [ 'styles' ] = { }
6770 for ( const s of styles ) {
6871 log . info ( `ensuring style ${ s . _id } ...` )
69- const { path : styleDir } = await ensureArtefact ( {
72+ const { path : tarballPath , downloaded } = await ensureArtefactFile ( {
7073 registryUrl : config . registryUrl ,
7174 secretKey : config . registrySecret ,
7275 artefactId : s . _id ,
73- version : 'latest' ,
74- cacheDir : dirs . styles
76+ cacheDir : styleTarballs ,
77+ fileName : ` ${ s . _id } .tgz`
7578 } )
79+ const styleDir = join ( dirs . styles , s . _id )
80+ if ( downloaded ) {
81+ log . info ( `style ${ s . _id } downloaded, extracting...` )
82+ await rm ( styleDir , { recursive : true , force : true } )
83+ await mkdir ( styleDir , { recursive : true } )
84+ await extractTarball ( createReadStream ( tarballPath ) , styleDir )
85+ }
7686 const styleName = stylePackageName ( s )
7787 await normalizeStyle ( { styleDir, styleName, tilesetIds } )
7888 const rel = relative ( dirs . styles , join ( styleDir , 'style.json' ) )
0 commit comments