@@ -17,45 +17,71 @@ const compressionPipes = require('./compression-pipes.js');
1717const VECTORMAP_UTILS_PATH = 'js/viz/vector_map.utils' ;
1818const VECTORMAP_UTILS_RESULT_PATH = path . join ( context . RESULT_JS_PATH , 'vectormap-utils' ) ;
1919const VECTORMAP_DATA_RESULT_PATH = path . join ( context . RESULT_JS_PATH , 'vectormap-data' ) ;
20+ const VECTORMAP_SOURCES_PATH = 'build/vectormap-sources' ;
2021
2122function transformFileName ( fileName ) {
2223 return path . join ( VECTORMAP_UTILS_PATH , fileName ) + '.js' ;
2324}
2425
2526gulp . task ( 'vectormap-utils' , function ( ) {
2627 return merge (
27- createVectorMapUtilsStream ( 'browser' , '.debug' , false ) ,
28- createVectorMapUtilsStream ( 'browser' , '' , true ) ,
29- createVectorMapUtilsStream ( 'node' , '' , false )
28+ createBrowserVectorMapUtilsStream ( '.debug' , false ) ,
29+ createBrowserVectorMapUtilsStream ( '' , true ) ,
3030 ) ;
3131} ) ;
3232
33- gulp . task ( 'vectormap-data' , gulp . series ( 'vectormap-utils' , function ( ) {
34- const stream = merge ( ) ;
35- const processFiles = require ( path . join ( '../..' , VECTORMAP_UTILS_RESULT_PATH , 'dx.vectormaputils.node.js' ) ) . processFiles ;
33+ function toArrayBuffer ( buffer ) {
34+ return buffer . buffer . slice ( buffer . byteOffset , buffer . byteOffset + buffer . byteLength ) ;
35+ }
36+
37+ function collectShpFiles ( dir ) {
38+ return fs . readdirSync ( dir )
39+ . filter ( name => path . extname ( name ) . toLowerCase ( ) === '.shp' )
40+ . map ( name => path . basename ( name , '.shp' ) ) ;
41+ }
42+
43+ gulp . task ( 'vectormap-data' , gulp . series ( 'vectormap-utils' , function generateData ( ) {
44+ const parse = require ( path . join ( '../..' , VECTORMAP_UTILS_RESULT_PATH , 'dx.vectormaputils.debug.js' ) ) . parse ;
45+ const settings = require ( path . join ( '../..' , VECTORMAP_SOURCES_PATH , '_settings.js' ) ) ;
46+ const precision = settings . precision >= 0 ? Math . round ( settings . precision ) : 4 ;
3647
3748 if ( ! fs . existsSync ( VECTORMAP_DATA_RESULT_PATH ) ) {
3849 fs . mkdirSync ( VECTORMAP_DATA_RESULT_PATH ) ;
3950 }
4051
41- processFiles ( 'build/vectormap-sources' , {
42- output : VECTORMAP_DATA_RESULT_PATH ,
43- settings : 'build/vectormap-sources/_settings.js'
44- } , function ( ) {
45- const files = fs . readdirSync ( VECTORMAP_DATA_RESULT_PATH ) ;
46-
47- files . forEach ( file => {
48- const data = fs . readFileSync ( path . join ( VECTORMAP_DATA_RESULT_PATH , file ) , 'utf8' ) ;
49-
50- stream . add (
51- gulp . src ( 'build/gulp/vectormapdata-template.jst' )
52- . pipe ( template ( { data : data } ) )
53- . pipe ( rename ( file ) )
54- . pipe ( headerPipes . useStrict ( ) )
55- . pipe ( gulp . dest ( VECTORMAP_DATA_RESULT_PATH ) )
56- ) ;
57- } ) ;
52+ const sourceDir = path . resolve ( VECTORMAP_SOURCES_PATH ) ;
53+ const files = collectShpFiles ( sourceDir ) ;
54+
55+ files . forEach ( name => {
56+ const shpBuffer = fs . readFileSync ( path . join ( sourceDir , name + '.shp' ) ) ;
57+ const dbfBuffer = fs . readFileSync ( path . join ( sourceDir , name + '.dbf' ) ) ;
58+
59+ const shapeData = parse (
60+ { shp : toArrayBuffer ( shpBuffer ) , dbf : toArrayBuffer ( dbfBuffer ) } ,
61+ { precision } ,
62+ ) ;
63+
64+ if ( shapeData ) {
65+ const content = name + ' = ' + JSON . stringify ( shapeData ) + ';' ;
66+ fs . writeFileSync ( path . join ( VECTORMAP_DATA_RESULT_PATH , name + '.js' ) , content ) ;
67+ }
5868 } ) ;
69+
70+ const stream = merge ( ) ;
71+ const dataFiles = fs . readdirSync ( VECTORMAP_DATA_RESULT_PATH ) ;
72+
73+ dataFiles . forEach ( file => {
74+ const data = fs . readFileSync ( path . join ( VECTORMAP_DATA_RESULT_PATH , file ) , 'utf8' ) ;
75+
76+ stream . add (
77+ gulp . src ( 'build/gulp/vectormapdata-template.jst' )
78+ . pipe ( template ( { data : data } ) )
79+ . pipe ( rename ( file ) )
80+ . pipe ( headerPipes . useStrict ( ) )
81+ . pipe ( gulp . dest ( VECTORMAP_DATA_RESULT_PATH ) )
82+ ) ;
83+ } ) ;
84+
5985 return stream ;
6086} ) ) ;
6187
@@ -67,20 +93,17 @@ function patchVectorMapUtilsStream(stream, isMinify) {
6793 . pipe ( gulp . dest ( VECTORMAP_UTILS_RESULT_PATH ) ) ;
6894}
6995
70- function createVectorMapUtilsStream ( name , suffix , isMinify ) {
96+ function createBrowserVectorMapUtilsStream ( suffix , isMinify ) {
7197 const settings = require ( path . join ( '../..' , VECTORMAP_UTILS_PATH , '_settings.json' ) ) ;
72- const part = settings [ name ] ;
98+ const part = settings [ 'browser' ] ;
7399 const stream = gulp . src ( settings . commonFiles . concat ( part . files ) . map ( transformFileName ) )
74100 . pipe ( concat ( part . fileName + suffix + '.js' ) ) ;
75101
76- if ( name === 'browser' ) {
77- return stream . pipe ( tap ( file => {
78- patchVectorMapUtilsStream ( gulp . src ( 'build/gulp/vectormaputils-template.jst' )
79- . pipe ( template ( { data : file . contents } ) )
80- . pipe ( rename ( path . basename ( file . path ) ) ) , isMinify ) ;
81- } ) ) ;
82- }
83- return patchVectorMapUtilsStream ( stream , isMinify ) ;
102+ return stream . pipe ( tap ( file => {
103+ patchVectorMapUtilsStream ( gulp . src ( 'build/gulp/vectormaputils-template.jst' )
104+ . pipe ( template ( { data : file . contents } ) )
105+ . pipe ( rename ( path . basename ( file . path ) ) ) , isMinify ) ;
106+ } ) ) ;
84107}
85108
86109gulp . task ( 'vectormap' , gulp . series ( 'vectormap-utils' , 'vectormap-data' ) ) ;
0 commit comments