Skip to content

Commit aea3022

Browse files
committedJun 30, 2021
sort arrays of objects in schema
- ensure identical number of lines present in sorted schema
1 parent a451667 commit aea3022

File tree

3 files changed

+13619
-13584
lines changed

3 files changed

+13619
-13584
lines changed
 

‎tasks/schema.js

+60-4
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,72 @@ var path = require('path');
33

44
var constants = require('./util/constants');
55
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+
}
752

853
function 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

1874
var isDist = process.argv[2] === 'dist';

‎tasks/util/sort_object.js

-21
This file was deleted.

‎test/plot-schema.json

+13,559-13,559
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)
Please sign in to comment.