package.tasks.schema.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of plotly.js Show documentation
Show all versions of plotly.js Show documentation
The open source javascript graphing library that powers plotly
The newest version!
var fs = require('fs');
var path = require('path');
var constants = require('./util/constants');
var plotlyNode = require('./util/plotly_node');
function caseInsensitive(a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
}
function isArray(v) {
return Array.isArray(v);
}
function isObject(v) {
return typeof v === 'object' && v !== null && !(isArray(v));
}
function isArrayOfObjects(v) {
return isArray(v) && isObject(v[0]);
}
function typeHandle(v) {
return (
isArrayOfObjects(v) ? sortArrayOfObjects(v) :
isObject(v) ? sortObject(v) :
v
);
}
function sortArrayOfObjects(list) {
var newList = [];
for(var i = 0; i < list.length; i++) {
newList[i] = typeHandle(list[i]);
}
return newList;
}
function sortObject(obj) {
var allKeys = Object.keys(obj);
allKeys.sort(caseInsensitive);
var newObj = {};
for(var i = 0; i < allKeys.length; i++) {
var key = allKeys[i];
newObj[key] = typeHandle(obj[key]);
}
return newObj;
}
function makeSchema(plotlyPath, schemaPath) {
var Plotly = plotlyNode(plotlyPath);
var obj = Plotly.PlotSchema.get();
var sortedObj = sortObject(obj);
var plotSchemaRaw = JSON.stringify(obj, null, 1);
var plotSchemaStr = JSON.stringify(sortedObj, null, 1);
fs.writeFileSync(schemaPath, plotSchemaStr);
var lenBeforeSort = plotSchemaRaw.length;
var lenAfterSort = plotSchemaStr.length;
var linesBeforeSort = plotSchemaRaw.split('\n').length;
var linesAfterSort = plotSchemaStr.split('\n').length;
if(linesAfterSort !== linesBeforeSort || lenAfterSort !== lenBeforeSort) {
throw 'plot schema should have the same length & number of lines before and after sort';
} else {
console.log('ok ' + path.basename(schemaPath));
}
}
var isDist = process.argv.indexOf('dist') !== -1;
var pathToSchema = isDist ?
constants.pathToSchemaDist :
constants.pathToSchemaDiff;
var pathToPlotly = isDist ?
constants.pathToPlotlyDistWithMeta :
constants.pathToPlotlyBuild;
// output plot-schema JSON
makeSchema(pathToPlotly, pathToSchema);