{"version":3,"file":"format.mjs","names":["stringifyPretty"],"sources":["../src/format.ts"],"sourcesContent":["import {latest} from './reference/latest';\nimport stringifyPretty from 'json-stringify-pretty-compact';\n\nfunction sortKeysBy(obj, reference) {\n const result = {};\n for (const key in reference) {\n if (obj[key] !== undefined) {\n result[key] = obj[key];\n }\n }\n for (const key in obj) {\n if (result[key] === undefined) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/**\n * Format a MapLibre Style. Returns a stringified style with its keys\n * sorted in the same order as the reference style.\n *\n * The optional `space` argument is passed to\n * [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * to generate formatted output.\n *\n * If `space` is unspecified, a default of `2` spaces will be used.\n *\n * @private\n * @param {Object} style a MapLibre Style\n * @param {number} [space] space argument to pass to `JSON.stringify`\n * @returns {string} stringified formatted JSON\n * @example\n * var fs = require('fs');\n * var format = require('maplibre-gl-style-spec').format;\n * var style = fs.readFileSync('./source.json', 'utf8');\n * fs.writeFileSync('./dest.json', format(style));\n * fs.writeFileSync('./dest.min.json', format(style, 0));\n */\nexport function format(style, space = 2) {\n style = sortKeysBy(style, latest.$root);\n\n if (style.layers) {\n style.layers = style.layers.map((layer) => sortKeysBy(layer, latest.layer));\n }\n\n return stringifyPretty(style, {indent: space});\n}\n"],"mappings":";;;AAGA,SAAS,WAAW,KAAK,WAAW;CAChC,MAAM,SAAS,CAAC;CAChB,KAAK,MAAM,OAAO,WACd,IAAI,IAAI,SAAS,KAAA,GACb,OAAO,OAAO,IAAI;CAG1B,KAAK,MAAM,OAAO,KACd,IAAI,OAAO,SAAS,KAAA,GAChB,OAAO,OAAO,IAAI;CAG1B,OAAO;AACX;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,OAAO,OAAO,QAAQ,GAAG;CACrC,QAAQ,WAAW,OAAO,OAAO,KAAK;CAEtC,IAAI,MAAM,QACN,MAAM,SAAS,MAAM,OAAO,KAAK,UAAU,WAAW,OAAO,OAAO,KAAK,CAAC;CAG9E,OAAOA,UAAgB,OAAO,EAAC,QAAQ,MAAK,CAAC;AACjD"}