Spaces:
Sleeping
Sleeping
| import reference from './reference/latest.js'; | |
| import stringifyPretty from 'json-stringify-pretty-compact'; | |
| function sortKeysBy(obj, reference) { | |
| const result = {}; | |
| for (const key in reference) { | |
| if (obj[key] !== undefined) { | |
| result[key] = obj[key]; | |
| } | |
| } | |
| for (const key in obj) { | |
| if (result[key] === undefined) { | |
| result[key] = obj[key]; | |
| } | |
| } | |
| return result; | |
| } | |
| /** | |
| * Format a Mapbox GL Style. Returns a stringified style with its keys | |
| * sorted in the same order as the reference style. | |
| * | |
| * The optional `space` argument is passed to | |
| * [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) | |
| * to generate formatted output. | |
| * | |
| * If `space` is unspecified, a default of `2` spaces will be used. | |
| * | |
| * @private | |
| * @param {Object} style a Mapbox GL Style | |
| * @param {number} [space] space argument to pass to `JSON.stringify` | |
| * @returns {string} stringified formatted JSON | |
| * @example | |
| * var fs = require('fs'); | |
| * var format = require('mapbox-gl-style-spec').format; | |
| * var style = fs.readFileSync('./source.json', 'utf8'); | |
| * fs.writeFileSync('./dest.json', format(style)); | |
| * fs.writeFileSync('./dest.min.json', format(style, 0)); | |
| */ | |
| function format(style, space = 2) { | |
| style = sortKeysBy(style, reference.$root); | |
| if (style.layers) { | |
| style.layers = style.layers.map((layer) => sortKeysBy(layer, reference.layer)); | |
| } | |
| return stringifyPretty(style, {indent: space}); | |
| } | |
| export default format; | |