@@ -3,16 +3,72 @@ var path = require('path');
3
3
4
4
var constants = require ( './util/constants' ) ;
5
5
var 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
+ }
7
52
8
53
function makeSchema ( plotlyPath , schemaPath ) {
9
54
var Plotly = plotlyNode ( plotlyPath ) ;
10
55
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
+
13
61
fs . writeFileSync ( schemaPath , plotSchemaStr ) ;
14
62
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
+ }
16
72
}
17
73
18
74
var isDist = process . argv [ 2 ] === 'dist' ;
0 commit comments