{"version":3,"file":"deref.mjs","names":[],"sources":["../src/deref.ts"],"sourcesContent":["import {refProperties} from './util/ref_properties';\nimport {LayerSpecification} from './types.g';\n\nexport type LayerWithRef = LayerSpecification & {ref?: string};\n\nfunction deref(layer: LayerWithRef, parent: LayerSpecification): LayerSpecification {\n const result: Partial = {};\n\n for (const k in layer) {\n if (k !== 'ref') {\n result[k] = layer[k];\n }\n }\n\n refProperties.forEach((k) => {\n if (k in parent) {\n result[k] = parent[k];\n }\n });\n\n return result as LayerSpecification;\n}\n\n/**\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @param layers - array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property\n * @returns a new array where such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n */\nexport function derefLayers(layers: LayerWithRef[]): LayerSpecification[] {\n layers = layers.slice();\n\n const map = Object.create(null);\n for (let i = 0; i < layers.length; i++) {\n map[layers[i].id] = layers[i];\n }\n\n for (let i = 0; i < layers.length; i++) {\n if ('ref' in layers[i]) {\n layers[i] = deref(layers[i], map[layers[i].ref]);\n }\n }\n\n return layers;\n}\n"],"mappings":";;AAKA,SAAS,MAAM,OAAqB,QAAgD;CAChF,MAAM,SAAsC,CAAC;CAE7C,KAAK,MAAM,KAAK,OACZ,IAAI,MAAM,OACN,OAAO,KAAK,MAAM;CAI1B,cAAc,SAAS,MAAM;EACzB,IAAI,KAAK,QACL,OAAO,KAAK,OAAO;CAE3B,CAAC;CAED,OAAO;AACX;;;;;;;;;;;AAYA,SAAgB,YAAY,QAA8C;CACtE,SAAS,OAAO,MAAM;CAEtB,MAAM,MAAM,OAAO,OAAO,IAAI;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAC/B,IAAI,OAAO,EAAE,CAAC,MAAM,OAAO;CAG/B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAC/B,IAAI,SAAS,OAAO,IAChB,OAAO,KAAK,MAAM,OAAO,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI;CAIvD,OAAO;AACX"}