@@ -3,16 +3,72 @@ var path = require('path');
33
44var constants = require ( './util/constants' ) ;
55var plotlyNode = require ( './util/plotly_node' ) ;
6- var sortObject = require ( './util/sort_object' ) ;
6+
7+ function caseInsensitive ( a , b ) {
8+ return a . toLowerCase ( ) . localeCompare ( b . toLowerCase ( ) ) ;
9+ }
10+
11+ function isArray ( v ) {
12+ return Array . isArray ( v ) ;
13+ }
14+
15+ function isObject ( v ) {
16+ return typeof v === 'object' && v !== null && ! ( isArray ( v ) ) ;
17+ }
18+
19+ function isArrayOfObjects ( v ) {
20+ return isArray ( v ) && isObject ( v [ 0 ] ) ;
21+ }
22+
23+ function typeHandle ( v ) {
24+ return (
25+ isArrayOfObjects ( v ) ? sortArrayOfObjects ( v ) :
26+ isObject ( v ) ? sortObject ( v ) :
27+ v
28+ ) ;
29+ }
30+
31+ function sortArrayOfObjects ( list ) {
32+ var newList = [ ] ;
33+ for ( var i = 0 ; i < list . length ; i ++ ) {
34+ newList [ i ] = typeHandle ( list [ i ] ) ;
35+ }
36+
37+ return newList ;
38+ }
39+
40+ function sortObject ( obj ) {
41+ var allKeys = Object . keys ( obj ) ;
42+ allKeys . sort ( caseInsensitive ) ;
43+
44+ var newObj = { } ;
45+ for ( var i = 0 ; i < allKeys . length ; i ++ ) {
46+ var key = allKeys [ i ] ;
47+ newObj [ key ] = typeHandle ( obj [ key ] ) ;
48+ }
49+
50+ return newObj ;
51+ }
752
853function makeSchema ( plotlyPath , schemaPath ) {
954 var Plotly = plotlyNode ( plotlyPath ) ;
1055
11- var plotSchema = sortObject ( Plotly . PlotSchema . get ( ) ) ;
12- var plotSchemaStr = JSON . stringify ( plotSchema , null , 1 ) ;
56+ var obj = Plotly . PlotSchema . get ( ) ;
57+ var sortedObj = sortObject ( obj ) ;
58+ var plotSchemaRaw = JSON . stringify ( obj , null , 1 ) ;
59+ var plotSchemaStr = JSON . stringify ( sortedObj , null , 1 ) ;
60+
1361 fs . writeFileSync ( schemaPath , plotSchemaStr ) ;
1462
15- console . log ( 'ok ' + path . basename ( schemaPath ) ) ;
63+ var lenBeforeSort = plotSchemaRaw . length ;
64+ var lenAfterSort = plotSchemaStr . length ;
65+ var linesBeforeSort = plotSchemaRaw . split ( '\n' ) . length ;
66+ var linesAfterSort = plotSchemaStr . split ( '\n' ) . length ;
67+ if ( linesAfterSort !== linesBeforeSort || lenAfterSort !== lenBeforeSort ) {
68+ throw 'plot schema should have the same length & number of lines before and after sort' ;
69+ } else {
70+ console . log ( 'ok ' + path . basename ( schemaPath ) ) ;
71+ }
1672}
1773
1874var isDist = process . argv [ 2 ] === 'dist' ;
0 commit comments