From 5ea08040d7ec40abaabf849ef20771c1a5112637 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 2 Oct 2023 00:15:49 +0200 Subject: [PATCH] Fix: enable external data sources from the ELI --- scripts/generateLayouts.ts | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index 14793d2268..bbeaa533ba 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -10,10 +10,11 @@ import ScriptUtils from "./ScriptUtils" import { Utils } from "../src/Utils" import SpecialVisualizations from "../src/UI/SpecialVisualizations" import Constants from "../src/Models/Constants" -import { AvailableRasterLayers, RasterLayerPolygon } from "../src/Models/RasterLayers" +import { AvailableRasterLayers, EditorLayerIndexProperties, RasterLayerPolygon } from "../src/Models/RasterLayers"; import { ImmutableStore } from "../src/Logic/UIEventSource" import * as crypto from "crypto" - +import * as eli from "../src/assets/editor-layer-index.json" +import dom from "svelte/types/compiler/compile/render_dom"; const sharp = require("sharp") const template = readFileSync("theme.html", "utf8") const codeTemplate = readFileSync("src/index_theme.ts.template", "utf8") @@ -207,6 +208,28 @@ function asLangSpan(t: Translation, tag = "span"): string { let previousSrc: Set = new Set() +let eliUrlsCached : string[] +function eliUrls(): string[]{ + if(eliUrlsCached){ + return eliUrlsCached + } + const urls: string[] = [] + const regex =/{switch:([^}]+)}/ + for (const feature of eli.features) { + const url = ( feature).properties.url + const match = url.match(regex) + if(match){ + const domains = match[1].split(",") + const subpart = match[0] + urls.push(...domains.map(d => url.replace(subpart, d))) + }else{ + urls.push(url) + } + } + eliUrlsCached = urls + return urls +} + function generateCsp( layout: LayoutConfig, options: { @@ -221,6 +244,7 @@ function generateCsp( "https://api.openstreetmap.org", "https://pietervdvn.goatcounter.com", ].concat(...SpecialVisualizations.specialVisualizations.map((sv) => sv.needsUrls)) + .concat(...eliUrls()) const geojsonSources: string[] = layout.layers.map((l) => l.source?.geojsonSource) const hosts = new Set()