From 0c22b15c8d67895352029ccae727e14201ed817c Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 21 Dec 2021 18:35:15 +0100 Subject: [PATCH 01/16] First part of a huge refactoring --- Customizations/AllKnownLayers.ts | 131 ------------------------------- all_themes_index.ts | 104 ++++++++++++++++++++++++ index_theme.ts.template | 101 ++++++++++++++++++++++++ 3 files changed, 205 insertions(+), 131 deletions(-) delete mode 100644 Customizations/AllKnownLayers.ts create mode 100644 all_themes_index.ts create mode 100644 index_theme.ts.template diff --git a/Customizations/AllKnownLayers.ts b/Customizations/AllKnownLayers.ts deleted file mode 100644 index 4f142cfeb..000000000 --- a/Customizations/AllKnownLayers.ts +++ /dev/null @@ -1,131 +0,0 @@ -import * as known_layers from "../assets/generated/known_layers_and_themes.json" -import {Utils} from "../Utils"; -import LayerConfig from "../Models/ThemeConfig/LayerConfig"; -import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; -import SharedTagRenderings from "./SharedTagRenderings"; -import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; -import WithContextLoader from "../Models/ThemeConfig/WithContextLoader"; - -export default class AllKnownLayers { - - public static inited = (_ => { - WithContextLoader.getKnownTagRenderings = (id => AllKnownLayers.getTagRendering(id)) - return true - })() - - public static runningGenerateScript = false; - - // Must be below the list... - public static sharedLayers: Map = AllKnownLayers.getSharedLayers(); - public static sharedLayersJson: Map = AllKnownLayers.getSharedLayersJson(); - - - public static added_by_default: string[] = ["gps_location", "gps_location_history", "home_location", "gps_track"] - public static no_include: string[] = ["conflation", "left_right_style", "split_point","current_view"] - /** - * Layer IDs of layers which have special properties through built-in hooks - */ - public static priviliged_layers: string[] = [...AllKnownLayers.added_by_default, "type_node", ...AllKnownLayers.no_include] - - /** - * Gets the appropriate tagRenderingJSON - * Allows to steal them from other layers. - * This will add the tags of the layer to the configuration though! - * @param renderingId - */ - static getTagRendering(renderingId: string): TagRenderingConfigJson[] { - if (renderingId.indexOf(".") < 0) { - const found = SharedTagRenderings.SharedTagRenderingJson.get(renderingId) - if(found === undefined){ - return [] - } - return [found] - } - - const [layerId, id] = renderingId.split(".") - const layer = AllKnownLayers.getSharedLayersJson().get(layerId) - if (layer === undefined) { - if (AllKnownLayers.runningGenerateScript) { - // Probably generating the layer overview - return [{ - id: "dummy" - }] - } - throw "Builtin layer " + layerId + " not found" - } - - const renderings = layer?.tagRenderings ?? [] - if (id === "*") { - return JSON.parse(JSON.stringify(renderings)) - } - - const selectByGroup = id.startsWith("*") - const expectedGroupName = id.substring(1) - - const allValidValues = [] - for (const rendering of renderings) { - if ((!selectByGroup && rendering["id"] === id) || (selectByGroup && rendering["group"] === expectedGroupName)) { - const found = JSON.parse(JSON.stringify(rendering)) - if (found.condition === undefined) { - found.condition = layer.source.osmTags - } else { - found.condition = {and: [found.condition, layer.source.osmTags]} - } - allValidValues.push(found) - } - } - if(allValidValues.length === 0){ - - throw `The rendering with id ${id} was not found in the builtin layer ${layerId}. Try one of ${Utils.NoNull(renderings.map(r => r["id"])).join(", ")}` - } - return allValidValues - } - - private static getSharedLayers(): Map { - const sharedLayers = new Map(); - for (const layer of known_layers.layers) { - try { - // @ts-ignore - const parsed = new LayerConfig(layer, "shared_layers") - sharedLayers.set(layer.id, parsed); - } catch (e) { - if (!Utils.runningFromConsole) { - console.error("CRITICAL: Could not parse a layer configuration!", layer.id, " due to", e) - } - } - } - - for (const layout of known_layers.themes) { - for (const layer of layout.layers) { - if (typeof layer === "string") { - continue; - } - if (layer.builtin !== undefined) { - // This is a builtin layer of which stuff is overridden - skip - continue; - } - try { - const parsed = new LayerConfig(layer, "shared_layer_in_theme") - sharedLayers.set(layer.id, parsed); - sharedLayers[layer.id] = parsed; - } catch (e) { - if (!Utils.runningFromConsole) { - console.error("Could not parse a layer in theme ", layout.id, "due to", e) - } - } - } - } - - return sharedLayers; - } - - private static getSharedLayersJson(): Map { - const sharedLayers = new Map(); - for (const layer of known_layers.layers) { - sharedLayers.set(layer.id, layer); - sharedLayers[layer.id] = layer; - } - return sharedLayers; - } - -} diff --git a/all_themes_index.ts b/all_themes_index.ts new file mode 100644 index 000000000..9364b5d8d --- /dev/null +++ b/all_themes_index.ts @@ -0,0 +1,104 @@ +import {FixedUiElement} from "./UI/Base/FixedUiElement"; +import {QueryParameters} from "./Logic/Web/QueryParameters"; +import Combine from "./UI/Base/Combine"; +import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers"; +import MinimapImplementation from "./UI/Base/MinimapImplementation"; +import {Utils} from "./Utils"; +import AllThemesGui from "./UI/AllThemesGui"; +import DetermineLayout from "./Logic/DetermineLayout"; +import LayoutConfig from "./Models/ThemeConfig/LayoutConfig"; +import DefaultGUI from "./UI/DefaultGUI"; +import State from "./State"; +import AvailableBaseLayersImplementation from "./Logic/Actors/AvailableBaseLayersImplementation"; +import ShowOverlayLayerImplementation from "./UI/ShowDataLayer/ShowOverlayLayerImplementation"; +import {DefaultGuiState} from "./UI/DefaultGuiState"; + +// Workaround for a stupid crash: inject some functions which would give stupid circular dependencies or crash the other nodejs scripts running from console +MinimapImplementation.initialize() +AvailableBaseLayers.implement(new AvailableBaseLayersImplementation()) +ShowOverlayLayerImplementation.Implement(); +// Miscelleanous +Utils.DisableLongPresses() + +// --------------------- Special actions based on the parameters ----------------- +// @ts-ignore +if (location.href.startsWith("http://buurtnatuur.be")) { + // Reload the https version. This is important for the 'locate me' button + window.location.replace("https://buurtnatuur.be"); +} + + +class Init { + public static Init(layoutToUse: LayoutConfig, encoded: string) { + + if (layoutToUse === null) { + // Something went wrong, error message is already on screen + return; + } + + if (layoutToUse === undefined) { + // No layout found + new AllThemesGui() + return; + } + + // Workaround/legacy to keep the old paramters working as I renamed some of them + if (layoutToUse?.id === "cyclofix") { + const legacy = QueryParameters.GetQueryParameter("layer-bike_shops", "true", "Legacy - keep De Fietsambassade working"); + const correct = QueryParameters.GetQueryParameter("layer-bike_shop", "true", "Legacy - keep De Fietsambassade working") + if (legacy.data !== "true") { + correct.setData(legacy.data) + } + console.log("layer-bike_shop toggles: legacy:", legacy.data, "new:", correct.data) + + const legacyCafe = QueryParameters.GetQueryParameter("layer-bike_cafes", "true", "Legacy - keep De Fietsambassade working") + const correctCafe = QueryParameters.GetQueryParameter("layer-bike_cafe", "true", "Legacy - keep De Fietsambassade working") + if (legacyCafe.data !== "true") { + correctCafe.setData(legacy.data) + } + } + + + const guiState = new DefaultGuiState() + State.state = new State(layoutToUse); + DefaultGuiState.state = guiState; + // This 'leaks' the global state via the window object, useful for debugging + // @ts-ignore + window.mapcomplete_state = State.state; + + new DefaultGUI(State.state, guiState) + + if (encoded !== undefined && encoded.length > 10) { + // We save the layout to the user settings and local storage + State.state.osmConnection.OnLoggedIn(() => { + State.state.osmConnection + .GetLongPreference("installed-theme-" + layoutToUse.id) + .setData(encoded); + }); + } + } +} + + +document.getElementById("decoration-desktop").remove(); +new Combine(["Initializing...
", + new FixedUiElement("If this message persist, something went wrong - click here to try again") + .SetClass("link-underline small") + .onClick(() => { + localStorage.clear(); + window.location.reload(true); + + })]) + .AttachTo("centermessage"); // Add an initialization and reset button if something goes wrong + +// @ts-ignore +if(typeof theme === "undefined"){ + DetermineLayout.GetLayout().then(value => { + console.log("Got ", value) + Init.Init(value[0], value[1]) + }).catch(err => { + console.error("Error while initializing: ", err, err.stack) + }) +} + + diff --git a/index_theme.ts.template b/index_theme.ts.template new file mode 100644 index 000000000..e8718f0b5 --- /dev/null +++ b/index_theme.ts.template @@ -0,0 +1,101 @@ +import {FixedUiElement} from "./UI/Base/FixedUiElement"; +import {QueryParameters} from "./Logic/Web/QueryParameters"; +import Combine from "./UI/Base/Combine"; +import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers"; +import MinimapImplementation from "./UI/Base/MinimapImplementation"; +import {Utils} from "./Utils"; +import AllThemesGui from "./UI/AllThemesGui"; +import DetermineLayout from "./Logic/DetermineLayout"; +import LayoutConfig from "./Models/ThemeConfig/LayoutConfig"; +import DefaultGUI from "./UI/DefaultGUI"; +import State from "./State"; +import AvailableBaseLayersImplementation from "./Logic/Actors/AvailableBaseLayersImplementation"; +import ShowOverlayLayerImplementation from "./UI/ShowDataLayer/ShowOverlayLayerImplementation"; +import {DefaultGuiState} from "./UI/DefaultGuiState"; + +// Workaround for a stupid crash: inject some functions which would give stupid circular dependencies or crash the other nodejs scripts running from console +MinimapImplementation.initialize() +AvailableBaseLayers.implement(new AvailableBaseLayersImplementation()) +ShowOverlayLayerImplementation.Implement(); +// Miscelleanous +Utils.DisableLongPresses() + +// --------------------- Special actions based on the parameters ----------------- +// @ts-ignore +if (location.href.startsWith("http://buurtnatuur.be")) { + // Reload the https version. This is important for the 'locate me' button + window.location.replace("https://buurtnatuur.be"); +} + + +class Init { + public static Init(layoutToUse: LayoutConfig, encoded: string) { + + if (layoutToUse === null) { + // Something went wrong, error message is already on screen + return; + } + + if (layoutToUse === undefined) { + // No layout found + new AllThemesGui() + return; + } + + // Workaround/legacy to keep the old paramters working as I renamed some of them + if (layoutToUse?.id === "cyclofix") { + const legacy = QueryParameters.GetQueryParameter("layer-bike_shops", "true", "Legacy - keep De Fietsambassade working"); + const correct = QueryParameters.GetQueryParameter("layer-bike_shop", "true", "Legacy - keep De Fietsambassade working") + if (legacy.data !== "true") { + correct.setData(legacy.data) + } + console.log("layer-bike_shop toggles: legacy:", legacy.data, "new:", correct.data) + + const legacyCafe = QueryParameters.GetQueryParameter("layer-bike_cafes", "true", "Legacy - keep De Fietsambassade working") + const correctCafe = QueryParameters.GetQueryParameter("layer-bike_cafe", "true", "Legacy - keep De Fietsambassade working") + if (legacyCafe.data !== "true") { + correctCafe.setData(legacy.data) + } + } + + + const guiState = new DefaultGuiState() + State.state = new State(layoutToUse); + DefaultGuiState.state = guiState; + // This 'leaks' the global state via the window object, useful for debugging + // @ts-ignore + window.mapcomplete_state = State.state; + new DefaultGUI(State.state, guiState) + + if (encoded !== undefined && encoded.length > 10) { + // We save the layout to the user settings and local storage + State.state.osmConnection.OnLoggedIn(() => { + State.state.osmConnection + .GetLongPreference("installed-theme-" + layoutToUse.id) + .setData(encoded); + }); + } + } +} + + +document.getElementById("decoration-desktop").remove(); +new Combine(["Initializing...
", + new FixedUiElement("If this message persist, something went wrong - click here to try again") + .SetClass("link-underline small") + .onClick(() => { + localStorage.clear(); + window.location.reload(true); + + })]) + .AttachTo("centermessage"); // Add an initialization and reset button if something goes wrong + +// @ts-ignore +DetermineLayout.GetLayout().then(value => { + console.log("Got ", value) + Init.Init(value[0], value[1]) + }).catch(err => { + console.error("Error while initializing: ", err, err.stack) + }) + + From 11150a258da476c3fe1736c4554e93589aa672b0 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 21 Dec 2021 18:35:31 +0100 Subject: [PATCH 02/16] First part of a huge refactoring --- Customizations/AllKnownLayouts.ts | 72 +- Customizations/SharedTagRenderings.ts | 6 +- Docs/BuiltinLayers.md | 429 +-------- Logic/Actors/InstalledThemes.ts | 4 + Logic/Actors/OverpassFeatureSource.ts | 4 +- Logic/Actors/TitleHandler.ts | 2 +- Logic/DetermineLayout.ts | 19 +- Logic/State/ElementsState.ts | 2 - Logic/State/MapState.ts | 3 + Models/Constants.ts | 11 +- .../Json/LineRenderingConfigJson.ts | 2 +- .../Json/PointRenderingConfigJson.ts | 2 +- Models/ThemeConfig/LayerConfig.ts | 133 +-- Models/ThemeConfig/LayoutConfig.ts | 166 +--- Models/ThemeConfig/LegacyJsonConvert.ts | 896 +++++++++++++++++- Models/ThemeConfig/PointRenderingConfig.ts | 2 +- Models/ThemeConfig/TagRenderingConfig.ts | 3 +- Models/ThemeConfig/WithContextLoader.ts | 73 +- UI/AllThemesGui.ts | 4 +- UI/AutomatonGui.ts | 5 +- UI/BigComponents/FeaturedMessage.ts | 16 +- UI/BigComponents/LicensePicker.ts | 6 +- UI/BigComponents/MoreScreen.ts | 42 +- UI/DefaultGUI.ts | 5 +- UI/Image/DeleteImage.ts | 11 +- UI/Image/ImageCarousel.ts | 6 +- UI/Image/ImageUploadFlow.ts | 29 +- UI/OpeningHours/OpeningHoursVisualization.ts | 6 +- UI/Popup/EditableTagRendering.ts | 2 +- UI/Popup/FeatureInfoBox.ts | 10 +- UI/Popup/ImportButton.ts | 5 +- UI/Popup/TagRenderingAnswer.ts | 3 +- UI/Popup/TagRenderingQuestion.ts | 4 +- UI/ShowDataLayer/ShowTileInfo.ts | 3 +- UI/SpecialVisualizations.ts | 13 +- UI/SubstitutedTranslation.ts | 4 +- UI/i18n/Translation.ts | 3 + Utils.ts | 14 +- all_themes_index.ts | 87 +- assets/tagRenderings/icons.json | 17 +- assets/themes/cyclofix/cyclofix.json | 2 +- assets/themes/grb_import/grb.json | 6 +- assets/themes/natuurpunt/natuurpunt.json | 1 + assets/themes/sidewalks/sidewalks.json | 6 +- assets/themes/speelplekken/speelplekken.json | 4 - index.html | 2 +- index.ts | 10 +- index_theme.ts.template | 108 +-- package.json | 8 +- scripts/generateLayerOverview.ts | 325 +++---- scripts/generateLayouts.ts | 19 +- scripts/generateWikiPage.ts | 20 +- scripts/lint.ts | 12 +- test/Actors.spec.ts | 5 +- test/LegacyThemeLoader.spec.ts | 13 +- theme.html | 84 ++ 56 files changed, 1425 insertions(+), 1324 deletions(-) create mode 100644 theme.html diff --git a/Customizations/AllKnownLayouts.ts b/Customizations/AllKnownLayouts.ts index 22964023c..2afb4380d 100644 --- a/Customizations/AllKnownLayouts.ts +++ b/Customizations/AllKnownLayouts.ts @@ -1,4 +1,3 @@ -import AllKnownLayers from "./AllKnownLayers"; import * as known_themes from "../assets/generated/known_layers_and_themes.json" import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; import LayerConfig from "../Models/ThemeConfig/LayerConfig"; @@ -7,8 +6,30 @@ import Combine from "../UI/Base/Combine"; import Title from "../UI/Base/Title"; import List from "../UI/Base/List"; import DependencyCalculator from "../Models/ThemeConfig/DependencyCalculator"; +import Constants from "../Models/Constants"; +import {Utils} from "../Utils"; export class AllKnownLayouts { + // Must be below the list... + private static sharedLayers: Map = AllKnownLayouts.getSharedLayers(); + + private static getSharedLayers(): Map { + const sharedLayers = new Map(); + for (const layer of known_themes.layers) { + try { + // @ts-ignore + const parsed = new LayerConfig(layer, "shared_layers") + sharedLayers.set(layer.id, parsed); + } catch (e) { + if (!Utils.runningFromConsole) { + console.error("CRITICAL: Could not parse a layer configuration!", layer.id, " due to", e) + } + } + } + + return sharedLayers; + } + public static allKnownLayouts: Map = AllKnownLayouts.AllLayouts(); @@ -35,14 +56,14 @@ export class AllKnownLayouts { } public static GenLayerOverviewText(): BaseUIElement { - for (const id of AllKnownLayers.priviliged_layers) { - if (!AllKnownLayers.sharedLayers.has(id)) { + for (const id of Constants.priviliged_layers) { + if (!AllKnownLayouts.sharedLayers.has(id)) { throw "Priviliged layer definition not found: " + id } } - const allLayers: LayerConfig[] = Array.from(AllKnownLayers.sharedLayers.values()) - .filter(layer => AllKnownLayers.priviliged_layers.indexOf(layer.id) < 0) + const allLayers: LayerConfig[] = Array.from(AllKnownLayouts.sharedLayers.values()) + .filter(layer => Constants.priviliged_layers.indexOf(layer.id) < 0) const builtinLayerIds: Set = new Set() allLayers.forEach(l => builtinLayerIds.add(l.id)) @@ -89,10 +110,10 @@ export class AllKnownLayouts { new Title("Special and other useful layers", 1), "MapComplete has a few data layers available in the theme which have special properties through builtin-hooks. Furthermore, there are some normal layers (which are built from normal Theme-config files) but are so general that they get a mention here.", new Title("Priviliged layers", 1), - new List(AllKnownLayers.priviliged_layers.map(id => "[" + id + "](#" + id + ")")), - ...AllKnownLayers.priviliged_layers - .map(id => AllKnownLayers.sharedLayers.get(id)) - .map((l) => l.GenerateDocumentation(themesPerLayer.get(l.id), layerIsNeededBy, DependencyCalculator.getLayerDependencies(l),AllKnownLayers.added_by_default.indexOf(l.id) >= 0, AllKnownLayers.no_include.indexOf(l.id) < 0)), + new List(Constants.priviliged_layers.map(id => "[" + id + "](#" + id + ")")), + ...Constants.priviliged_layers + .map(id => AllKnownLayouts.sharedLayers.get(id)) + .map((l) => l.GenerateDocumentation(themesPerLayer.get(l.id), layerIsNeededBy, DependencyCalculator.getLayerDependencies(l),Constants.added_by_default.indexOf(l.id) >= 0, Constants.no_include.indexOf(l.id) < 0)), new Title("Normal layers", 1), "The following layers are included in MapComplete", new Title("Frequently reused layers", 2), @@ -108,53 +129,26 @@ export class AllKnownLayouts { } private static GenerateOrderedList(allKnownLayouts: Map): LayoutConfig[] { - const keys = ["personal", "cyclofix", "hailhydrant", "bookcases", "toilets", "aed"] const list = [] - for (const key of keys) { - list.push(allKnownLayouts.get(key)) - } allKnownLayouts.forEach((layout, key) => { - if (keys.indexOf(key) < 0) { - list.push(layout) - } + list.push(layout) }) return list; } - private static AddGhostBikes(layout: LayoutConfig): LayoutConfig { - const now = new Date(); - const m = now.getMonth() + 1; - const day = new Date().getDate() + 1; - const date = day + "/" + m; - if (date === "31/10" || date === "1/11" || date === "2/11") { - console.log("The current date is ", date, ", which means we remember our dead") - // Around Halloween/Fiesta de muerte/Allerzielen, we remember the dead - layout.layers.push( - AllKnownLayers.sharedLayers.get("ghost_bike") - ); - - } - return layout; - - } - private static AllLayouts(): Map { const dict: Map = new Map(); for (const layoutConfigJson of known_themes.themes) { // @ts-ignore const layout = new LayoutConfig(layoutConfigJson, true) - - if (layout.id === "cyclofix") { - AllKnownLayouts.AddGhostBikes(layout) - } dict.set(layout.id, layout) for (let i = 0; i < layout.layers.length; i++) { let layer = layout.layers[i]; if (typeof (layer) === "string") { - layer = layout.layers[i] = AllKnownLayers.sharedLayers.get(layer); + layer = layout.layers[i] = AllKnownLayouts.sharedLayers.get(layer); if (layer === undefined) { - console.log("Defined layers are ", AllKnownLayers.sharedLayers.keys()) + console.log("Defined layers are ", AllKnownLayouts.sharedLayers.keys()) throw `Layer ${layer} was not found or defined - probably a type was made` } } diff --git a/Customizations/SharedTagRenderings.ts b/Customizations/SharedTagRenderings.ts index 4344b6e89..ad0aa83e2 100644 --- a/Customizations/SharedTagRenderings.ts +++ b/Customizations/SharedTagRenderings.ts @@ -37,8 +37,10 @@ export default class SharedTagRenderings { for (const key in icons) { dict.set(key, icons[key]) } - - dict.forEach((value, key) => value.id = key) + + dict.forEach((value, key) => { + value.id = value.id ?? key; + }) return dict; } diff --git a/Docs/BuiltinLayers.md b/Docs/BuiltinLayers.md index b88b012e5..13b402d51 100644 --- a/Docs/BuiltinLayers.md +++ b/Docs/BuiltinLayers.md @@ -28,8 +28,6 @@ * [Themes using this layer](#themes-using-this-layer) + [walls_and_buildings](#walls_and_buildings) * [Themes using this layer](#themes-using-this-layer) - + [all_streets](#all_streets) - * [Themes using this layer](#themes-using-this-layer) + [ambulancestation](#ambulancestation) * [Themes using this layer](#themes-using-this-layer) + [artwork](#artwork) @@ -112,36 +110,6 @@ * [Themes using this layer](#themes-using-this-layer) + [waste_basket](#waste_basket) * [Themes using this layer](#themes-using-this-layer) - + [caravansites](#caravansites) - * [Themes using this layer](#themes-using-this-layer) - + [dumpstations](#dumpstations) - * [Themes using this layer](#themes-using-this-layer) - + [climbing_club](#climbing_club) - * [Themes using this layer](#themes-using-this-layer) - + [climbing_gym](#climbing_gym) - * [Themes using this layer](#themes-using-this-layer) - + [climbing_route](#climbing_route) - * [Themes using this layer](#themes-using-this-layer) - + [climbing](#climbing) - * [Themes using this layer](#themes-using-this-layer) - + [maybe_climbing](#maybe_climbing) - * [Themes using this layer](#themes-using-this-layer) - + [fietsstraat](#fietsstraat) - * [Themes using this layer](#themes-using-this-layer) - + [toekomstige_fietsstraat](#toekomstige_fietsstraat) - * [Themes using this layer](#themes-using-this-layer) - + [facadegardens](#facadegardens) - * [Themes using this layer](#themes-using-this-layer) - + [hackerspaces](#hackerspaces) - * [Themes using this layer](#themes-using-this-layer) - + [windturbine](#windturbine) - * [Themes using this layer](#themes-using-this-layer) - + [postboxes](#postboxes) - * [Themes using this layer](#themes-using-this-layer) - + [postoffices](#postoffices) - * [Themes using this layer](#themes-using-this-layer) - + [lit_streets](#lit_streets) - * [Themes using this layer](#themes-using-this-layer) MapComplete has a few data layers available in the theme which have special properties through builtin-hooks. Furthermore, there are some normal layers (which are built from normal Theme-config files) but are so general that they get a mention here. @@ -233,7 +201,6 @@ This is a priviliged meta_layer which exports _every_ point in OSM. This only wo - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer is needed as dependency for layer [GRB](#GRB) ### conflation @@ -305,7 +272,6 @@ The icon on the button is the default icon of the layer, but can be customized b - [food](#food) - [map](#map) - [walls_and_buildings](#walls_and_buildings) - - [all_streets](#all_streets) ### bicycle_library @@ -441,29 +407,6 @@ Special builtin layer providing all walls and buildings. This layer is useful in - [surveillance](https://mapcomplete.osm.be/surveillance) -### all_streets - - - -[Go to the source code](../assets/layers/all_streets/all_streets.json) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - - - -#### Themes using this layer - - - - - - - [cyclestreets](https://mapcomplete.osm.be/cyclestreets) - - [street_lighting](https://mapcomplete.osm.be/street_lighting) - - - [ambulancestation](#ambulancestation) - [artwork](#artwork) - [barrier](#barrier) @@ -505,21 +448,6 @@ Special builtin layer providing all walls and buildings. This layer is useful in - [toilet](#toilet) - [tree_node](#tree_node) - [waste_basket](#waste_basket) - - [caravansites](#caravansites) - - [dumpstations](#dumpstations) - - [climbing_club](#climbing_club) - - [climbing_gym](#climbing_gym) - - [climbing_route](#climbing_route) - - [climbing](#climbing) - - [maybe_climbing](#maybe_climbing) - - [fietsstraat](#fietsstraat) - - [toekomstige_fietsstraat](#toekomstige_fietsstraat) - - [facadegardens](#facadegardens) - - [hackerspaces](#hackerspaces) - - [windturbine](#windturbine) - - [postboxes](#postboxes) - - [postoffices](#postoffices) - - [lit_streets](#lit_streets) ### ambulancestation @@ -970,7 +898,6 @@ A layer showing defibrillators which can be used in case of emergency. This cont - This layer will automatically load [walls_and_buildings](#walls_and_buildings) into the layout as it depends on it: a preset snaps to this layer (presets[1]) - - This layer is needed as dependency for layer [Brugge](#Brugge) @@ -1403,7 +1330,7 @@ A layer showing street lights - - This layer is needed as dependency for layer [Assen](#Assen) + @@ -1513,358 +1440,4 @@ This is a public waste basket, thrash can, where you can throw away your thrash. - [waste_basket](https://mapcomplete.osm.be/waste_basket) -### caravansites - - - -camper sites - -[Go to the source code](../assets/layers/caravansites/caravansites.json) - - - - - - - - -#### Themes using this layer - - - - - - - [campersite](https://mapcomplete.osm.be/campersite) - - -### dumpstations - - - -Sanitary dump stations - -[Go to the source code](../assets/layers/dumpstations/dumpstations.json) - - - - - - - - -#### Themes using this layer - - - - - - - [campersite](https://mapcomplete.osm.be/campersite) - - -### climbing_club - - - -A climbing club or organisations - -[Go to the source code](../assets/layers/climbing_club/climbing_club.json) - - - - - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - - -### climbing_gym - - - -A climbing gym - -[Go to the source code](../assets/layers/climbing_gym/climbing_gym.json) - - - - - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - - -### climbing_route - - - -[Go to the source code](../assets/layers/climbing_route/climbing_route.json) - - - - - This layer is needed as dependency for layer [climbing](#climbing) - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - - -### climbing - - - -A climbing opportunity - -[Go to the source code](../assets/layers/climbing/climbing.json) - - - - - This layer will automatically load [climbing_route](#climbing_route) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _contained_climbing_routes_properties) - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - - -### maybe_climbing - - - -A climbing opportunity? - -[Go to the source code](../assets/layers/maybe_climbing/maybe_climbing.json) - - - - - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - - -### fietsstraat - - - -A cyclestreet is a street where motorized traffic is not allowed to overtake a cyclist - -[Go to the source code](../assets/layers/fietsstraat/fietsstraat.json) - - - - - - - - -#### Themes using this layer - - - - - - - [cyclestreets](https://mapcomplete.osm.be/cyclestreets) - - -### toekomstige_fietsstraat - - - -This street will become a cyclestreet soon - -[Go to the source code](../assets/layers/toekomstige_fietsstraat/toekomstige_fietsstraat.json) - - - - - - - - -#### Themes using this layer - - - - - - - [cyclestreets](https://mapcomplete.osm.be/cyclestreets) - - -### facadegardens - - - -Facade gardens - -[Go to the source code](../assets/layers/facadegardens/facadegardens.json) - - - - - - - - -#### Themes using this layer - - - - - - - [facadegardens](https://mapcomplete.osm.be/facadegardens) - - -### hackerspaces - - - -Hackerspace - -[Go to the source code](../assets/layers/hackerspaces/hackerspaces.json) - - - - - - - - -#### Themes using this layer - - - - - - - [hackerspaces](https://mapcomplete.osm.be/hackerspaces) - - -### windturbine - - - -[Go to the source code](../assets/layers/windturbine/windturbine.json) - - - - - - - - -#### Themes using this layer - - - - - - - [openwindpowermap](https://mapcomplete.osm.be/openwindpowermap) - - -### postboxes - - - -The layer showing postboxes. - -[Go to the source code](../assets/layers/postboxes/postboxes.json) - - - - - - - - -#### Themes using this layer - - - - - - - [postboxes](https://mapcomplete.osm.be/postboxes) - - -### postoffices - - - -A layer showing post offices. - -[Go to the source code](../assets/layers/postoffices/postoffices.json) - - - - - - - - -#### Themes using this layer - - - - - - - [postboxes](https://mapcomplete.osm.be/postboxes) - - -### lit_streets - - - -[Go to the source code](../assets/layers/lit_streets/lit_streets.json) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - - - -#### Themes using this layer - - - - - - - [street_lighting](https://mapcomplete.osm.be/street_lighting) - - This document is autogenerated from AllKnownLayers.ts \ No newline at end of file diff --git a/Logic/Actors/InstalledThemes.ts b/Logic/Actors/InstalledThemes.ts index b57468524..06c696a77 100644 --- a/Logic/Actors/InstalledThemes.ts +++ b/Logic/Actors/InstalledThemes.ts @@ -4,9 +4,13 @@ import {Utils} from "../../Utils"; import LZString from "lz-string"; import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; +/** + * Gives an overview of themes that are installed in the user preferences + */ export default class InstalledThemes { public installedThemes: UIEventSource<{ layout: LayoutConfig; definition: string }[]>; + constructor(osmConnection: OsmConnection) { this.installedThemes = osmConnection.preferencesHandler.preferences.map<{ layout: LayoutConfig, definition: string }[]>(allPreferences => { const installedThemes: { layout: LayoutConfig, definition: string }[] = []; diff --git a/Logic/Actors/OverpassFeatureSource.ts b/Logic/Actors/OverpassFeatureSource.ts index a630d9880..4510fd733 100644 --- a/Logic/Actors/OverpassFeatureSource.ts +++ b/Logic/Actors/OverpassFeatureSource.ts @@ -10,7 +10,7 @@ import RelationsTracker from "../Osm/RelationsTracker"; import {BBox} from "../BBox"; import Loc from "../../Models/Loc"; import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; -import AllKnownLayers from "../../Customizations/AllKnownLayers"; +import Constants from "../../Models/Constants"; export default class OverpassFeatureSource implements FeatureSource { @@ -122,7 +122,7 @@ export default class OverpassFeatureSource implements FeatureSource { if (typeof (layer) === "string") { throw "A layer was not expanded!" } - if(AllKnownLayers.priviliged_layers.indexOf(layer.id) >= 0){ + if(Constants.priviliged_layers.indexOf(layer.id) >= 0){ continue } if (this.state.locationControl.data.zoom < layer.minzoom) { diff --git a/Logic/Actors/TitleHandler.ts b/Logic/Actors/TitleHandler.ts index a3c4b5081..d20bea7b9 100644 --- a/Logic/Actors/TitleHandler.ts +++ b/Logic/Actors/TitleHandler.ts @@ -29,7 +29,7 @@ export default class TitleHandler { } if (layer.source.osmTags.matchesProperties(tags)) { const tagsSource = state.allElements.getEventSourceById(tags.id) ?? new UIEventSource(tags) - const title = new TagRenderingAnswer(tagsSource, layer.title) + const title = new TagRenderingAnswer(tagsSource, layer.title, {}) return new Combine([defaultTitle, " | ", title]).ConstructElement()?.innerText ?? defaultTitle; } } diff --git a/Logic/DetermineLayout.ts b/Logic/DetermineLayout.ts index b077c5042..8b27cfa1d 100644 --- a/Logic/DetermineLayout.ts +++ b/Logic/DetermineLayout.ts @@ -10,7 +10,9 @@ import {UIEventSource} from "./UIEventSource"; import {LocalStorageSource} from "./Web/LocalStorageSource"; import LZString from "lz-string"; import * as personal from "../assets/themes/personal/personal.json"; -import LegacyJsonConvert from "../Models/ThemeConfig/LegacyJsonConvert"; +import {FixLegacyTheme} from "../Models/ThemeConfig/LegacyJsonConvert"; +import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; +import SharedTagRenderings from "../Customizations/SharedTagRenderings"; export default class DetermineLayout { @@ -43,7 +45,7 @@ export default class DetermineLayout { const path = window.location.pathname.split("/").slice(-1)[0]; - if (path !== "index.html" && path !== "") { + if (path !== "theme.html" && path !== "") { layoutId = path; if (path.endsWith(".html")) { layoutId = path.substr(0, path.length - 5); @@ -104,7 +106,11 @@ export default class DetermineLayout { } } - LegacyJsonConvert.fixThemeConfig(json) + json = new FixLegacyTheme().convertStrict({ + tagRenderings: SharedTagRenderings.SharedTagRenderingJson, + sharedLayers: new Map() // FIXME: actually add the layers + }, json, "While loading a dynamic theme") + const layoutToUse = new LayoutConfig(json, false); userLayoutParam.setData(layoutToUse.id); return [layoutToUse, btoa(Utils.MinifyJSON(JSON.stringify(json)))]; @@ -141,9 +147,12 @@ export default class DetermineLayout { try { - const parsed = await Utils.downloadJson(link) + let parsed = await Utils.downloadJson(link) console.log("Got ", parsed) - LegacyJsonConvert.fixThemeConfig(parsed) + parsed = new FixLegacyTheme().convertStrict({ + tagRenderings: SharedTagRenderings.SharedTagRenderingJson, + sharedLayers: new Map() // FIXME: actually add the layers + }, parsed, "While loading a dynamic theme") try { parsed.id = link; return new LayoutConfig(parsed, false).patchImages(link, JSON.stringify(parsed)); diff --git a/Logic/State/ElementsState.ts b/Logic/State/ElementsState.ts index 90abe4d03..8167f7cb2 100644 --- a/Logic/State/ElementsState.ts +++ b/Logic/State/ElementsState.ts @@ -10,7 +10,6 @@ import {LocalStorageSource} from "../Web/LocalStorageSource"; import {Utils} from "../../Utils"; import ChangeToElementsActor from "../Actors/ChangeToElementsActor"; import PendingChangesUploader from "../Actors/PendingChangesUploader"; -import TitleHandler from "../Actors/TitleHandler"; /** * The part of the state keeping track of where the elements, loading them, configuring the feature pipeline etc @@ -90,7 +89,6 @@ export default class ElementsState extends FeatureSwitchState { new ChangeToElementsActor(this.changes, this.allElements) new PendingChangesUploader(this.changes, this.selectedElement); - new TitleHandler(this); } } \ No newline at end of file diff --git a/Logic/State/MapState.ts b/Logic/State/MapState.ts index a5b13e098..07d3450dc 100644 --- a/Logic/State/MapState.ts +++ b/Logic/State/MapState.ts @@ -17,6 +17,7 @@ import {FeatureSourceForLayer, Tiled} from "../FeatureSource/FeatureSource"; import SimpleFeatureSource from "../FeatureSource/Sources/SimpleFeatureSource"; import {LocalStorageSource} from "../Web/LocalStorageSource"; import {GeoOperations} from "../GeoOperations"; +import TitleHandler from "../Actors/TitleHandler"; /** * Contains all the leaflet-map related state @@ -130,6 +131,8 @@ export default class MapState extends UserRelatedState { this.initGpsLocation() this.initUserLocationTrail() this.initCurrentView() + + new TitleHandler(this); } public AddAllOverlaysToMap(leafletMap: UIEventSource) { diff --git a/Models/Constants.ts b/Models/Constants.ts index 25ea8a2ce..d6438d6dd 100644 --- a/Models/Constants.ts +++ b/Models/Constants.ts @@ -2,7 +2,7 @@ import {Utils} from "../Utils"; export default class Constants { - public static vNumber = "0.13.0-alpha-8"; + public static vNumber = "0.13.0-alpha-9"; public static ImgurApiKey = '7070e7167f0a25a' public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85" @@ -17,6 +17,14 @@ export default class Constants { ] + public static readonly added_by_default: string[] = ["gps_location", "gps_location_history", "home_location", "gps_track"] + public static readonly no_include: string[] = ["conflation", "left_right_style", "split_point","current_view"] + /** + * Layer IDs of layers which have special properties through built-in hooks + */ + public static readonly priviliged_layers: string[] = [...Constants.added_by_default, "type_node", ...Constants.no_include] + + // The user journey states thresholds when a new feature gets unlocked public static userJourney = { moreScreenUnlock: 1, @@ -51,6 +59,7 @@ export default class Constants { * For every bin, the totals are uploaded as metadata */ static distanceToChangeObjectBins = [25,50,100,500,1000,5000, Number.MAX_VALUE] + static themeOrder = ["personal", "cyclofix", "hailhydrant", "bookcases", "toilets", "aed"]; private static isRetina(): boolean { if (Utils.runningFromConsole) { diff --git a/Models/ThemeConfig/Json/LineRenderingConfigJson.ts b/Models/ThemeConfig/Json/LineRenderingConfigJson.ts index 2b2606473..b29f9a991 100644 --- a/Models/ThemeConfig/Json/LineRenderingConfigJson.ts +++ b/Models/ThemeConfig/Json/LineRenderingConfigJson.ts @@ -18,7 +18,7 @@ export default interface LineRenderingConfigJson { /** * The stroke-width for way-elements */ - width?: string | TagRenderingConfigJson; + width?: string | number | TagRenderingConfigJson; /** * A dasharray, e.g. "5 6" diff --git a/Models/ThemeConfig/Json/PointRenderingConfigJson.ts b/Models/ThemeConfig/Json/PointRenderingConfigJson.ts index 75e663361..f214687ba 100644 --- a/Models/ThemeConfig/Json/PointRenderingConfigJson.ts +++ b/Models/ThemeConfig/Json/PointRenderingConfigJson.ts @@ -15,7 +15,7 @@ export default interface PointRenderingConfigJson { * All the locations that this point should be rendered at. * Using `location: ["point", "centroid"] will always render centerpoint */ - location: ("point" | "centroid" | "start" | "end")[] + location: ("point" | "centroid" | "start" | "end" | string)[] /** * The icon for an element. diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts index bce97c06c..68c94a3b0 100644 --- a/Models/ThemeConfig/LayerConfig.ts +++ b/Models/ThemeConfig/LayerConfig.ts @@ -22,7 +22,7 @@ import Title from "../../UI/Base/Title"; import List from "../../UI/Base/List"; import Link from "../../UI/Base/Link"; import {Utils} from "../../Utils"; -import * as icons from "../../assets/tagRenderings/icons.json" +import {tag} from "@turf/turf"; export default class LayerConfig extends WithContextLoader { @@ -230,26 +230,14 @@ export default class LayerConfig extends WithContextLoader { throw "Missing ids in tagrenderings" } - this.tagRenderings = this.ExtractLayerTagRenderings(json, official) - if (official) { - - const emptyIds = this.tagRenderings.filter(tr => tr.id === ""); - if (emptyIds.length > 0) { - throw `Some tagrendering-ids are empty or have an emtpy string; this is not allowed (at ${context})` - } - - const duplicateIds = Utils.Dupicates(this.tagRenderings.map(f => f.id).filter(id => id !== "questions")) - if (duplicateIds.length > 0) { - throw `Some tagRenderings have a duplicate id: ${duplicateIds} (at ${context}.tagRenderings)` - } - } + this.tagRenderings = (json.tagRenderings ?? []).map((tr, i) => new TagRenderingConfig(tr, this.id + ".tagRenderings[" + i + "]")) this.filters = (json.filter ?? []).map((option, i) => { return new FilterConfig(option, `${context}.filter-[${i}]`) }); { - const duplicateIds = Utils.Dupicates(this.filters.map(f => f.id)) + const duplicateIds = Utils.Dupiclates(this.filters.map(f => f.id)) if (duplicateIds.length > 0) { throw `Some filters have a duplicate id: ${duplicateIds} (at ${context}.filters)` } @@ -259,17 +247,8 @@ export default class LayerConfig extends WithContextLoader { throw "Error in " + context + ": use 'filter' instead of 'filters'" } - const titleIcons = []; - const defaultIcons = icons.defaultIcons; - for (const icon of json.titleIcons ?? defaultIcons) { - if (icon === "defaults") { - titleIcons.push(...defaultIcons); - } else { - titleIcons.push(icon); - } - } - this.titleIcons = this.ParseTagRenderings(titleIcons, { + this.titleIcons = this.ParseTagRenderings(( json.titleIcons), { readOnlyMode: true }); @@ -314,109 +293,6 @@ export default class LayerConfig extends WithContextLoader { const defaultTags = new UIEventSource(TagUtils.changeAsProperties(this.source.osmTags.asChange({id: "node/-1"}))) return mapRendering.GenerateLeafletStyle(defaultTags, false, {noSize: true}).html } - - public ExtractLayerTagRenderings(json: LayerConfigJson, official: boolean): TagRenderingConfig[] { - - if (json.tagRenderings === undefined) { - return [] - } - - const normalTagRenderings: (string | { builtin: string, override: any } | TagRenderingConfigJson)[] = [] - - - const renderingsToRewrite: ({ - rewrite: { - sourceString: string, - into: string[] - }, renderings: (string | { builtin: string, override: any } | TagRenderingConfigJson)[] - })[] = [] - for (let i = 0; i < json.tagRenderings.length; i++) { - const tr = json.tagRenderings[i]; - const rewriteDefined = tr["rewrite"] !== undefined - const renderingsDefined = tr["renderings"] - - if (!rewriteDefined && !renderingsDefined) { - // @ts-ignore - normalTagRenderings.push(tr) - continue - } - if (rewriteDefined && renderingsDefined) { - // @ts-ignore - renderingsToRewrite.push(tr) - continue - } - throw `Error in ${this._context}.tagrenderings[${i}]: got a value which defines either \`rewrite\` or \`renderings\`, but not both. Either define both or move the \`renderings\` out of this scope` - } - - const allRenderings = this.ParseTagRenderings(normalTagRenderings, - { - requiresId: official - }); - - if (renderingsToRewrite.length === 0) { - return allRenderings - } - - /* Used for left|right group creation and replacement */ - function prepConfig(keyToRewrite: string, target: string, tr: TagRenderingConfigJson) { - - function replaceRecursive(transl: string | any) { - if (typeof transl === "string") { - return transl.replace(keyToRewrite, target) - } - if (transl.map !== undefined) { - return transl.map(o => replaceRecursive(o)) - } - transl = {...transl} - for (const key in transl) { - transl[key] = replaceRecursive(transl[key]) - } - return transl - } - - const orig = tr; - tr = replaceRecursive(tr) - - tr.id = target + "-" + orig.id - tr.group = target - return tr - } - - const rewriteGroups: Map = new Map() - for (const rewriteGroup of renderingsToRewrite) { - - const tagRenderings = rewriteGroup.renderings - const textToReplace = rewriteGroup.rewrite.sourceString - const targets = rewriteGroup.rewrite.into - for (const target of targets) { - const parsedRenderings = this.ParseTagRenderings(tagRenderings, { - prepConfig: tr => prepConfig(textToReplace, target, tr) - }) - - if (!rewriteGroups.has(target)) { - rewriteGroups.set(target, []) - } - rewriteGroups.get(target).push(...parsedRenderings) - } - } - - - rewriteGroups.forEach((group, groupName) => { - group.push(new TagRenderingConfig({ - id: "questions", - group: groupName - })) - }) - - rewriteGroups.forEach(group => { - allRenderings.push(...group) - }) - - - return allRenderings; - - } - public GenerateDocumentation(usedInThemes: string[], layerIsNeededBy: Map, dependencies: { context?: string; reason: string; @@ -506,5 +382,4 @@ export default class LayerConfig extends WithContextLoader { public isLeftRightSensitive(): boolean { return this.lineRendering.some(lr => lr.leftRightSensitive) } - } \ No newline at end of file diff --git a/Models/ThemeConfig/LayoutConfig.ts b/Models/ThemeConfig/LayoutConfig.ts index 1d9fe8cef..617019b99 100644 --- a/Models/ThemeConfig/LayoutConfig.ts +++ b/Models/ThemeConfig/LayoutConfig.ts @@ -1,12 +1,9 @@ import {Translation} from "../../UI/i18n/Translation"; import {LayoutConfigJson} from "./Json/LayoutConfigJson"; -import AllKnownLayers from "../../Customizations/AllKnownLayers"; -import {Utils} from "../../Utils"; import LayerConfig from "./LayerConfig"; import {LayerConfigJson} from "./Json/LayerConfigJson"; import Constants from "../Constants"; import TilesourceConfig from "./TilesourceConfig"; -import DependencyCalculator from "./DependencyCalculator"; export default class LayoutConfig { public readonly id: string; @@ -15,7 +12,7 @@ export default class LayoutConfig { public readonly version: string; public readonly language: string[]; public readonly title: Translation; - public readonly shortDescription?: Translation; + public readonly shortDescription: Translation; public readonly description: Translation; public readonly descriptionTail?: Translation; public readonly icon: string; @@ -70,14 +67,28 @@ export default class LayoutConfig { } else { this.language = json.language; } - if (this.language.length == 0) { - throw `No languages defined. Define at least one language. (${context}.languages)` - } - if (json.title === undefined) { - throw "Title not defined in " + this.id; - } - if (json.description === undefined) { - throw "Description not defined in " + this.id; + { + if (this.language.length == 0) { + throw `No languages defined. Define at least one language. (${context}.languages)` + } + if (json.title === undefined) { + throw "Title not defined in " + this.id; + } + if (json.description === undefined) { + throw "Description not defined in " + this.id; + } + if (json.widenFactor <= 0) { + throw "Widenfactor too small, shoud be > 0" + } + if (json.widenFactor > 20) { + throw "Widenfactor is very big, use a value between 1 and 5 (current value is " + json.widenFactor + ") at " + context + } + if (json["hideInOverview"]) { + throw "The json for " + this.id + " contains a 'hideInOverview'. Did you mean hideFromOverview instead?" + } + if (json.layers === undefined) { + throw "Got undefined layers for " + json.id + " at " + context + } } this.title = new Translation(json.title, context + ".title"); this.description = new Translation(json.description, context + ".description"); @@ -88,20 +99,13 @@ export default class LayoutConfig { this.startZoom = json.startZoom; this.startLat = json.startLat; this.startLon = json.startLon; - if (json.widenFactor <= 0) { - throw "Widenfactor too small, shoud be > 0" - } - if (json.widenFactor > 20) { - throw "Widenfactor is very big, use a value between 1 and 5 (current value is " + json.widenFactor + ") at " + context - } - this.widenFactor = json.widenFactor ?? 1.5; this.defaultBackgroundId = json.defaultBackgroundId; this.tileLayerSources = (json.tileLayerSources ?? []).map((config, i) => new TilesourceConfig(config, `${this.id}.tileLayerSources[${i}]`)) - const layerInfo = LayoutConfig.ExtractLayers(json, official, context); - this.layers = layerInfo.layers - this.trackAllNodes = layerInfo.extractAllNodes + // At this point, layers should be expanded and validated either by the generateScript or the LegacyJsonConvert + this.layers = json.layers.map(lyrJson => new LayerConfig(lyrJson, json.id + ".layers." + lyrJson["id"], official)); + this.trackAllNodes = this.layers.some(layer => layer.id === "type_node"); this.clustering = { @@ -121,10 +125,6 @@ export default class LayoutConfig { } this.hideFromOverview = json.hideFromOverview ?? false; - // @ts-ignore - if (json.hideInOverview) { - throw "The json for " + this.id + " contains a 'hideInOverview'. Did you mean hideFromOverview instead?" - } this.lockLocation = <[[number, number], [number, number]]>json.lockLocation ?? undefined; this.enableUserBadge = json.enableUserBadge ?? true; this.enableShareScreen = json.enableShareScreen ?? true; @@ -153,120 +153,6 @@ export default class LayoutConfig { } - private static ExtractLayers(json: LayoutConfigJson, official: boolean, context: string): { layers: LayerConfig[], extractAllNodes: boolean } { - const result: LayerConfig[] = [] - let exportAllNodes = false - if(json.layers === undefined){ - throw "Got undefined layers for "+json.id+" at "+context - } - json.layers.forEach((layer, i) => { - - if (typeof layer === "string") { - if (AllKnownLayers.sharedLayersJson.get(layer) !== undefined) { - if (json.overrideAll !== undefined) { - let lyr = JSON.parse(JSON.stringify(AllKnownLayers.sharedLayersJson.get(layer))); - const newLayer = new LayerConfig(Utils.Merge(json.overrideAll, lyr), `${json.id}+overrideAll.layers[${i}]`, official) - result.push(newLayer) - return - } else { - const shared = AllKnownLayers.sharedLayers.get(layer) - if (shared === undefined) { - throw `Shared layer ${layer} not found (at ${context}.layers[${i}])` - } - result.push(shared) - return - } - } else { - console.log("Layer ", layer, " not kown, try one of", Array.from(AllKnownLayers.sharedLayers.keys()).join(", ")) - throw `Unknown builtin layer ${layer} at ${context}.layers[${i}]`; - } - } - - if (layer["builtin"] === undefined) { - if (json.overrideAll !== undefined) { - layer = Utils.Merge(json.overrideAll, layer); - } - // @ts-ignore - result.push(new LayerConfig(layer, `${json.id}.layers[${i}]`, official)) - return - } - - // @ts-ignore - let names = layer.builtin; - if (typeof names === "string") { - names = [names] - } - - // This is a very special layer which triggers special behaviour - exportAllNodes = names.some(name => name === "type_node"); - - names.forEach(name => { - const shared = AllKnownLayers.sharedLayersJson.get(name); - if (shared === undefined) { - throw `Unknown shared/builtin layer ${name} at ${context}.layers[${i}]. Available layers are ${Array.from(AllKnownLayers.sharedLayersJson.keys()).join(", ")}`; - } - let newLayer: LayerConfigJson = Utils.Merge(layer["override"], JSON.parse(JSON.stringify(shared))); // We make a deep copy of the shared layer, in order to protect it from changes - if (json.overrideAll !== undefined) { - newLayer = Utils.Merge(json.overrideAll, newLayer); - } - result.push(new LayerConfig(newLayer, `${json.id}.layers[${i}]`, official)) - return - }) - - }); - - // Some special layers which are always included by default - for (const defaultLayer of AllKnownLayers.added_by_default) { - if (result.some(l => l?.id === defaultLayer)) { - continue; // Already added - } - const sharedLayer = AllKnownLayers.sharedLayers.get(defaultLayer) - if (sharedLayer !== undefined) { - result.push(sharedLayer) - }else if(!AllKnownLayers.runningGenerateScript){ - throw "SharedLayer "+defaultLayer+" not found" - } - } - - if(AllKnownLayers.runningGenerateScript){ - return {layers: result, extractAllNodes: exportAllNodes} - } - // Verify cross-dependencies - let unmetDependencies: { neededLayer: string, neededBy: string, reason: string, context?: string }[] = [] - do { - const dependencies: { neededLayer: string, reason: string, context?: string, neededBy: string }[] = [] - - for (const layerConfig of result) { - const layerDeps = DependencyCalculator.getLayerDependencies(layerConfig) - dependencies.push(...layerDeps) - } - - const loadedLayers = new Set(result.map(r => r.id)) - // During the generate script, builtin layers are verified but not loaded - so we have to add them manually here - // Their existance is checked elsewhere, so this is fine - unmetDependencies = dependencies.filter(dep => !loadedLayers.has(dep.neededLayer)) - for (const unmetDependency of unmetDependencies) { - const dep = AllKnownLayers.sharedLayers.get(unmetDependency.neededLayer) - if (dep === undefined) { - - const message = - ["Loading a dependency failed: layer "+unmetDependency.neededLayer+" is not found, neither as layer of "+json.id+" nor as builtin layer.", - "This layer is needed by "+unmetDependency.neededBy, - unmetDependency.reason+" (at "+unmetDependency.context+")", - "Loaded layers are: "+result.map(l => l.id).join(",") - - ] - throw message.join("\n\t"); - } - result.unshift(dep) - unmetDependencies = unmetDependencies.filter(d => d.neededLayer !== unmetDependency.neededLayer) - } - - } while (unmetDependencies.length > 0) - - return {layers: result, extractAllNodes: exportAllNodes} - } - public CustomCodeSnippets(): string[] { if (this.official) { return []; diff --git a/Models/ThemeConfig/LegacyJsonConvert.ts b/Models/ThemeConfig/LegacyJsonConvert.ts index 818981436..5de97e5e3 100644 --- a/Models/ThemeConfig/LegacyJsonConvert.ts +++ b/Models/ThemeConfig/LegacyJsonConvert.ts @@ -1,14 +1,404 @@ import LineRenderingConfigJson from "./Json/LineRenderingConfigJson"; -import PointRenderingConfig from "./PointRenderingConfig"; +import LayerConfig from "./LayerConfig"; +import Constants from "../Constants"; +import {LayoutConfigJson} from "./Json/LayoutConfigJson"; +import {LayerConfigJson} from "./Json/LayerConfigJson"; +import DependencyCalculator from "./DependencyCalculator"; +import {TagRenderingConfigJson} from "./Json/TagRenderingConfigJson"; +import {Utils} from "../../Utils"; +import LayoutConfig from "./LayoutConfig"; +import {Translation} from "../../UI/i18n/Translation"; -export default class LegacyJsonConvert { +export interface DesugaringContext { + tagRenderings: Map + sharedLayers: Map +} + +abstract class Conversion { + protected readonly doc: string; + public readonly modifiedAttributes: string[]; + + constructor(doc: string, modifiedAttributes: string[] = []) { + this.modifiedAttributes = modifiedAttributes; + this.doc = doc + "\n\nModified attributes are\n" + modifiedAttributes.join(", "); + } + + public convertStrict(state: DesugaringContext, json: TIn, context: string): TOut { + const fixed = this.convert(state, json, context) + return DesugaringStep.strict(fixed) + } + + public static strict(fixed: { errors: string[], warnings: string[], result?: T }): T { + if (fixed.errors?.length > 0) { + throw fixed.errors.join("\n"); + } + fixed.warnings?.forEach(w => console.warn(w)) + return fixed.result; + } + + abstract convert(state: DesugaringContext, json: TIn, context: string): { result: TOut, errors: string[], warnings: string[] } + + public convertAll(state: DesugaringContext, jsons: TIn[], context: string): { result: TOut[], errors: string[], warnings: string[] } { + const result = [] + const errors = [] + const warnings = [] + for (let i = 0; i < jsons.length; i++) { + const json = jsons[i]; + const r = this.convert(state, json, context + "[" + i + "]") + result.push(r.result) + errors.push(...r.errors) + warnings.push(...r.warnings) + } + return { + result, + errors, + warnings + } + } + +} + +abstract class DesugaringStep extends Conversion { +} + +class OnEvery extends DesugaringStep { + private readonly key: string; + private readonly step: DesugaringStep; + + constructor(key: string, step: DesugaringStep) { + super("Applies " + step.constructor.name + " onto every object of the list `key`", [key]); + this.step = step; + this.key = key; + } + + convert(state: DesugaringContext, json: T, context: string): { result: T; errors: string[]; warnings: string[] } { + json = {...json} + const step = this.step + const key = this.key; + const r = step.convertAll(state, (json[key]), context + "." + key) + json[key] = r.result + return { + result: json, + errors: r.errors, + warnings: r.warnings + }; + } +} + +class OnEveryConcat extends DesugaringStep { + private readonly key: string; + private readonly step: Conversion; + + constructor(key: string, step: Conversion) { + super(`Applies ${step.constructor.name} onto every object of the list \`${key}\``, [key]); + this.step = step; + this.key = key; + } + + convert(state: DesugaringContext, json: T, context: string): { result: T; errors: string[]; warnings: string[] } { + json = {...json} + const step = this.step + const key = this.key; + const values = json[key] + if (values === undefined) { + // Move on - nothing to see here! + return { + result: json, + errors: [], + warnings: [] + } + } + const r = step.convertAll(state, (values), context + "." + key) + const vals: X[][] = r.result + json[key] = [].concat(...vals) + return { + result: json, + errors: r.errors, + warnings: r.warnings + }; + + } +} + +class Fuse extends DesugaringStep { + private readonly steps: DesugaringStep[]; + + constructor(doc: string, ...steps: DesugaringStep[]) { + super((doc ?? "") + "This fused pipeline of the following steps: " + steps.map(s => s.constructor.name).join(", "), + Utils.Dedup([].concat(...steps.map(step => step.modifiedAttributes))) + ); + this.steps = steps; + } + + convert(state: DesugaringContext, json: T, context: string): { result: T; errors: string[]; warnings: string[] } { + const errors = [] + const warnings = [] + for (let i = 0; i < this.steps.length; i++){ + const step = this.steps[i]; + let r = step.convert(state, json, context + "(fusion "+this.constructor.name+"."+i+")") + errors.push(...r.errors) + warnings.push(...r.warnings) + json = r.result + if (errors.length > 0) { + break; + } + } + return { + result: json, + errors, + warnings + }; + } + +} + +class ExpandTagRendering extends Conversion { + constructor() { + super("Converts a tagRenderingSpec into the full tagRendering", []); + } + + private lookup(state: DesugaringContext, name: string): TagRenderingConfigJson[] { + if (state.tagRenderings.has(name)) { + return [state.tagRenderings.get(name)] + } + if (name.indexOf(".") >= 0) { + const spl = name.split("."); + const layer = state.sharedLayers.get(spl[0]) + if (spl.length === 2 && layer !== undefined) { + const id = spl[1]; + + const layerTrs = layer.tagRenderings.filter(tr => tr["id"] !== undefined) + let matchingTrs: TagRenderingConfigJson[] + if (id === "*") { + matchingTrs = layerTrs + } else if (id.startsWith("*")) { + const id_ = id.substring(1) + matchingTrs = layerTrs.filter(tr => tr.group === id_) + } else { + matchingTrs = layerTrs.filter(tr => tr.id === id) + } + + + for (let i = 0; i < matchingTrs.length; i++) { + // The matched tagRenderings are 'stolen' from another layer. This means that they must match the layer condition before being shown + const found = Utils.Clone(matchingTrs[i]); + if (found.condition === undefined) { + found.condition = layer.source.osmTags + } else { + found.condition = {and: [found.condition, layer.source.osmTags]} + } + matchingTrs[i] = found + } + + if (matchingTrs.length !== 0) { + return matchingTrs + } + } + } + return undefined; + } + + private convertOnce(state: DesugaringContext, tr: string | any, warnings: string[], errors: string[], ctx: string): TagRenderingConfigJson[] { + if (tr === "questions") { + return [{ + id: "questions" + }] + } + + + if (typeof tr === "string") { + const lookup = this.lookup(state, tr); + if (lookup !== undefined) { + return lookup + } + warnings.push(ctx + "A literal rendering was detected: " + tr) + return [{ + render: tr, + id: tr.replace(/![a-zA-Z0-9]/g, "") + }] + } + + if (tr["builtin"] !== undefined) { + let names = tr["builtin"] + if (typeof names === "string") { + names = [names] + } + const trs: TagRenderingConfigJson[] = [] + for (const name of names) { + const lookup = this.lookup(state, name) + if (lookup === undefined) { + errors.push(ctx + ": The tagRendering with identifier " + name + " was not found.\n\tDid you mean one of " + Array.from(state.tagRenderings.keys()).join(", ") + "?") + continue + } + for (let tr of lookup) { + tr = Utils.Clone(tr) + Utils.Merge(tr["override"] ?? {}, tr) + trs.push(tr) + } + } + return trs; + } + + return [tr] + } + + private convertUntilStable(state: DesugaringContext, spec: string | any, warnings: string[], errors: string[], ctx: string): TagRenderingConfigJson[] { + const trs = this.convertOnce(state, spec, warnings, errors, ctx); + + const result = [] + for (const tr of trs) { + if (tr["builtin"] !== undefined) { + const stable = this.convertUntilStable(state, tr, warnings, errors, ctx + "(RECURSIVE RESOLVE)") + result.push(...stable) + } else { + result.push(tr) + } + } + + return result; + } + + + convert(state: DesugaringContext, json: string | TagRenderingConfigJson | { builtin: string | string[]; override: any }, context: string): { result: TagRenderingConfigJson[]; errors: string[]; warnings: string[] } { + const errors = [] + const warnings = [] + + return { + result: this.convertUntilStable(state, json, warnings, errors, context), + errors, warnings + }; + } +} + +class ExpandGroupRewrite extends Conversion<{ + rewrite: { + sourceString: string, + into: string[] + }[], + renderings: (string | { builtin: string, override: any } | TagRenderingConfigJson)[] +} | TagRenderingConfigJson, TagRenderingConfigJson[]> { + + + private static expandSubTagRenderings = new ExpandTagRendering() + + constructor() { + super( + "Converts a rewrite config for tagRenderings into the expanded form" + ); + } + + /* Used for left|right group creation and replacement */ + private prepConfig(keyToRewrite: string, target: string, tr: TagRenderingConfigJson) { + + function replaceRecursive(transl: string | any) { + if (typeof transl === "string") { + return transl.replace(keyToRewrite, target) + } + if (transl.map !== undefined) { + return transl.map(o => replaceRecursive(o)) + } + transl = {...transl} + for (const key in transl) { + transl[key] = replaceRecursive(transl[key]) + } + return transl + } + + const orig = tr; + tr = replaceRecursive(tr) + + tr.id = target + "-" + orig.id + tr.group = target + return tr + } + + convert(state: DesugaringContext, json: + { + rewrite: + { sourceString: string; into: string[] }[]; renderings: (string | { builtin: string; override: any } | TagRenderingConfigJson)[] + } | TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson[]; errors: string[]; warnings: string[] } { + + if (json["rewrite"] === undefined) { + return {result: [json], errors: [], warnings: []} + } + let config = <{ + rewrite: + { sourceString: string; into: string[] }[]; + renderings: (string | { builtin: string; override: any } | TagRenderingConfigJson)[] + }>json; + + + const subRenderingsRes = ExpandGroupRewrite.expandSubTagRenderings.convertAll(state, config.renderings, context); + const subRenderings: TagRenderingConfigJson[] = [].concat(subRenderingsRes.result); + const errors = subRenderingsRes.errors; + const warnings = subRenderingsRes.warnings; + + + const rewrittenPerGroup = new Map() + + // The actual rewriting + for (const rewrite of config.rewrite) { + const source = rewrite.sourceString; + for (const target of rewrite.into) { + const groupName = target; + const trs: TagRenderingConfigJson[] = [] + + for (const tr of subRenderings) { + trs.push( this.prepConfig(source, target, tr)) + } + if(rewrittenPerGroup.has(groupName)){ + rewrittenPerGroup.get(groupName).push(...trs) + + }else{ + rewrittenPerGroup.set(groupName, trs) + + } + } + } + + // Add questions box for this category + rewrittenPerGroup.forEach((group, groupName) => { + group.push({ + id: "questions", + group: groupName + }) + }) + + + rewrittenPerGroup.forEach((group, groupName) => { + group.forEach(tr => { + if(tr.id === undefined || tr.id === ""){ + errors.push("A tagrendering has an empty ID after expanding the tag") + } + }) + }) + + return { + result: [].concat(...Array.from(rewrittenPerGroup.values())), + errors, warnings + }; + } +} + + +export class UpdateLegacyLayer extends DesugaringStep { + + constructor() { + super("Updates various attributes from the old data format to the new to provide backwards compatibility with the formats", + ["overpassTags", "source.osmtags", "tagRenderings[*].id", "mapRendering"]); + } + + convert(state: {}, json: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings: string[] } { + const warnings = [] + if (typeof json === "string") { + return json + } + if (json["builtin"] !== undefined) { + // @ts-ignore + return json; + } + let config: any = {...json}; - /** - * Updates the config file in-place - * @param config - * @private - */ - public static fixLayerConfig(config: any): void { if (config["overpassTags"]) { config.source = config.source ?? {} config.source.osmTags = config["overpassTags"] @@ -29,6 +419,7 @@ export default class LegacyJsonConvert { } } + if (config.mapRendering === undefined) { config.mapRendering = [] // This is a legacy format, lets create a pointRendering @@ -37,19 +428,18 @@ export default class LegacyJsonConvert { if (wayHandling !== 0) { location = ["point", "centroid"] } - if(config["icon"] ?? config["label"] !== undefined){ - - const pointConfig = { - icon: config["icon"], - iconBadges: config["iconOverlays"], - label: config["label"], - iconSize: config["iconSize"], - location, - rotation: config["rotation"] + if (config["icon"] ?? config["label"] !== undefined) { + + const pointConfig = { + icon: config["icon"], + iconBadges: config["iconOverlays"], + label: config["label"], + iconSize: config["iconSize"], + location, + rotation: config["rotation"] + } + config.mapRendering.push(pointConfig) } - config.mapRendering.push(pointConfig) - } - if (wayHandling !== 1) { const lineRenderConfig = { @@ -61,12 +451,13 @@ export default class LegacyJsonConvert { config.mapRendering.push(lineRenderConfig) } } - if(config.mapRendering.length === 0){ - throw "Could not convert the legacy theme into a new theme: no renderings defined for layer "+config.id + if (config.mapRendering.length === 0) { + throw "Could not convert the legacy theme into a new theme: no renderings defined for layer " + config.id } } + delete config["color"] delete config["width"] delete config["dashArray"] @@ -78,39 +469,470 @@ export default class LegacyJsonConvert { delete config["rotation"] delete config["wayHandling"] delete config["hideUnderlayingFeaturesMinPercentage"] - + for (const mapRenderingElement of config.mapRendering) { if (mapRenderingElement["iconOverlays"] !== undefined) { mapRenderingElement["iconBadges"] = mapRenderingElement["iconOverlays"] } for (const overlay of mapRenderingElement["iconBadges"] ?? []) { if (overlay["badge"] !== true) { - console.log("Warning: non-overlay element for ", config.id) + warnings.push("Warning: non-overlay element for ", config.id) } delete overlay["badge"] } } + return { + result: config, + errors: [], + warnings + }; } +} - /** - * Given an old (parsed) JSON-config, will (in place) fix some issues - * @param oldThemeConfig: the config to update to the latest format - */ - public static fixThemeConfig(oldThemeConfig: any): void { - for (const layerConfig of oldThemeConfig.layers ?? []) { - if (typeof layerConfig === "string" || layerConfig["builtin"] !== undefined) { - continue +class UpdateLegacyTheme extends DesugaringStep { + constructor() { + super("Small fixes in the theme config", ["roamingRenderings"]); + } + + convert(state: DesugaringContext, json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { + const oldThemeConfig = {...json} + if (oldThemeConfig["roamingRenderings"] !== undefined) { + + if (oldThemeConfig["roamingRenderings"].length == 0) { + delete oldThemeConfig["roamingRenderings"] + } else { + return { + result: null, + errors: [context + ": The theme contains roamingRenderings. These are not supported anymore"], + warnings: [] + } } - // @ts-ignore - LegacyJsonConvert.fixLayerConfig(layerConfig) } - - if (oldThemeConfig["roamingRenderings"] !== undefined && oldThemeConfig["roamingRenderings"].length == 0) { - delete oldThemeConfig["roamingRenderings"] + return { + errors: [], + warnings: [], + result: oldThemeConfig } } +} + +export class FixLegacyTheme extends Fuse { + constructor() { + super( + "Fixes a legacy theme to the modern JSON format geared to humans. Syntactic sugars are kept (i.e. no tagRenderings are expandend, no dependencies are automatically gathered)", + new UpdateLegacyTheme(), + new OnEvery("layers", new UpdateLegacyLayer()) + ); + } +} + +export class ValidateLayer extends DesugaringStep { + /** + * The paths where this layer is originally saved. Triggers some extra checks + * @private + */ + private readonly _path?: string; + private readonly knownImagePaths?: Set; + private readonly _isBuiltin: boolean; + + constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { + super("Doesn't change anything, but emits warnings and errors", []); + this.knownImagePaths = knownImagePaths; + this._path = path; + this._isBuiltin = isBuiltin; + } + + convert(state: DesugaringContext, json: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings: string[] } { + const errors = [] + const warnings = [] + + if (typeof json === "string") { + errors.push(context + ": This layer hasn't been expanded: " + json) + return { + result: null, + warnings: [], + errors + } + } + + if (json["builtin"] !== undefined) { + errors.push(context + ": This layer hasn't been expanded: " + json) + return { + result: null, + warnings: [], + errors + } + } + + try { + { + // Some checks for legacy elements + + if (json["overpassTags"] !== undefined) { + errors.push("Layer " + json.id + "still uses the old 'overpassTags'-format. Please use \"source\": {\"osmTags\": }' instead of \"overpassTags\": (note: this isn't your fault, the custom theme generator still spits out the old format)") + } + const forbiddenTopLevel = ["icon", "wayHandling", "roamingRenderings", "roamingRendering", "label", "width", "color", "colour", "iconOverlays"] + for (const forbiddenKey of forbiddenTopLevel) { + if (json[forbiddenKey] !== undefined) + errors.push(context + ": layer " + json.id + " still has a forbidden key " + forbiddenKey) + } + if (json["hideUnderlayingFeaturesMinPercentage"] !== undefined) { + errors.push(context + ": layer " + json.id + " contains an old 'hideUnderlayingFeaturesMinPercentage'") + } + } + { + const layer = new LayerConfig(json, "test", true) + const images = Array.from(layer.ExtractImages()) + const remoteImages = images.filter(img => img.indexOf("http") == 0) + for (const remoteImage of remoteImages) { + errors.push("Found a remote image: " + remoteImage + " in layer " + layer.id + ", please download it. You can use the fixTheme script to automate this") + } + for (const image of images) { + if (image.indexOf("{") >= 0) { + warnings.push("Ignoring image with { in the path: ", image) + continue + } + + if (this.knownImagePaths !== undefined && !this.knownImagePaths.has(image)) { + const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}` + errors.push(`Image with path ${image} not found or not attributed; it is used in ${layer.id}${ctx}`) + } + } + + } + { + // CHeck location + const expected: string = `assets/layers/${json.id}/${json.id}.json` + if (this._path != undefined && this._path.indexOf(expected) < 0) { + errors.push("Layer is in an incorrect place. The path is " + this._path + ", but expected " + expected) + } + } + if (this._isBuiltin ) { + if (json.tagRenderings?.some(tr => tr["id"] === "")) { + const emptyIndexes : number[] = [] + for (let i = 0; i < json.tagRenderings.length; i++){ + const tagRendering = json.tagRenderings[i]; + if(tagRendering["id"] === ""){ + emptyIndexes.push(i) + } + } + errors.push(`Some tagrendering-ids are empty or have an emtpy string; this is not allowed (at ${context}.tagRenderings.[${emptyIndexes.join(",")}])`) + } + + const duplicateIds = Utils.Dupiclates((json.tagRenderings ?? [])?.map(f => f["id"]).filter(id => id !== "questions")) + if (duplicateIds.length > 0 && !Utils.runningFromConsole) { + errors.push(`Some tagRenderings have a duplicate id: ${duplicateIds} (at ${context}.tagRenderings)`) + } + + + if(json.description === undefined){ + + if (Constants.priviliged_layers.indexOf(json.id) >= 0) { + errors.push( + context + ": A priviliged layer must have a description" + ) + } else { + warnings.push( + context + ": A builtin layer should have a description" + ) + }} + } + } catch (e) { + errors.push(e) + } + return { + result: undefined, + errors, + warnings + }; + } +} + +class ValidateLanguageCompleteness extends DesugaringStep { + private readonly _languages: string[]; + + constructor(...languages: string[]) { + super("Checks that the given object is fully translated in the specified languages", []); + this._languages = languages; + } + + convert(state: DesugaringContext, obj: any, context: string): { result: LayerConfig; errors: string[]; warnings: string[] } { + const errors = [] + const translations = Translation.ExtractAllTranslationsFrom( + obj + ) + for (const neededLanguage of this._languages) { + translations + .filter(t => t.tr.translations[neededLanguage] === undefined && t.tr.translations["*"] === undefined) + .forEach(missing => { + errors.push(context + "A theme should be translation-complete for " + neededLanguage + ", but it lacks a translation for " + missing.context + ".\n\tThe english translation is " + missing.tr.textFor('en')) + }) + } + + return { + result: obj, + warnings: [], errors + }; + } +} + +class ValidateTheme extends DesugaringStep { + /** + * The paths where this layer is originally saved. Triggers some extra checks + * @private + */ + private readonly _path?: string; + private readonly knownImagePaths: Set; + private readonly _isBuiltin: boolean; + + constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { + super("Doesn't change anything, but emits warnings and errors", []); + this.knownImagePaths = knownImagePaths; + this._path = path; + this._isBuiltin = isBuiltin; + } + + convert(state: DesugaringContext, json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { + const errors = [] + const warnings = [] + { + // Legacy format checks + if (this._isBuiltin) { + if (typeof json.language === "string") { + errors.push("The theme " + json.id + " has a string as language. Please use a list of strings") + } + if (json["units"] !== undefined) { + errors.push("The theme " + json.id + " has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) ") + } + if (json["roamingRenderings"] !== undefined) { + errors.push("Theme " + json.id + " contains an old 'roamingRenderings'. Use an 'overrideAll' instead") + } + } + } + + try { + const theme = new LayoutConfig(json, true, "test") + if (theme.id !== theme.id.toLowerCase()) { + errors.push("Theme ids should be in lowercase, but it is " + theme.id) + } + + const filename = this._path.substring(this._path.lastIndexOf("/") + 1, this._path.length - 5) + if (theme.id !== filename) { + errors.push("Theme ids should be the same as the name.json, but we got id: " + theme.id + " and filename " + filename + " (" + this._path + ")") + } + if (!this.knownImagePaths.has(theme.icon)) { + errors.push("The theme image " + theme.icon + " is not attributed or not saved locally") + } + const dups = Utils.Dupiclates(json.layers.map(layer => layer["id"])) + if (dups.length > 0) { + errors.push(`The theme ${json.id} defines multiple layers with id ${dups.join(", ")}`) + } + if (json["mustHaveLanguage"] !== undefined) { + const checked = new ValidateLanguageCompleteness(...json["mustHaveLanguage"]) + .convert(state, theme, theme.id) + errors.push(...checked.errors) + warnings.push(...checked.warnings) + } + + } catch (e) { + errors.push(e) + } + + return { + result: json, + errors, + warnings + }; + } +} + +export class ValidateThemeAndLayers extends Fuse { + constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { + super("Validates a theme and the contained layers", + new ValidateTheme(knownImagePaths, path, isBuiltin), + new OnEvery("layers", new ValidateLayer(knownImagePaths, undefined, false)) + ); + } +} + +class AddDependencyLayersToTheme extends DesugaringStep { + constructor() { + super("If a layer has a dependency on another layer, these layers are added automatically on the theme. (For example: defibrillator depends on 'walls_and_buildings' to snap onto. This layer is added automatically)", ["layers"]); + } + + private static CalculateDependencies(alreadyLoaded: LayerConfigJson[], allKnownLayers: Map, themeId: string): LayerConfigJson[] { + const dependenciesToAdd: LayerConfigJson[] = [] + const loadedLayerIds: Set = new Set(alreadyLoaded.map(l => l.id)); + + // Verify cross-dependencies + let unmetDependencies: { neededLayer: string, neededBy: string, reason: string, context?: string }[] = [] + do { + const dependencies: { neededLayer: string, reason: string, context?: string, neededBy: string }[] = [] + + for (const layerConfig of alreadyLoaded) { + const layerDeps = DependencyCalculator.getLayerDependencies(new LayerConfig(layerConfig)) + dependencies.push(...layerDeps) + } + + // During the generate script, builtin layers are verified but not loaded - so we have to add them manually here + // Their existance is checked elsewhere, so this is fine + unmetDependencies = dependencies.filter(dep => !loadedLayerIds.has(dep.neededLayer)) + for (const unmetDependency of unmetDependencies) { + if(loadedLayerIds.has(unmetDependency.neededLayer)){ + continue + } + const dep = allKnownLayers.get(unmetDependency.neededLayer) + if (dep === undefined) { + const message = + ["Loading a dependency failed: layer " + unmetDependency.neededLayer + " is not found, neither as layer of " + themeId + " nor as builtin layer.", + "This layer is needed by " + unmetDependency.neededBy, + unmetDependency.reason + " (at " + unmetDependency.context + ")", + "Loaded layers are: " + alreadyLoaded.map(l => l.id).join(",") + + ] + throw message.join("\n\t"); + } + dependenciesToAdd.unshift(dep) + loadedLayerIds.add(dep.id); + unmetDependencies = unmetDependencies.filter(d => d.neededLayer !== unmetDependency.neededLayer) + } + + } while (unmetDependencies.length > 0) + + return dependenciesToAdd; + } + + convert(state: DesugaringContext, theme: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { + const allKnownLayers: Map = state.sharedLayers; + const knownTagRenderings: Map = state.tagRenderings; + const errors = []; + const warnings = []; + const layers: LayerConfigJson[] = theme.layers; // Layers should be expanded at this point + + knownTagRenderings.forEach((value, key) => { + value.id = key; + }) + + const dependencies = AddDependencyLayersToTheme.CalculateDependencies(layers, allKnownLayers, theme.id); + if(dependencies.length > 0){ + + warnings.push(context+": added "+dependencies.map(d => d.id).join(", ")+" to the theme as they are needed") + } + layers.unshift(...dependencies); + + return { + result: { + ...theme, + layers: layers + }, + errors, + warnings + }; + } +} + +export class PrepareLayer extends Fuse { + constructor() { + super( + "Fully prepares and expands a layer for the LayerConfig.", + new OnEveryConcat("tagRenderings", new ExpandGroupRewrite()), + new OnEveryConcat("tagRenderings", new ExpandTagRendering()), + new OnEveryConcat("titleIcons", new ExpandTagRendering()) + ); + } +} + +class SubstituteLayer extends Conversion<(string | LayerConfigJson), LayerConfigJson[]> { + constructor() { + super("Converts the identifier of a builtin layer into the actual layer, or converts a 'builtin' syntax with override in the fully expanded form", []); + } + + convert(state: DesugaringContext, json: string | LayerConfigJson, context: string): { result: LayerConfigJson[]; errors: string[]; warnings: string[] } { + const errors = [] + const warnings = [] + if (typeof json === "string") { + const found = state.sharedLayers.get(json) + if (found === undefined) { + return { + result: null, + errors: [context + ": The layer with name " + json + " was not found as a builtin layer"], + warnings + } + } + return { + result: [found], + errors, warnings + } + } + + if (json["builtin"] !== undefined) { + let names = json["builtin"] + if (typeof names === "string") { + names = [names] + } + const layers = [] + for (const name of names) { + const found = Utils.Clone(state.sharedLayers.get(name)) + if (found === undefined) { + errors.push(context + ": The layer with name " + json + " was not found as a builtin layer") + continue + } + Utils.Merge(json["override"], found); + layers.push(found) + } + return { + result: layers, + errors, warnings + } + + } + + return { + result: [json], + errors, warnings + }; + } + +} + +class AddDefaultLayers extends DesugaringStep{ + + constructor() { + super("Adds the default layers, namely: "+Constants.added_by_default.join(", "),["layers"]); + } + + convert(state: DesugaringContext, json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { + const errors = [] + json.layers = [...json.layers] + for (const layerName of Constants.added_by_default) { + const v = state.sharedLayers.get(layerName) + if(v === undefined){ + errors.push("Default layer "+layerName+" not found") + } + json.layers.push(v) + } + return { + result: json, + errors, + warnings: [] + }; + } + +} + +export class PrepareTheme extends Fuse { + constructor() { + super( + "Fully prepares and expands a theme", + new OnEveryConcat("layers", new SubstituteLayer()), + new AddDefaultLayers(), + new AddDependencyLayersToTheme(), + new OnEvery("layers", new PrepareLayer()), + + ); + } } \ No newline at end of file diff --git a/Models/ThemeConfig/PointRenderingConfig.ts b/Models/ThemeConfig/PointRenderingConfig.ts index 7160a251d..32d0b2caa 100644 --- a/Models/ThemeConfig/PointRenderingConfig.ts +++ b/Models/ThemeConfig/PointRenderingConfig.ts @@ -16,7 +16,7 @@ import {VariableUiElement} from "../../UI/Base/VariableUIElement"; export default class PointRenderingConfig extends WithContextLoader { private static readonly allowed_location_codes = new Set(["point", "centroid", "start", "end"]) - public readonly location: Set<"point" | "centroid" | "start" | "end"> + public readonly location: Set<"point" | "centroid" | "start" | "end" | string> public readonly icon: TagRenderingConfig; public readonly iconBadges: { if: TagsFilter; then: TagRenderingConfig }[]; diff --git a/Models/ThemeConfig/TagRenderingConfig.ts b/Models/ThemeConfig/TagRenderingConfig.ts index c9674097f..23f617583 100644 --- a/Models/ThemeConfig/TagRenderingConfig.ts +++ b/Models/ThemeConfig/TagRenderingConfig.ts @@ -40,7 +40,6 @@ export default class TagRenderingConfig { readonly hideInAnswer: boolean | TagsFilter readonly addExtraTags: Tag[] }[] - constructor(json: string | TagRenderingConfigJson, context?: string) { if (json === undefined) { throw "Initing a TagRenderingConfig with undefined in " + context; @@ -69,7 +68,7 @@ export default class TagRenderingConfig { } - this.id = json.id ?? ""; + this.id = json.id ?? ""; // Some tagrenderings - especially for the map rendering - don't need an ID if (this.id.match(/^[a-zA-Z0-9 ()?\/=:;,_-]*$/) === null) { throw "Invalid ID in " + context + ": an id can only contain [a-zA-Z0-0_-] as characters. The offending id is: " + this.id } diff --git a/Models/ThemeConfig/WithContextLoader.ts b/Models/ThemeConfig/WithContextLoader.ts index b6087143d..5f59e65c8 100644 --- a/Models/ThemeConfig/WithContextLoader.ts +++ b/Models/ThemeConfig/WithContextLoader.ts @@ -1,20 +1,10 @@ import TagRenderingConfig from "./TagRenderingConfig"; import SharedTagRenderings from "../../Customizations/SharedTagRenderings"; import {TagRenderingConfigJson} from "./Json/TagRenderingConfigJson"; -import {Utils} from "../../Utils"; export default class WithContextLoader { protected readonly _context: string; private readonly _json: any; - - public static getKnownTagRenderings : ((id: string) => TagRenderingConfigJson[])= function(id) { - const found = SharedTagRenderings.SharedTagRenderingJson.get(id) - if(found !== undefined){ - return [found] - }else{ - return [] - } -} constructor(json: any, context: string) { this._json = json; @@ -53,15 +43,15 @@ export default class WithContextLoader { * A string is interpreted as a name to call */ public ParseTagRenderings( - tagRenderings: (string | { builtin: string, override: any } | TagRenderingConfigJson)[], - options?:{ + tagRenderings: TagRenderingConfigJson[], + options?: { /** * Throw an error if 'question' is defined */ readOnlyMode?: boolean, requiresId?: boolean prepConfig?: ((config: TagRenderingConfigJson) => TagRenderingConfigJson) - + } ): TagRenderingConfig[] { if (tagRenderings === undefined) { @@ -73,62 +63,17 @@ export default class WithContextLoader { if (options.prepConfig === undefined) { options.prepConfig = c => c } - const preparedConfigs : TagRenderingConfigJson[] = [] - for (let i = 0; i < tagRenderings.length; i++) { - let renderingJson = tagRenderings[i] - if(renderingJson === "questions"){ - renderingJson = { - id: "questions" - } - } - if (typeof renderingJson === "string") { - renderingJson = {builtin: renderingJson, override: undefined} - } - - if (renderingJson["builtin"] === undefined) { - const patchedConfig = options.prepConfig(renderingJson) - preparedConfigs.push(patchedConfig) - continue - - } - - - const renderingId = renderingJson["builtin"] - let sharedJsons = [] - if(typeof renderingId === "string"){ - sharedJsons = WithContextLoader.getKnownTagRenderings(renderingId) - }else{ - sharedJsons = [].concat( ...(renderingId).map(id => WithContextLoader.getKnownTagRenderings(id) ) ) - } - - if (sharedJsons.length === 0) { - const keys = Array.from(SharedTagRenderings.SharedTagRenderingJson.keys()); - throw `Predefined tagRendering ${renderingId} not found in ${context}.\n Try one of ${keys.join( - ", " - )}\n If you intent to output this text literally, use {\"render\": } instead"}`; - } - for (let sharedJson of sharedJsons) { - if (renderingJson["override"] !== undefined) { - sharedJson = Utils.Merge(renderingJson["override"], JSON.parse(JSON.stringify(sharedJson))) - } - - const patchedConfig = options.prepConfig(sharedJson) - preparedConfigs.push(patchedConfig) - } - - } - const renderings: TagRenderingConfig[] = [] - for (let i = 0; i < preparedConfigs.length; i++){ - const preparedConfig = preparedConfigs[i]; + for (let i = 0; i < tagRenderings.length; i++) { + const preparedConfig = tagRenderings[i]; const tr = new TagRenderingConfig(preparedConfig, `${context}.tagrendering[${i}]`); - if(options.readOnlyMode && tr.question !== undefined){ - throw "A question is defined for "+`${context}.tagrendering[${i}], but this is not allowed at this position - probably because this rendering is an icon, badge or label` + if (options.readOnlyMode && tr.question !== undefined) { + throw "A question is defined for " + `${context}.tagrendering[${i}], but this is not allowed at this position - probably because this rendering is an icon, badge or label` } - if(options.requiresId && tr.id === ""){ + if (options.requiresId && tr.id === "") { throw `${context}.tagrendering[${i}] has an invalid ID - make sure it is defined and not empty` } - + renderings.push(tr) } diff --git a/UI/AllThemesGui.ts b/UI/AllThemesGui.ts index 3c83e2a49..ebdc64583 100644 --- a/UI/AllThemesGui.ts +++ b/UI/AllThemesGui.ts @@ -1,9 +1,9 @@ +import UserRelatedState from "../Logic/State/UserRelatedState"; import {FixedUiElement} from "./Base/FixedUiElement"; import Combine from "./Base/Combine"; import MoreScreen from "./BigComponents/MoreScreen"; import Translations from "./i18n/Translations"; import Constants from "../Models/Constants"; -import UserRelatedState from "../Logic/State/UserRelatedState"; import {Utils} from "../Utils"; import LanguagePicker from "./LanguagePicker"; import IndexText from "./BigComponents/IndexText"; @@ -13,7 +13,6 @@ import {SubtleButton} from "./Base/SubtleButton"; export default class AllThemesGui { constructor() { - try { new FixedUiElement("").AttachTo("centermessage") @@ -41,6 +40,7 @@ export default class AllThemesGui { .SetStyle("pointer-events: all;") .AttachTo("topleft-tools"); } catch (e) { + console.error(">>>> CRITICAL", e) new FixedUiElement("Seems like no layers are compiled - check the output of `npm run generate:layeroverview`. Is this visible online? Contact pietervdvn immediately!").SetClass("alert") .AttachTo("centermessage") } diff --git a/UI/AutomatonGui.ts b/UI/AutomatonGui.ts index 036d64e95..7712191bb 100644 --- a/UI/AutomatonGui.ts +++ b/UI/AutomatonGui.ts @@ -27,6 +27,7 @@ import {QueryParameters} from "../Logic/Web/QueryParameters"; import {SubstitutedTranslation} from "./SubstitutedTranslation"; import {AutoAction} from "./Popup/AutoApplyButton"; import DynamicGeoJsonTileSource from "../Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource"; +import * as themeOverview from "../assets/generated/theme_overview.json" class AutomationPanel extends Combine{ @@ -177,7 +178,7 @@ class AutomationPanel extends Combine{ const feature = ffs.feature const renderingTr = targetAction.GetRenderValue(feature.properties) const rendering = renderingTr.txt - log.push(""+feature.properties.id+": "+new SubstitutedTranslation(renderingTr, new UIEventSource(feature.properties)).ConstructElement().innerText) + log.push(""+feature.properties.id+": "+new SubstitutedTranslation(renderingTr, new UIEventSource(feature.properties), state).ConstructElement().innerText) const actions = Utils.NoNull(SubstitutedTranslation.ExtractSpecialComponents(rendering) .map(obj => obj.special)) for (const action of actions) { @@ -251,7 +252,7 @@ class AutomatonGui { private static GenerateMainPanel(): BaseUIElement { const themeSelect = new DropDown("Select a theme", - AllKnownLayouts.layoutsList.map(l => ({value: l.id, shown: l.id})) + Array.from(themeOverview).map(l => ({value: l.id, shown: l.id})) ) LocalStorageSource.Get("automation-theme-id", "missing_streets").syncWith(themeSelect.GetValue()) diff --git a/UI/BigComponents/FeaturedMessage.ts b/UI/BigComponents/FeaturedMessage.ts index 508f1be0c..f1a3af01e 100644 --- a/UI/BigComponents/FeaturedMessage.ts +++ b/UI/BigComponents/FeaturedMessage.ts @@ -3,7 +3,7 @@ import * as welcome_messages from "../../assets/welcome_message.json" import BaseUIElement from "../BaseUIElement"; import {FixedUiElement} from "../Base/FixedUiElement"; import MoreScreen from "./MoreScreen"; -import {AllKnownLayouts} from "../../Customizations/AllKnownLayouts"; +import * as themeOverview from "../../assets/generated/theme_overview.json" import Translations from "../i18n/Translations"; import Title from "../Base/Title"; @@ -33,6 +33,12 @@ export default class FeaturedMessage extends Combine { public static WelcomeMessages(): { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] { const all_messages: { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] = [] + + const themesById = new Map(); + for (const theme of themeOverview["default"]) { + themesById.set(theme.id, theme); + } + for (const i in welcome_messages) { if (isNaN(Number(i))) { continue @@ -41,7 +47,8 @@ export default class FeaturedMessage extends Combine { if (wm === null) { continue } - if (AllKnownLayouts.allKnownLayouts.get(wm.featured_theme) === undefined) { + if (themesById.get(wm.featured_theme) === undefined) { + console.log("THEMES BY ID:", themesById) console.error("Unkown featured theme for ", wm) continue } @@ -71,7 +78,10 @@ export default class FeaturedMessage extends Combine { const msg = new FixedUiElement(welcome_message.message).SetClass("link-underline font-lg") els.push(new Combine([title, msg]).SetClass("m-4")) if (welcome_message.featured_theme !== undefined) { - els.push(MoreScreen.createLinkButton({}, AllKnownLayouts.allKnownLayouts.get(welcome_message.featured_theme)) + + const theme = themeOverview["default"].filter(th => th.id === welcome_message.featured_theme)[0]; + + els.push(MoreScreen.createLinkButton({}, theme) .SetClass("m-4 self-center md:w-160") .SetStyle("height: min-content;")) diff --git a/UI/BigComponents/LicensePicker.ts b/UI/BigComponents/LicensePicker.ts index 7e92e4845..ffedc5c10 100644 --- a/UI/BigComponents/LicensePicker.ts +++ b/UI/BigComponents/LicensePicker.ts @@ -1,18 +1,18 @@ import {DropDown} from "../Input/DropDown"; import Translations from "../i18n/Translations"; -import State from "../../State"; import {UIEventSource} from "../../Logic/UIEventSource"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; export default class LicensePicker extends DropDown { - constructor() { + constructor(state: {osmConnection: OsmConnection}) { super(Translations.t.image.willBePublished.Clone(), [ {value: "CC0", shown: Translations.t.image.cco.Clone()}, {value: "CC-BY-SA 4.0", shown: Translations.t.image.ccbs.Clone()}, {value: "CC-BY 4.0", shown: Translations.t.image.ccb.Clone()} ], - State.state?.osmConnection?.GetPreference("pictures-license") ?? new UIEventSource("CC0") + state?.osmConnection?.GetPreference("pictures-license") ?? new UIEventSource("CC0") ) this.SetClass("flex flex-col sm:flex-row").SetStyle("float:left"); } diff --git a/UI/BigComponents/MoreScreen.ts b/UI/BigComponents/MoreScreen.ts index 6e5cbd988..066f39964 100644 --- a/UI/BigComponents/MoreScreen.ts +++ b/UI/BigComponents/MoreScreen.ts @@ -1,5 +1,4 @@ import {VariableUiElement} from "../Base/VariableUIElement"; -import {AllKnownLayouts} from "../../Customizations/AllKnownLayouts"; import Svg from "../../Svg"; import Combine from "../Base/Combine"; import {SubtleButton} from "../Base/SubtleButton"; @@ -15,6 +14,8 @@ import UserRelatedState from "../../Logic/State/UserRelatedState"; import Toggle from "../Input/Toggle"; import {Utils} from "../../Utils"; import Title from "../Base/Title"; +import * as themeOverview from "../../assets/generated/theme_overview.json" +import {Translation} from "../i18n/Translation"; export default class MoreScreen extends Combine { @@ -47,7 +48,12 @@ export default class MoreScreen extends Combine { state: { locationControl?: UIEventSource, layoutToUse?: LayoutConfig - }, layout: LayoutConfig, customThemeDefinition: string = undefined + }, layout: { + id: string, + icon: string, + title: any, + shortDescription: any + }, customThemeDefinition: string = undefined ): BaseUIElement { if (layout === undefined) { @@ -75,11 +81,11 @@ export default class MoreScreen extends Combine { let linkPrefix = `${path}/${layout.id.toLowerCase()}.html?` let linkSuffix = "" if (location.hostname === "localhost" || location.hostname === "127.0.0.1") { - linkPrefix = `${path}/index.html?layout=${layout.id}&` + linkPrefix = `${path}/theme.html?layout=${layout.id}&` } if (customThemeDefinition) { - linkPrefix = `${path}/index.html?userlayout=${layout.id}&` + linkPrefix = `${path}/theme.html?userlayout=${layout.id}&` linkSuffix = `#${customThemeDefinition}` } @@ -98,10 +104,10 @@ export default class MoreScreen extends Combine { return new SubtleButton(layout.icon, new Combine([ `
`, - Translations.WT(layout.title), + new Translation(layout.title), `
`, `
`, - Translations.WT(layout.shortDescription)?.SetClass("subtle") ?? "", + new Translation(layout.shortDescription)?.SetClass("subtle") ?? "", `
`, ]), {url: linkText, newTab: false}); } @@ -122,27 +128,29 @@ export default class MoreScreen extends Combine { private static createPreviouslyVistedHiddenList(state: UserRelatedState, buttonClass: string, themeListStyle: string) { const t = Translations.t.general.morescreen const prefix = "mapcomplete-hidden-theme-" - const hiddenTotal = AllKnownLayouts.layoutsList.filter(layout => layout.hideFromOverview).length + const hiddenThemes = themeOverview["default"].filter(layout => layout.hideFromOverview) + const hiddenTotal = hiddenThemes.length + return new Toggle( new VariableUiElement( state.osmConnection.preferencesHandler.preferences.map(allPreferences => { - const knownThemes = Utils.NoNull(Object.keys(allPreferences) + const knownThemes: Set = new Set(Utils.NoNull(Object.keys(allPreferences) .filter(key => key.startsWith(prefix)) - .map(key => key.substring(prefix.length, key.length - "-enabled".length)) - .map(theme => AllKnownLayouts.allKnownLayouts.get(theme))) - .filter(theme => theme?.hideFromOverview) - if (knownThemes.length === 0) { + .map(key => key.substring(prefix.length, key.length - "-enabled".length)))); + + if(knownThemes.size === 0){ return undefined } + + const knownThemeDescriptions = hiddenThemes.filter(theme => knownThemes.has(theme.id)) + .map(theme => MoreScreen.createLinkButton(state, theme)?.SetClass(buttonClass)); - const knownLayouts = new Combine(knownThemes.map(layout => - MoreScreen.createLinkButton(state, layout)?.SetClass(buttonClass) - )).SetClass(themeListStyle) + const knownLayouts = new Combine(knownThemeDescriptions).SetClass(themeListStyle) return new Combine([ new Title(t.previouslyHiddenTitle), t.hiddenExplanation.Subs({ - hidden_discovered: "" + knownThemes.length, + hidden_discovered: "" + knownThemes.size, total_hidden: "" + hiddenTotal }), knownLayouts @@ -158,7 +166,7 @@ export default class MoreScreen extends Combine { } private static createOfficialThemesList(state: { osmConnection: OsmConnection, locationControl?: UIEventSource }, buttonClass: string): BaseUIElement { - let officialThemes = AllKnownLayouts.layoutsList + let officialThemes = themeOverview["default"]; let buttons = officialThemes.map((layout) => { if (layout === undefined) { diff --git a/UI/DefaultGUI.ts b/UI/DefaultGUI.ts index ebce8f1a8..c07dbf7bb 100644 --- a/UI/DefaultGUI.ts +++ b/UI/DefaultGUI.ts @@ -15,13 +15,14 @@ import LeftControls from "./BigComponents/LeftControls"; import RightControls from "./BigComponents/RightControls"; import CenterMessageBox from "./CenterMessageBox"; import ShowDataLayer from "./ShowDataLayer/ShowDataLayer"; -import AllKnownLayers from "../Customizations/AllKnownLayers"; import ScrollableFullScreen from "./Base/ScrollableFullScreen"; import Translations from "./i18n/Translations"; import SimpleAddUI from "./BigComponents/SimpleAddUI"; import StrayClickHandler from "../Logic/Actors/StrayClickHandler"; import Lazy from "./Base/Lazy"; import {DefaultGuiState} from "./DefaultGuiState"; +import LayerConfig from "../Models/ThemeConfig/LayerConfig"; +import * as home_location_json from "../assets/layers/home_location/home_location.json"; /** @@ -111,7 +112,7 @@ export default class DefaultGUI { new ShowDataLayer({ leafletMap: state.leafletMap, - layerToShow: AllKnownLayers.sharedLayers.get("home_location"), + layerToShow: new LayerConfig(home_location_json, "all_known_layers", true), features: state.homeLocation, enablePopups: false, }) diff --git a/UI/Image/DeleteImage.ts b/UI/Image/DeleteImage.ts index baa75d262..a2e5cfa55 100644 --- a/UI/Image/DeleteImage.ts +++ b/UI/Image/DeleteImage.ts @@ -2,20 +2,21 @@ import {UIEventSource} from "../../Logic/UIEventSource"; import Translations from "../i18n/Translations"; import Toggle from "../Input/Toggle"; import Combine from "../Base/Combine"; -import State from "../../State"; import Svg from "../../Svg"; import {Tag} from "../../Logic/Tags/Tag"; import ChangeTagAction from "../../Logic/Osm/Actions/ChangeTagAction"; +import {Changes} from "../../Logic/Osm/Changes"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; export default class DeleteImage extends Toggle { - constructor(key: string, tags: UIEventSource) { + constructor(key: string, tags: UIEventSource, state: {changes?: Changes, osmConnection?: OsmConnection}) { const oldValue = tags.data[key] const isDeletedBadge = Translations.t.image.isDeleted.Clone() .SetClass("rounded-full p-1") .SetStyle("color:white;background:#ff8c8c") .onClick(async () => { - await State.state?.changes?.applyAction(new ChangeTagAction(tags.data.id, new Tag(key, oldValue), tags.data, { + await state?.changes?.applyAction(new ChangeTagAction(tags.data.id, new Tag(key, oldValue), tags.data, { changeType: "answer", theme: "test" })) @@ -25,7 +26,7 @@ export default class DeleteImage extends Toggle { .SetClass("block w-full pl-4 pr-4") .SetStyle("color:white;background:#ff8c8c; border-top-left-radius:30rem; border-top-right-radius: 30rem;") .onClick(async () => { - await State.state?.changes?.applyAction( + await state?.changes?.applyAction( new ChangeTagAction(tags.data.id, new Tag(key, ""), tags.data, { changeType: "answer", theme: "test" @@ -53,7 +54,7 @@ export default class DeleteImage extends Toggle { tags.map(tags => (tags[key] ?? "") !== "") ), undefined /*Login (and thus editing) is disabled*/, - State.state.osmConnection.isLoggedIn + state.osmConnection.isLoggedIn ) this.SetClass("cursor-pointer") } diff --git a/UI/Image/ImageCarousel.ts b/UI/Image/ImageCarousel.ts index c0fc52eda..1d4d7ef43 100644 --- a/UI/Image/ImageCarousel.ts +++ b/UI/Image/ImageCarousel.ts @@ -6,12 +6,14 @@ import {AttributedImage} from "./AttributedImage"; import BaseUIElement from "../BaseUIElement"; import Toggle from "../Input/Toggle"; import ImageProvider from "../../Logic/ImageProviders/ImageProvider"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; +import {Changes} from "../../Logic/Osm/Changes"; export class ImageCarousel extends Toggle { constructor(images: UIEventSource<{ key: string, url: string, provider: ImageProvider }[]>, tags: UIEventSource, - keys: string[]) { + state: {osmConnection?: OsmConnection, changes?: Changes}) { const uiElements = images.map((imageURLS: { key: string, url: string, provider: ImageProvider }[]) => { const uiElements: BaseUIElement[] = []; for (const url of imageURLS) { @@ -21,7 +23,7 @@ export class ImageCarousel extends Toggle { if (url.key !== undefined) { image = new Combine([ image, - new DeleteImage(url.key, tags).SetClass("delete-image-marker absolute top-0 left-0 pl-3") + new DeleteImage(url.key, tags, state).SetClass("delete-image-marker absolute top-0 left-0 pl-3") ]).SetClass("relative"); } image diff --git a/UI/Image/ImageUploadFlow.ts b/UI/Image/ImageUploadFlow.ts index 5a49d8d72..476a9c2a9 100644 --- a/UI/Image/ImageUploadFlow.ts +++ b/UI/Image/ImageUploadFlow.ts @@ -1,5 +1,4 @@ import {UIEventSource} from "../../Logic/UIEventSource"; -import State from "../../State"; import Combine from "../Base/Combine"; import Translations from "../i18n/Translations"; import Svg from "../../Svg"; @@ -13,13 +12,23 @@ import ChangeTagAction from "../../Logic/Osm/Actions/ChangeTagAction"; import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; import {FixedUiElement} from "../Base/FixedUiElement"; import {VariableUiElement} from "../Base/VariableUIElement"; +import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; +import {Changes} from "../../Logic/Osm/Changes"; export class ImageUploadFlow extends Toggle { private static readonly uploadCountsPerId = new Map>() - constructor(tagsSource: UIEventSource, imagePrefix: string = "image", text: string = undefined) { + constructor(tagsSource: UIEventSource, + state: { + osmConnection: OsmConnection; + layoutToUse: LayoutConfig; + changes: Changes, + featureSwitchUserbadge: UIEventSource; + }, + imagePrefix: string = "image", text: string = undefined) { const perId = ImageUploadFlow.uploadCountsPerId const id = tagsSource.data.id if (!perId.has(id)) { @@ -41,17 +50,17 @@ export class ImageUploadFlow extends Toggle { console.log("Adding image:" + key, url); uploadedCount.data++ uploadedCount.ping() - Promise.resolve(State.state.changes + Promise.resolve(state.changes .applyAction(new ChangeTagAction( tags.id, new Tag(key, url), tagsSource.data, { changeType: "add-image", - theme: State.state.layoutToUse.id + theme: state.layoutToUse.id } ))) }) - const licensePicker = new LicensePicker() + const licensePicker = new LicensePicker(state) const t = Translations.t.image; @@ -90,7 +99,7 @@ export class ImageUploadFlow extends Toggle { const tags = tagsSource.data; - const layout = State.state?.layoutToUse + const layout = state?.layoutToUse let matchingLayer: LayerConfig = undefined for (const layer of layout?.layers ?? []) { if (layer.source.osmTags.matchesProperties(tags)) { @@ -102,7 +111,7 @@ export class ImageUploadFlow extends Toggle { const title = matchingLayer?.title?.GetRenderValue(tags)?.ConstructElement()?.innerText ?? tags.name ?? "Unknown area"; const description = [ - "author:" + State.state.osmConnection.userDetails.data.name, + "author:" + state.osmConnection.userDetails.data.name, "license:" + license, "osmid:" + tags.id, ].join("\n"); @@ -146,17 +155,17 @@ export class ImageUploadFlow extends Toggle { const pleaseLoginButton = t.pleaseLogin.Clone() - .onClick(() => State.state.osmConnection.AttemptLogin()) + .onClick(() => state.osmConnection.AttemptLogin()) .SetClass("login-button-friendly"); super( new Toggle( /*We can show the actual upload button!*/ uploadFlow, /* User not logged in*/ pleaseLoginButton, - State.state?.osmConnection?.isLoggedIn + state?.osmConnection?.isLoggedIn ), undefined /* Nothing as the user badge is disabled*/, - State.state.featureSwitchUserbadge + state.featureSwitchUserbadge ) } diff --git a/UI/OpeningHours/OpeningHoursVisualization.ts b/UI/OpeningHours/OpeningHoursVisualization.ts index 9a2a30800..2414fc00f 100644 --- a/UI/OpeningHours/OpeningHoursVisualization.ts +++ b/UI/OpeningHours/OpeningHoursVisualization.ts @@ -1,6 +1,5 @@ import {UIEventSource} from "../../Logic/UIEventSource"; import Combine from "../Base/Combine"; -import State from "../../State"; import {FixedUiElement} from "../Base/FixedUiElement"; import {OH} from "./OpeningHours"; import Translations from "../i18n/Translations"; @@ -11,6 +10,7 @@ import Toggle from "../Input/Toggle"; import {VariableUiElement} from "../Base/VariableUIElement"; import Table from "../Base/Table"; import {Translation} from "../i18n/Translation"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; export default class OpeningHoursVisualization extends Toggle { private static readonly weekdays: Translation[] = [ @@ -23,7 +23,7 @@ export default class OpeningHoursVisualization extends Toggle { Translations.t.general.weekdays.abbreviations.sunday, ] - constructor(tags: UIEventSource, key: string, prefix = "", postfix = "") { + constructor(tags: UIEventSource, state:{osmConnection?: OsmConnection}, key: string, prefix = "", postfix = "") { const tagsDirect = tags.data; const ohTable = new VariableUiElement(tags .map(tags => { @@ -57,7 +57,7 @@ export default class OpeningHoursVisualization extends Toggle { new Toggle( new FixedUiElement(e).SetClass("subtle"), undefined, - State.state?.osmConnection?.userDetails.map(userdetails => userdetails.csCount >= Constants.userJourney.tagsVisibleAndWikiLinked) + state?.osmConnection?.userDetails.map(userdetails => userdetails.csCount >= Constants.userJourney.tagsVisibleAndWikiLinked) ) ]); } diff --git a/UI/Popup/EditableTagRendering.ts b/UI/Popup/EditableTagRendering.ts index 48cd669ef..d26d5cee1 100644 --- a/UI/Popup/EditableTagRendering.ts +++ b/UI/Popup/EditableTagRendering.ts @@ -42,7 +42,7 @@ export default class EditableTagRendering extends Toggle { } private static CreateRendering(tags: UIEventSource, configuration: TagRenderingConfig, units: Unit[], editMode: UIEventSource): BaseUIElement { - const answer: BaseUIElement = new TagRenderingAnswer(tags, configuration) + const answer: BaseUIElement = new TagRenderingAnswer(tags, configuration, State.state) answer.SetClass("w-full") let rendering = answer; diff --git a/UI/Popup/FeatureInfoBox.ts b/UI/Popup/FeatureInfoBox.ts index 4b6853cdf..86da4b067 100644 --- a/UI/Popup/FeatureInfoBox.ts +++ b/UI/Popup/FeatureInfoBox.ts @@ -18,7 +18,6 @@ import {Utils} from "../../Utils"; import {SubstitutedTranslation} from "../SubstitutedTranslation"; import MoveWizard from "./MoveWizard"; import Toggle from "../Input/Toggle"; -import {FixedUiElement} from "../Base/FixedUiElement"; export default class FeatureInfoBox extends ScrollableFullScreen { @@ -41,7 +40,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { private static GenerateTitleBar(tags: UIEventSource, layerConfig: LayerConfig): BaseUIElement { - const title = new TagRenderingAnswer(tags, layerConfig.title ?? new TagRenderingConfig("POI")) + const title = new TagRenderingAnswer(tags, layerConfig.title ?? new TagRenderingConfig("POI"), State.state) .SetClass("break-words font-bold sm:p-0.5 md:p-1 sm:p-1.5 md:p-2"); const titleIcons = new Combine( layerConfig.titleIcons.map(icon => new TagRenderingAnswer(tags, icon, @@ -89,7 +88,8 @@ export default class FeatureInfoBox extends ScrollableFullScreen { if (tr.render !== undefined) { questionBox.SetClass("text-sm") - const renderedQuestion = new TagRenderingAnswer(tags, tr, tr.group + " questions", "", { + const renderedQuestion = new TagRenderingAnswer(tags, tr,State.state, + tr.group + " questions", "", { specialViz: new Map([["questions", questionBox]]) }) const possiblyHidden = new Toggle( @@ -164,7 +164,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { const hasMinimap = layerConfig.tagRenderings.some(tr => FeatureInfoBox.hasMinimap(tr)) if (!hasMinimap) { - allRenderings.push(new TagRenderingAnswer(tags, SharedTagRenderings.SharedTagRendering.get("minimap"))) + allRenderings.push(new TagRenderingAnswer(tags, SharedTagRenderings.SharedTagRendering.get("minimap"), State.state)) } editElements.push( @@ -178,7 +178,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { return undefined } - return new TagRenderingAnswer(tags, SharedTagRenderings.SharedTagRendering.get("last_edit")); + return new TagRenderingAnswer(tags, SharedTagRenderings.SharedTagRendering.get("last_edit"), State.state); }, [State.state.featureSwitchIsDebugging, State.state.featureSwitchIsTesting]) ) diff --git a/UI/Popup/ImportButton.ts b/UI/Popup/ImportButton.ts index 88c862cbc..934bc3cc2 100644 --- a/UI/Popup/ImportButton.ts +++ b/UI/Popup/ImportButton.ts @@ -19,7 +19,6 @@ import Svg from "../../Svg"; import {Utils} from "../../Utils"; import Minimap from "../Base/Minimap"; import ShowDataLayer from "../ShowDataLayer/ShowDataLayer"; -import AllKnownLayers from "../../Customizations/AllKnownLayers"; import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"; import ShowDataMultiLayer from "../ShowDataLayer/ShowDataMultiLayer"; import CreateWayWithPointReuseAction, {MergePointConfig} from "../../Logic/Osm/Actions/CreateWayWithPointReuseAction"; @@ -35,6 +34,8 @@ import ReplaceGeometryAction from "../../Logic/Osm/Actions/ReplaceGeometryAction import CreateMultiPolygonWithPointReuseAction from "../../Logic/Osm/Actions/CreateMultiPolygonWithPointReuseAction"; import {Tag} from "../../Logic/Tags/Tag"; import TagApplyButton from "./TagApplyButton"; +import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; +import * as conflation_json from "../../assets/layers/conflation/conflation.json"; abstract class AbstractImportButton implements SpecialVisualizations { @@ -255,7 +256,7 @@ ${Utils.special_visualizations_importRequirementDocs} zoomToFeatures: false, features: changePreview, allElements: state.allElements, - layerToShow: AllKnownLayers.sharedLayers.get("conflation") + layerToShow: new LayerConfig(conflation_json, "all_known_layers", true) }) }) diff --git a/UI/Popup/TagRenderingAnswer.ts b/UI/Popup/TagRenderingAnswer.ts index c7724b538..0e8bbf57e 100644 --- a/UI/Popup/TagRenderingAnswer.ts +++ b/UI/Popup/TagRenderingAnswer.ts @@ -12,6 +12,7 @@ import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"; export default class TagRenderingAnswer extends VariableUiElement { constructor(tagsSource: UIEventSource, configuration: TagRenderingConfig, + state: any, contentClasses: string = "", contentStyle: string = "", options?:{ specialViz: Map }) { @@ -37,7 +38,7 @@ export default class TagRenderingAnswer extends VariableUiElement { return undefined; } - const valuesToRender: BaseUIElement[] = trs.map(tr => new SubstitutedTranslation(tr, tagsSource, options?.specialViz)) + const valuesToRender: BaseUIElement[] = trs.map(tr => new SubstitutedTranslation(tr, tagsSource, state, options?.specialViz)) if (valuesToRender.length === 1) { return valuesToRender[0]; } else if (valuesToRender.length > 1) { diff --git a/UI/Popup/TagRenderingQuestion.ts b/UI/Popup/TagRenderingQuestion.ts index 9c0c530ab..fdaf1e532 100644 --- a/UI/Popup/TagRenderingQuestion.ts +++ b/UI/Popup/TagRenderingQuestion.ts @@ -71,7 +71,7 @@ export default class TagRenderingQuestion extends Combine { } options = options ?? {} const applicableUnit = (options.units ?? []).filter(unit => unit.isApplicableToKey(configuration.freeform?.key))[0]; - const question = new SubstitutedTranslation(configuration.question, tags) + const question = new SubstitutedTranslation(configuration.question, tags, State.state) .SetClass("question-text"); @@ -352,7 +352,7 @@ export default class TagRenderingQuestion extends Combine { } return new FixedInputElement( - new SubstitutedTranslation(mapping.then, tagsSource), + new SubstitutedTranslation(mapping.then, tagsSource, State.state), tagging, (t0, t1) => t1.isEquivalent(t0)); } diff --git a/UI/ShowDataLayer/ShowTileInfo.ts b/UI/ShowDataLayer/ShowTileInfo.ts index e2ba01adf..702e9d9c8 100644 --- a/UI/ShowDataLayer/ShowTileInfo.ts +++ b/UI/ShowDataLayer/ShowTileInfo.ts @@ -8,8 +8,7 @@ import {Tiles} from "../../Models/TileRange"; import * as clusterstyle from "../../assets/layers/cluster_style/cluster_style.json" export default class ShowTileInfo { - public static readonly styling = new LayerConfig( - clusterstyle, "tileinfo", true) + public static readonly styling = new LayerConfig(clusterstyle, "ShowTileInfo", true) constructor(options: { source: FeatureSource & Tiled, leafletMap: UIEventSource, layer?: LayerConfig, diff --git a/UI/SpecialVisualizations.ts b/UI/SpecialVisualizations.ts index e7d098da0..3e0dfabb6 100644 --- a/UI/SpecialVisualizations.ts +++ b/UI/SpecialVisualizations.ts @@ -27,7 +27,6 @@ import AllImageProviders from "../Logic/ImageProviders/AllImageProviders"; import WikipediaBox from "./Wikipedia/WikipediaBox"; import SimpleMetaTagger from "../Logic/SimpleMetaTagger"; import MultiApply from "./Popup/MultiApply"; -import AllKnownLayers from "../Customizations/AllKnownLayers"; import ShowDataLayer from "./ShowDataLayer/ShowDataLayer"; import {SubtleButton} from "./Base/SubtleButton"; import {DefaultGuiState} from "./DefaultGuiState"; @@ -37,6 +36,7 @@ import FeaturePipelineState from "../Logic/State/FeaturePipelineState"; import {ConflateButton, ImportPointButton, ImportWayButton} from "./Popup/ImportButton"; import TagApplyButton from "./Popup/TagApplyButton"; import AutoApplyButton from "./Popup/AutoApplyButton"; +import * as left_right_style_json from "../assets/layers/left_right_style/left_right_style.json"; export interface SpecialVisualization { funcName: string, @@ -51,7 +51,6 @@ export default class SpecialVisualizations { public static specialVisualizations = SpecialVisualizations.init() - private static init(){ const specialVisualizations: SpecialVisualization[] = [ @@ -104,7 +103,7 @@ export default class SpecialVisualizations { if (args.length > 0) { imagePrefixes = [].concat(...args.map(a => a.split(","))); } - return new ImageCarousel(AllImageProviders.LoadImagesFor(tags, imagePrefixes), tags, imagePrefixes); + return new ImageCarousel(AllImageProviders.LoadImagesFor(tags, imagePrefixes), tags, state); } }, { @@ -120,7 +119,7 @@ export default class SpecialVisualizations { defaultValue: "Add image" }], constr: (state: State, tags, args) => { - return new ImageUploadFlow(tags, args[0], args[1]) + return new ImageUploadFlow(tags, state, args[0], args[1]) } }, { @@ -161,7 +160,7 @@ export default class SpecialVisualizations { } ], example: "`{minimap()}`, `{minimap(17, id, _list_of_embedded_feature_ids_calculated_by_calculated_tag):height:10rem; border: 2px solid black}`", - constr: (state, tagSource, args, defaultGuiState) => { + constr: (state, tagSource, args, _) => { const keys = [...args] keys.splice(0, 1) @@ -267,7 +266,7 @@ export default class SpecialVisualizations { leafletMap: minimap["leafletMap"], enablePopups: false, zoomToFeatures: true, - layerToShow: AllKnownLayers.sharedLayers.get("left_right_style"), + layerToShow: new LayerConfig(left_right_style_json, "all_known_layers", true), features: new StaticFeatureSource([copy], false), allElements: State.state.allElements } @@ -324,7 +323,7 @@ export default class SpecialVisualizations { }], example: "A normal opening hours table can be invoked with `{opening_hours_table()}`. A table for e.g. conditional access with opening hours can be `{opening_hours_table(access:conditional, no @ &LPARENS, &RPARENS)}`", constr: (state: State, tagSource: UIEventSource, args) => { - return new OpeningHoursVisualization(tagSource, args[0], args[1], args[2]) + return new OpeningHoursVisualization(tagSource, state, args[0], args[1], args[2]) } }, { diff --git a/UI/SubstitutedTranslation.ts b/UI/SubstitutedTranslation.ts index 69f57683f..aa43f5891 100644 --- a/UI/SubstitutedTranslation.ts +++ b/UI/SubstitutedTranslation.ts @@ -1,7 +1,6 @@ import {UIEventSource} from "../Logic/UIEventSource"; import {Translation} from "./i18n/Translation"; import Locale from "./i18n/Locale"; -import State from "../State"; import {FixedUiElement} from "./Base/FixedUiElement"; import SpecialVisualizations, {SpecialVisualization} from "./SpecialVisualizations"; import {Utils} from "../Utils"; @@ -15,6 +14,7 @@ export class SubstitutedTranslation extends VariableUiElement { public constructor( translation: Translation, tagsSource: UIEventSource, + state, mapping: Map = undefined) { const extraMappings: SpecialVisualization[] = []; @@ -50,7 +50,7 @@ export class SubstitutedTranslation extends VariableUiElement { } const viz = proto.special; try { - return viz.func.constr(State.state, tagsSource, proto.special.args, DefaultGuiState.state).SetStyle(proto.special.style); + return viz.func.constr(state, tagsSource, proto.special.args, DefaultGuiState.state).SetStyle(proto.special.style); } catch (e) { console.error("SPECIALRENDERING FAILED for", tagsSource.data?.id, e) return new FixedUiElement(`Could not generate special rendering for ${viz.func}(${viz.args.join(", ")}) ${e}`).SetStyle("alert") diff --git a/UI/i18n/Translation.ts b/UI/i18n/Translation.ts index c11bc4b0a..355b61424 100644 --- a/UI/i18n/Translation.ts +++ b/UI/i18n/Translation.ts @@ -13,6 +13,9 @@ export class Translation extends BaseUIElement { if (translations === undefined) { throw `Translation without content (${context})` } + if(typeof translations === "string"){ + translations = {"*": translations}; + } let count = 0; for (const translationsKey in translations) { if (!translations.hasOwnProperty(translationsKey)) { diff --git a/Utils.ts b/Utils.ts index 943addefc..5928fa86f 100644 --- a/Utils.ts +++ b/Utils.ts @@ -191,7 +191,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be return newArr; } - public static Dupicates(arr: string[]): string[] { + public static Dupiclates(arr: string[]): string[] { if (arr === undefined) { return undefined; } @@ -618,5 +618,17 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be b: parseInt(hex.substr(5, 2), 16), } } + + /** + * Deepclone an object by serializing and deserializing it + * @param x + * @constructor + */ + static Clone(x: T): T { + if(x === undefined){ + return undefined; + } + return JSON.parse(JSON.stringify(x)); + } } diff --git a/all_themes_index.ts b/all_themes_index.ts index 9364b5d8d..008cc77da 100644 --- a/all_themes_index.ts +++ b/all_themes_index.ts @@ -13,92 +13,7 @@ import AvailableBaseLayersImplementation from "./Logic/Actors/AvailableBaseLayer import ShowOverlayLayerImplementation from "./UI/ShowDataLayer/ShowOverlayLayerImplementation"; import {DefaultGuiState} from "./UI/DefaultGuiState"; -// Workaround for a stupid crash: inject some functions which would give stupid circular dependencies or crash the other nodejs scripts running from console -MinimapImplementation.initialize() -AvailableBaseLayers.implement(new AvailableBaseLayersImplementation()) -ShowOverlayLayerImplementation.Implement(); // Miscelleanous Utils.DisableLongPresses() - -// --------------------- Special actions based on the parameters ----------------- -// @ts-ignore -if (location.href.startsWith("http://buurtnatuur.be")) { - // Reload the https version. This is important for the 'locate me' button - window.location.replace("https://buurtnatuur.be"); -} - - -class Init { - public static Init(layoutToUse: LayoutConfig, encoded: string) { - - if (layoutToUse === null) { - // Something went wrong, error message is already on screen - return; - } - - if (layoutToUse === undefined) { - // No layout found - new AllThemesGui() - return; - } - - // Workaround/legacy to keep the old paramters working as I renamed some of them - if (layoutToUse?.id === "cyclofix") { - const legacy = QueryParameters.GetQueryParameter("layer-bike_shops", "true", "Legacy - keep De Fietsambassade working"); - const correct = QueryParameters.GetQueryParameter("layer-bike_shop", "true", "Legacy - keep De Fietsambassade working") - if (legacy.data !== "true") { - correct.setData(legacy.data) - } - console.log("layer-bike_shop toggles: legacy:", legacy.data, "new:", correct.data) - - const legacyCafe = QueryParameters.GetQueryParameter("layer-bike_cafes", "true", "Legacy - keep De Fietsambassade working") - const correctCafe = QueryParameters.GetQueryParameter("layer-bike_cafe", "true", "Legacy - keep De Fietsambassade working") - if (legacyCafe.data !== "true") { - correctCafe.setData(legacy.data) - } - } - - - const guiState = new DefaultGuiState() - State.state = new State(layoutToUse); - DefaultGuiState.state = guiState; - // This 'leaks' the global state via the window object, useful for debugging - // @ts-ignore - window.mapcomplete_state = State.state; - - new DefaultGUI(State.state, guiState) - - if (encoded !== undefined && encoded.length > 10) { - // We save the layout to the user settings and local storage - State.state.osmConnection.OnLoggedIn(() => { - State.state.osmConnection - .GetLongPreference("installed-theme-" + layoutToUse.id) - .setData(encoded); - }); - } - } -} - - document.getElementById("decoration-desktop").remove(); -new Combine(["Initializing...
", - new FixedUiElement("If this message persist, something went wrong - click here to try again") - .SetClass("link-underline small") - .onClick(() => { - localStorage.clear(); - window.location.reload(true); - - })]) - .AttachTo("centermessage"); // Add an initialization and reset button if something goes wrong - -// @ts-ignore -if(typeof theme === "undefined"){ - DetermineLayout.GetLayout().then(value => { - console.log("Got ", value) - Init.Init(value[0], value[1]) - }).catch(err => { - console.error("Error while initializing: ", err, err.stack) - }) -} - - +new AllThemesGui(); \ No newline at end of file diff --git a/assets/tagRenderings/icons.json b/assets/tagRenderings/icons.json index 06b97f81a..864f27539 100644 --- a/assets/tagRenderings/icons.json +++ b/assets/tagRenderings/icons.json @@ -1,11 +1,14 @@ { - "defaultIcons": ["phonelink", - "emaillink", - "wikipedialink", - "osmlink", - "sharelink" - ], - + "defaults": { + "builtin": [ + "phonelink", + "emaillink", + "wikipedialink", + "osmlink", + "sharelink" + ], + "override": {} + }, "wikipedialink": { "render": "WP", "condition": { diff --git a/assets/themes/cyclofix/cyclofix.json b/assets/themes/cyclofix/cyclofix.json index 23a2adb32..4fb30eea9 100644 --- a/assets/themes/cyclofix/cyclofix.json +++ b/assets/themes/cyclofix/cyclofix.json @@ -36,7 +36,7 @@ ], "maintainer": "MapComplete", "credits": "Originally created during Open Summer of Code by Pieter Fiers, Thibault Declercq, Pierre Barban, Joost Schouppe and Pieter Vander Vennet", - "icon": "assets/themes/cyclofix/logo.svg", + "icon": "./assets/themes/cyclofix/logo.svg", "version": "0", "startLat": 0, "defaultBackgroundId": "CartoDB.Voyager", diff --git a/assets/themes/grb_import/grb.json b/assets/themes/grb_import/grb.json index 2a11d0fc8..23c401282 100644 --- a/assets/themes/grb_import/grb.json +++ b/assets/themes/grb_import/grb.json @@ -38,7 +38,7 @@ "point" ], "icon": { - "render": "./assets/themes/grb_import/robot.svg" + "render": "./assets/svg/robot.svg" }, "iconSize": "15,15,center" } @@ -99,8 +99,7 @@ "osmTags": "building~*", "maxCacheAge": 0 }, - "calculatedTags": [ - ], + "calculatedTags": [], "mapRendering": [ { "width": { @@ -490,7 +489,6 @@ "if": "_overlaps_with_other_features~*", "then": "This GRB building overlaps with the following features: {_overlaps_with_other_features}.
Fix the overlap and try again" }, - { "if": { "and": [ diff --git a/assets/themes/natuurpunt/natuurpunt.json b/assets/themes/natuurpunt/natuurpunt.json index 32fed86b1..7f98d1883 100644 --- a/assets/themes/natuurpunt/natuurpunt.json +++ b/assets/themes/natuurpunt/natuurpunt.json @@ -80,6 +80,7 @@ "builtin": "nature_reserve", "wayHandling": 1, "override": { + "id": "nature_reserve_centerpoints", "source": { "osmTags": { "+and": [ diff --git a/assets/themes/sidewalks/sidewalks.json b/assets/themes/sidewalks/sidewalks.json index 7217099e8..c750c05fa 100644 --- a/assets/themes/sidewalks/sidewalks.json +++ b/assets/themes/sidewalks/sidewalks.json @@ -74,11 +74,11 @@ }, "renderings": [ { - "id": "sidewalk_minimap", + "id": "sidewalk_minimap_left|right", "render": "{sided_minimap(left|right):height:8rem;border-radius:0.5rem;overflow:hidden}" }, { - "id": "has_sidewalk", + "id": "has_sidewalk_left|right", "question": "Is there a sidewalk on this side of the road?", "mappings": [ { @@ -92,7 +92,7 @@ ] }, { - "id": "sidewalk_width", + "id": "sidewalk_width_left|right", "question": "What is the width of the sidewalk on this side of the road?", "render": "This sidewalk is {sidewalk:left|right:width}m wide", "condition": "sidewalk:left|right=yes", diff --git a/assets/themes/speelplekken/speelplekken.json b/assets/themes/speelplekken/speelplekken.json index 3646004ee..adf40461a 100644 --- a/assets/themes/speelplekken/speelplekken.json +++ b/assets/themes/speelplekken/speelplekken.json @@ -50,7 +50,6 @@ "geoJsonZoomLevel": 14, "isOsmCache": true }, - "icon": "./assets/themes/speelplekken/speelbos.svg", "minzoom": 12, "calculatedTags": [ "_is_shadowed=feat.overlapWith('shadow').length > 0 ? 'yes': ''", @@ -61,7 +60,6 @@ { "builtin": "playground", "override": { - "icon": "./assets/themes/speelplekken/speeltuin.svg", "minzoom": 14, "source": { "geoJsonLocal": "http://127.0.0.1:8080/speelplekken_{layer}_{z}_{x}_{y}.geojson", @@ -78,7 +76,6 @@ { "builtin": "village_green", "override": { - "icon": "./assets/themes/speelplekken/speelweide.svg", "minzoom": 14, "source": { "geoJsonLocal": "http://127.0.0.1:8080/speelplekken_{layer}_{z}_{x}_{y}.geojson", @@ -95,7 +92,6 @@ { "builtin": "grass_in_parks", "override": { - "icon": "./assets/themes/speelplekken/speelweide.svg", "minzoom": 14, "source": { "geoJsonLocal": "http://127.0.0.1:8080/speelplekken_{layer}_{z}_{x}_{y}.geojson", diff --git a/index.html b/index.html index 68e3f9fc4..d8616f9f7 100644 --- a/index.html +++ b/index.html @@ -77,7 +77,7 @@ Below
- + diff --git a/index.ts b/index.ts index 8e84847cc..e8718f0b5 100644 --- a/index.ts +++ b/index.ts @@ -18,7 +18,6 @@ MinimapImplementation.initialize() AvailableBaseLayers.implement(new AvailableBaseLayersImplementation()) ShowOverlayLayerImplementation.Implement(); // Miscelleanous - Utils.DisableLongPresses() // --------------------- Special actions based on the parameters ----------------- @@ -66,7 +65,6 @@ class Init { // This 'leaks' the global state via the window object, useful for debugging // @ts-ignore window.mapcomplete_state = State.state; - new DefaultGUI(State.state, guiState) if (encoded !== undefined && encoded.length > 10) { @@ -92,12 +90,12 @@ new Combine(["Initializing...
", })]) .AttachTo("centermessage"); // Add an initialization and reset button if something goes wrong - +// @ts-ignore DetermineLayout.GetLayout().then(value => { console.log("Got ", value) Init.Init(value[0], value[1]) -}).catch(err => { - console.error("Error while initializing: ", err, err.stack) -}) + }).catch(err => { + console.error("Error while initializing: ", err, err.stack) + }) diff --git a/index_theme.ts.template b/index_theme.ts.template index e8718f0b5..6d3ac310d 100644 --- a/index_theme.ts.template +++ b/index_theme.ts.template @@ -4,8 +4,6 @@ import Combine from "./UI/Base/Combine"; import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers"; import MinimapImplementation from "./UI/Base/MinimapImplementation"; import {Utils} from "./Utils"; -import AllThemesGui from "./UI/AllThemesGui"; -import DetermineLayout from "./Logic/DetermineLayout"; import LayoutConfig from "./Models/ThemeConfig/LayoutConfig"; import DefaultGUI from "./UI/DefaultGUI"; import State from "./State"; @@ -13,70 +11,8 @@ import AvailableBaseLayersImplementation from "./Logic/Actors/AvailableBaseLayer import ShowOverlayLayerImplementation from "./UI/ShowDataLayer/ShowOverlayLayerImplementation"; import {DefaultGuiState} from "./UI/DefaultGuiState"; -// Workaround for a stupid crash: inject some functions which would give stupid circular dependencies or crash the other nodejs scripts running from console -MinimapImplementation.initialize() -AvailableBaseLayers.implement(new AvailableBaseLayersImplementation()) -ShowOverlayLayerImplementation.Implement(); -// Miscelleanous -Utils.DisableLongPresses() - -// --------------------- Special actions based on the parameters ----------------- -// @ts-ignore -if (location.href.startsWith("http://buurtnatuur.be")) { - // Reload the https version. This is important for the 'locate me' button - window.location.replace("https://buurtnatuur.be"); -} -class Init { - public static Init(layoutToUse: LayoutConfig, encoded: string) { - - if (layoutToUse === null) { - // Something went wrong, error message is already on screen - return; - } - - if (layoutToUse === undefined) { - // No layout found - new AllThemesGui() - return; - } - - // Workaround/legacy to keep the old paramters working as I renamed some of them - if (layoutToUse?.id === "cyclofix") { - const legacy = QueryParameters.GetQueryParameter("layer-bike_shops", "true", "Legacy - keep De Fietsambassade working"); - const correct = QueryParameters.GetQueryParameter("layer-bike_shop", "true", "Legacy - keep De Fietsambassade working") - if (legacy.data !== "true") { - correct.setData(legacy.data) - } - console.log("layer-bike_shop toggles: legacy:", legacy.data, "new:", correct.data) - - const legacyCafe = QueryParameters.GetQueryParameter("layer-bike_cafes", "true", "Legacy - keep De Fietsambassade working") - const correctCafe = QueryParameters.GetQueryParameter("layer-bike_cafe", "true", "Legacy - keep De Fietsambassade working") - if (legacyCafe.data !== "true") { - correctCafe.setData(legacy.data) - } - } - - - const guiState = new DefaultGuiState() - State.state = new State(layoutToUse); - DefaultGuiState.state = guiState; - // This 'leaks' the global state via the window object, useful for debugging - // @ts-ignore - window.mapcomplete_state = State.state; - new DefaultGUI(State.state, guiState) - - if (encoded !== undefined && encoded.length > 10) { - // We save the layout to the user settings and local storage - State.state.osmConnection.OnLoggedIn(() => { - State.state.osmConnection - .GetLongPreference("installed-theme-" + layoutToUse.id) - .setData(encoded); - }); - } - } -} document.getElementById("decoration-desktop").remove(); @@ -90,12 +26,40 @@ new Combine(["Initializing...
", })]) .AttachTo("centermessage"); // Add an initialization and reset button if something goes wrong + + +// Workaround for a stupid crash: inject some functions which would give stupid circular dependencies or crash the other nodejs scripts running from console +MinimapImplementation.initialize() +AvailableBaseLayers.implement(new AvailableBaseLayersImplementation()) +ShowOverlayLayerImplementation.Implement(); +// Miscelleanous +Utils.DisableLongPresses() + +const layoutToUse = new LayoutConfig(themeConfig["default"]) + + +// Workaround/legacy to keep the old paramters working as I renamed some of them +if (layoutToUse?.id === "cyclofix") { + const legacy = QueryParameters.GetQueryParameter("layer-bike_shops", "true", "Legacy - keep De Fietsambassade working"); + const correct = QueryParameters.GetQueryParameter("layer-bike_shop", "true", "Legacy - keep De Fietsambassade working") + if (legacy.data !== "true") { + correct.setData(legacy.data) + } + console.log("layer-bike_shop toggles: legacy:", legacy.data, "new:", correct.data) + + const legacyCafe = QueryParameters.GetQueryParameter("layer-bike_cafes", "true", "Legacy - keep De Fietsambassade working") + const correctCafe = QueryParameters.GetQueryParameter("layer-bike_cafe", "true", "Legacy - keep De Fietsambassade working") + if (legacyCafe.data !== "true") { + correctCafe.setData(legacy.data) + } +} + + + +const guiState = new DefaultGuiState() +State.state = new State(layoutToUse); +DefaultGuiState.state = guiState; +// This 'leaks' the global state via the window object, useful for debugging // @ts-ignore -DetermineLayout.GetLayout().then(value => { - console.log("Got ", value) - Init.Init(value[0], value[1]) - }).catch(err => { - console.error("Error while initializing: ", err, err.stack) - }) - - +window.mapcomplete_state = State.state; +new DefaultGUI(State.state, guiState) diff --git a/package.json b/package.json index 3a6fa45b6..691adcc29 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "generate:cache:speelplekken:mini": "ts-node scripts/generateCache.ts speelplekken 14 ../MapComplete-data/speelplekken_cache_mini/ 51.181710380278176 4.423413276672363 51.193007664772495 4.444141387939452", "generate:cache:speelplekken": "npm run generate:layeroverview && ts-node scripts/generateCache.ts speelplekken 14 ../MapComplete-data/speelplekken_cache/ 51.20 4.35 51.09 4.56", "generate:cache:natuurpunt": "npm run generate:layeroverview && ts-node scripts/generateCache.ts natuurpunt 12 ../MapComplete-data/natuurpunt_cache/ 50.40 2.1 51.54 6.4 --generate-point-overview nature_reserve,visitor_information_centre", - "generate:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json && ts-node scripts/generateLayerOverview.ts --no-fail", + "generate:layeroverview": "ts-node scripts/generateLayerOverview.ts --no-fail", "generate:licenses": "ts-node scripts/generateLicenseInfo.ts --no-fail", "query:licenses": "ts-node scripts/generateLicenseInfo.ts --query", "generate:report": "cd Docs/Tools && ./compileStats.sh && git commit . -m 'New statistics ands graphs' && git push", @@ -39,7 +39,7 @@ "optimize-images": "cd assets/generated/ && find -name '*.png' -exec optipng '{}' \\; && echo 'PNGs are optimized'", "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json", "generate": "mkdir -p ./assets/generated && npm run reset:layeroverview && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run generate:licenses && npm run validate:layeroverview", - "build": "rm -rf dist/ && npm run generate && parcel build --public-url ./ *.html assets/** assets/**/** assets/**/**/** vendor/* vendor/*/*", + "build": "rm -rf dist/ && npm run generate && node --max_old_space_size=12000 $(which parcel) build --public-url ./ *.html assets/** assets/**/** assets/**/**/** vendor/* vendor/*/*", "generate:charging-stations": "cd ./assets/layers/charging_station && ts-node csvToJson.ts && cd -", "prepare-deploy": "npm run generate && npm run test && npm run generate:editor-layer-index && npm run generate:layouts && npm run build && rm -rf .cache", "deploy:staging": "npm run prepare-deploy && rm -rf ~/git/pietervdvn.github.io/Staging/* && cp -r dist/* ~/git/pietervdvn.github.io/Staging/ && cd ~/git/pietervdvn.github.io/ && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean", @@ -47,8 +47,8 @@ "deploy:production": "cd ~/git/mapcomplete.github.io/ && git pull && cd - && rm -rf ./assets/generated && npm run prepare-deploy && npm run optimize-images && rm -rf ~/git/mapcomplete.github.io/* && cp -r dist/* ~/git/mapcomplete.github.io/ && cd ~/git/mapcomplete.github.io/ && echo \"mapcomplete.osm.be\" > CNAME && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean && npm run gittag", "gittag": "ts-node scripts/printVersion.ts | bash", "lint": "tslint --project . -c tslint.json '**.ts' ", - "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\).html\" | xargs rm) && rm *.webmanifest", - "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot test/TestAll.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot", + "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", + "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot", "genPostal": " ts-node ./scripts/postal_code_tools/createRoutablePoint.ts /home/pietervdvn/Downloads/postal_codes/postal_codes_town_hall_points.geojson /home/pietervdvn/Downloads/31370/Postcodes.geojson\n" }, "keywords": [ diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index a2ee4bc70..c3b5983e9 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -1,13 +1,19 @@ import ScriptUtils from "./ScriptUtils"; -import {writeFileSync} from "fs"; +import {existsSync, mkdirSync, writeFileSync} from "fs"; import * as licenses from "../assets/generated/license_info.json" import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; -import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; -import LayerConfig from "../Models/ThemeConfig/LayerConfig"; +import Constants from "../Models/Constants"; +import { + DesugaringContext, + PrepareLayer, PrepareTheme, + ValidateLayer, + ValidateThemeAndLayers +} from "../Models/ThemeConfig/LegacyJsonConvert"; import {Translation} from "../UI/i18n/Translation"; -import {Utils} from "../Utils"; -import AllKnownLayers from "../Customizations/AllKnownLayers"; +import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; +import * as questions from "../assets/tagRenderings/questions.json"; +import * as icons from "../assets/tagRenderings/icons.json"; // This scripts scans 'assets/layers/*.json' for layer definition files and 'assets/themes/*.json' for theme definition files. // It spits out an overview of those to be used to load them @@ -36,202 +42,155 @@ class LayerOverviewUtils { } } - writeFiles(lt: LayersAndThemes) { - writeFileSync("./assets/generated/known_layers_and_themes.json", JSON.stringify({ - "layers": lt.layers.map(l => l.parsed), - "themes": lt.themes - })) + writeSmallOverview(themes: { id: string, title: any, shortDescription: any, icon: string, hideFromOverview: boolean }[]) { + const perId = new Map(); + for (const theme of themes) { + const data = { + id: theme.id, + title: theme.title, + shortDescription: theme.shortDescription, + icon: theme.icon, + hideFromOverview: theme.hideFromOverview + } + perId.set(theme.id, data); + } + + + const sorted = Constants.themeOrder.map(id => { + if (!perId.has(id)) { + throw "Ordered theme id " + id + " not found" + } + return perId.get(id); + }); + + + perId.forEach((value) => { + if (Constants.themeOrder.indexOf(value.id) >= 0) { + return; // actually a continue + } + sorted.push(value) + }) + + writeFileSync("./assets/generated/theme_overview.json", JSON.stringify(sorted, null, " "), "UTF8"); } - validateLayer(layerJson: LayerConfigJson, path: string, knownPaths: Set, context?: string): string[] { - let errorCount = []; - if (layerJson["overpassTags"] !== undefined) { - errorCount.push("Layer " + layerJson.id + "still uses the old 'overpassTags'-format. Please use \"source\": {\"osmTags\": }' instead of \"overpassTags\": (note: this isn't your fault, the custom theme generator still spits out the old format)") + writeTheme(theme: LayoutConfigJson) { + if (!existsSync("./assets/generated/themes")) { + mkdirSync("./assets/generated/themes"); } - const forbiddenTopLevel = ["icon","wayHandling","roamingRenderings","roamingRendering","label","width","color","colour","iconOverlays"] - for (const forbiddenKey of forbiddenTopLevel) { - if(layerJson[forbiddenKey] !== undefined) - errorCount.push("Layer "+layerJson.id+" still has a forbidden key "+forbiddenKey) - } - try { - const layer = new LayerConfig(layerJson, "test", true) - const images = Array.from(layer.ExtractImages()) - const remoteImages = images.filter(img => img.indexOf("http") == 0) - for (const remoteImage of remoteImages) { - errorCount.push("Found a remote image: " + remoteImage + " in layer " + layer.id + ", please download it. You can use the fixTheme script to automate this") - } - const expected: string = `assets/layers/${layer.id}/${layer.id}.json` - if (path != undefined && path.indexOf(expected) < 0) { - errorCount.push("Layer is in an incorrect place. The path is " + path + ", but expected " + expected) - } - if (layerJson["hideUnderlayingFeaturesMinPercentage"] !== undefined) { - errorCount.push("Layer " + layer.id + " contains an old 'hideUnderlayingFeaturesMinPercentage'") - } - - - for (const image of images) { - if (image.indexOf("{") >= 0) { - console.warn("Ignoring image with { in the path: ", image) - continue - } - - if (!knownPaths.has(image)) { - const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}` - errorCount.push(`Image with path ${image} not found or not attributed; it is used in ${layer.id}${ctx}`) - } - } - - } catch (e) { - console.error(e) - return [`Layer ${layerJson.id}` ?? JSON.stringify(layerJson).substring(0, 50) + " is invalid: " + e] - } - return errorCount + writeFileSync(`./assets/generated/themes/${theme.id}.json`, JSON.stringify(theme, null, " "), "UTF8"); } - - main(args: string[]) { + writeLayer(layer: LayerConfigJson) { + if (!existsSync("./assets/generated/layers")) { + mkdirSync("./assets/generated/layers"); + } + writeFileSync(`./assets/generated/layers/${layer.id}.json`, JSON.stringify(layer, null, " "), "UTF8"); + } - AllKnownLayers.runningGenerateScript = true; + getSharedTagRenderings(): Map { + const dict = new Map(); + + for (const key in questions["default"]) { + questions[key].id = key; + dict.set(key, questions[key]) + } + for (const key in icons["default"]) { + if(typeof icons[key] !== "object"){ + continue + } + icons[key].id = key; + dict.set(key, icons[key]) + } + + dict.forEach((value, key) => { + value.id = value.id ?? key; + }) + + return dict; + } + + + private buildLayerIndex(knownImagePaths: Set): Map { + // First, we expand and validate all builtin layers. These are written to assets/generated/layers + // At the same time, an index of available layers is built. + console.log(" ---------- VALIDATING BUILTIN LAYERS ---------") + + const sharedTagRenderings = this.getSharedTagRenderings(); const layerFiles = ScriptUtils.getLayerFiles(); + const sharedLayers = new Map() + const prepLayer = new PrepareLayer(); + const state: DesugaringContext = { + tagRenderings: sharedTagRenderings, + sharedLayers + } + for (const sharedLayerJson of layerFiles) { + const context = "While building builtin layer " + sharedLayerJson.path + const fixed = prepLayer.convertStrict(state, sharedLayerJson.parsed, context) + const validator = new ValidateLayer(knownImagePaths, sharedLayerJson.path, true); + validator.convertStrict(state, fixed, context) + + if (sharedLayers.has(fixed.id)) { + throw "There are multiple layers with the id " + fixed.id + } + + sharedLayers.set(fixed.id, fixed) + + this.writeLayer(fixed) + + } + return sharedLayers; + } + + + private buildThemeIndex(knownImagePaths: Set, sharedLayers: Map): Map { + console.log(" ---------- VALIDATING BUILTIN THEMES ---------") const themeFiles = ScriptUtils.getThemeFiles(); + const fixed = new Map(); - - console.log(" ---------- VALIDATING ---------") - const licensePaths = [] - for (const i in licenses) { - licensePaths.push(licenses[i].path) + const convertState: DesugaringContext = { + sharedLayers, + tagRenderings: this.getSharedTagRenderings() } - const knownPaths = new Set(licensePaths) - - let layerErrorCount = [] - const knownLayerIds = new Map(); - for (const layerFile of layerFiles) { - - if (knownLayerIds.has(layerFile.parsed.id)) { - throw "Duplicate identifier: " + layerFile.parsed.id + " in file " + layerFile.path - } - layerErrorCount.push(...this.validateLayer(layerFile.parsed, layerFile.path, knownPaths)) - knownLayerIds.set(layerFile.parsed.id, new LayerConfig(layerFile.parsed)) - - if(layerFile.parsed.description === undefined){ - throw "The layer "+layerFile.parsed.id+" does not provide a description, but this is required for builtin themes" - } - } - - let themeErrorCount = [] - // used only for the reports - let themeConfigs: LayoutConfig[] = [] for (const themeInfo of themeFiles) { - const themeFile = themeInfo.parsed + let themeFile = themeInfo.parsed const themePath = themeInfo.path - if (typeof themeFile.language === "string") { - themeErrorCount.push("The theme " + themeFile.id + " has a string as language. Please use a list of strings") - } - if (themeFile["units"] !== undefined) { - themeErrorCount.push("The theme " + themeFile.id + " has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) ") - } - if (themeFile["roamingRenderings"] !== undefined) { - themeErrorCount.push("Theme " + themeFile.id + " contains an old 'roamingRenderings'. Use an 'overrideAll' instead") - } - for (const layer of themeFile.layers) { - if (typeof layer === "string") { - if (!knownLayerIds.has(layer)) { - themeErrorCount.push(`Unknown layer id: ${layer} in theme ${themeFile.id}`) - } - } else if (layer["builtin"] !== undefined) { - let names = layer["builtin"]; - if (typeof names === "string") { - names = [names] - } - names.forEach(name => { - if (!knownLayerIds.has(name)) { - themeErrorCount.push("Unknown layer id: " + name + "(which uses inheritance)") - } - return - }) - } else { - layerErrorCount.push(...this.validateLayer(layer, undefined, knownPaths, themeFile.id)) - if (knownLayerIds.has(layer["id"])) { - throw `The theme ${themeFile.id} defines a layer with id ${layer["id"]}, which is the same as an already existing layer` - } - } - } + + themeFile = new PrepareTheme().convertStrict(convertState, themeFile, themePath) - const referencedLayers = Utils.NoNull([].concat(...themeFile.layers.map(layer => { - if (typeof layer === "string") { - return layer - } - if (layer["builtin"] !== undefined) { - return layer["builtin"] - } - return undefined - }).map(layerName => { - if (typeof layerName === "string") { - return [layerName] - } - return layerName - }))) + new ValidateThemeAndLayers(knownImagePaths, themePath, true) + .convertStrict(convertState, themeFile, themePath) - themeFile.layers = themeFile.layers - .filter(l => typeof l != "string") // We remove all the builtin layer references as they don't work with ts-node for some weird reason - .filter(l => l["builtin"] === undefined) - - - try { - const theme = new LayoutConfig(themeFile, true, "test") - if (theme.id !== theme.id.toLowerCase()) { - themeErrorCount.push("Theme ids should be in lowercase, but it is " + theme.id) - } - let filename = themePath.substring(themePath.lastIndexOf("/") + 1, themePath.length - 5) - if (theme.id !== filename) { - themeErrorCount.push("Theme ids should be the same as the name.json, but we got id: " + theme.id + " and filename " + filename + " (" + themePath + ")") - } - const neededLanguages = themeFile["mustHaveLanguage"] - if (neededLanguages !== undefined) { - console.log("Checking language requirements for ", theme.id, "as it must have", neededLanguages.join(", ")) - const allTranslations = [].concat(Translation.ExtractAllTranslationsFrom(theme, theme.id), - ...referencedLayers.map(layerId => Translation.ExtractAllTranslationsFrom(knownLayerIds.get(layerId), theme.id + "->" + layerId))) - for (const neededLanguage of neededLanguages) { - allTranslations - .filter(t => t.tr.translations[neededLanguage] === undefined && t.tr.translations["*"] === undefined) - .forEach(missing => { - themeErrorCount.push("The theme " + theme.id + " should be translation-complete for " + neededLanguage + ", but it lacks a translation for " + missing.context+".\n\tThe english translation is "+missing.tr.textFor('en')) - }) - } - - - } - themeConfigs.push(theme) - } catch (e) { - themeErrorCount.push("Could not parse theme " + themeFile["id"] + " due to", e) - } + this.writeTheme(themeFile) + fixed.set(themeFile.id, themeFile) } - if (layerErrorCount.length + themeErrorCount.length == 0) { - console.log("All good!") - - // We load again from disc, as modifications were made above - const lt = this.loadThemesAndLayers(); - - - this.writeFiles(lt); - } else { - const errors = layerErrorCount.concat(themeErrorCount).join("\n") - console.log(errors) - const msg = (`Found ${layerErrorCount.length} errors in the layers; ${themeErrorCount.length} errors in the themes`) - console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") - - console.log(msg) - console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") - - if (args.indexOf("--report") >= 0) { - console.log("Writing report!") - writeFileSync("layer_report.txt", errors) - } - if (args.indexOf("--no-fail") < 0) { - throw msg; + this.writeSmallOverview(themeFiles.map(tf => { + const t = tf.parsed; + return { + ...t, + hideFromOverview: t.hideFromOverview ?? false, + shortDescription: t.shortDescription ?? new Translation(t.description).FirstSentence().translations } + })); + return fixed; + + } + + main(_: string[]) { + + const licensePaths = new Set() + for (const i in licenses) { + licensePaths.add(licenses[i].path) } + + const sharedLayers = this.buildLayerIndex(licensePaths); + const sharedThemes = this.buildThemeIndex(licensePaths, sharedLayers) + + writeFileSync("./assets/generated/known_layers_and_themes.json", JSON.stringify({ + "layers": Array.from(sharedLayers.values()), + "themes": Array.from(sharedThemes.values()) + })) } } diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index e77af31eb..b895e7478 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -1,4 +1,4 @@ -import {existsSync, mkdirSync, readFileSync, writeFile, writeFileSync} from "fs"; +import {appendFileSync, existsSync, mkdirSync, readFileSync, writeFile, writeFileSync} from "fs"; import Locale from "../UI/i18n/Locale"; import Translations from "../UI/i18n/Translations"; import {Translation} from "../UI/i18n/Translation"; @@ -8,6 +8,8 @@ import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; const sharp = require('sharp'); +const template = readFileSync("theme.html", "utf8"); +const codeTemplate = readFileSync("index_theme.ts.template", "utf8"); function enc(str: string): string { @@ -106,7 +108,6 @@ async function createManifest(layout: LayoutConfig) { }; } -const template = readFileSync("index.html", "utf8"); async function createLandingPage(layout: LayoutConfig, manifest) { @@ -159,7 +160,8 @@ async function createLandingPage(layout: LayoutConfig, manifest) { let output = template .replace("Loading MapComplete, hang on...", `Loading MapComplete theme ${ogTitle}...`) - .replace(/.*/s, themeSpecific); + .replace(/.*/s, themeSpecific) + .replace("", ``); try { output = output @@ -172,12 +174,18 @@ async function createLandingPage(layout: LayoutConfig, manifest) { return output; } +async function createIndexFor(theme: LayoutConfig){ + const filename = "index_"+theme.id+".ts" + writeFileSync(filename, `import * as themeConfig from "./assets/generated/themes/${theme.id}.json"\n`) + appendFileSync(filename, codeTemplate) +} + const generatedDir = "./assets/generated"; if (!existsSync(generatedDir)) { mkdirSync(generatedDir) } -const blacklist = ["", "test", ".", "..", "manifest", "index", "land", "preferences", "account", "openstreetmap", "custom"] +const blacklist = ["", "test", ".", "..", "manifest", "index", "land", "preferences", "account", "openstreetmap", "custom","theme"] // @ts-ignore const all: LayoutConfigJson[] = all_known_layouts.themes; for (const i in all) { @@ -202,6 +210,7 @@ for (const i in all) { createLandingPage(layout, manifObj).then(landing => { writeFile(enc(layout.id) + ".html", landing, err) }); + createIndexFor(layout) }).catch(e => console.log("Could not generate the manifest: ", e)) } @@ -224,6 +233,4 @@ createManifest(new LayoutConfig({ }) -console.log("Counting all translations") -Translations.CountTranslations(); console.log("All done!"); \ No newline at end of file diff --git a/scripts/generateWikiPage.ts b/scripts/generateWikiPage.ts index 904410823..7a587d7f9 100644 --- a/scripts/generateWikiPage.ts +++ b/scripts/generateWikiPage.ts @@ -1,22 +1,24 @@ import {writeFile} from "fs"; import Translations from "../UI/i18n/Translations"; -import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; -import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; +import * as themeOverview from "../assets/generated/theme_overview.json" -function generateWikiEntry(layout: LayoutConfig) { +function generateWikiEntry(layout: {hideFromOverview: boolean, id: string, shortDescription: any}) { if (layout.hideFromOverview) { return ""; } - const languages = layout.language.map(ln => `{{#language:${ln}|en}}`).join(", ") - let auth = "Yes"; - if (layout.maintainer !== "" && layout.maintainer !== "MapComplete") { - auth = `Yes, by ${layout.maintainer};` + + const languagesInDescr = [] + for (const shortDescriptionKey in layout.shortDescription) { + languagesInDescr.push(shortDescriptionKey) } + + const languages = languagesInDescr .map(ln => `{{#language:${ln}|en}}`).join(", ") + let auth = "Yes"; return `{{service_item |name= [https://mapcomplete.osm.be/${layout.id} ${layout.id}] |region= Worldwide |lang= ${languages} -|descr= A MapComplete theme: ${Translations.WT(layout.description) +|descr= A MapComplete theme: ${Translations.WT(layout.shortDescription) .textFor("en") .replace(".*<\/a>/, "]]") @@ -31,7 +33,7 @@ let wikiPage = "{|class=\"wikitable sortable\"\n" + "! Name, link !! Genre !! Covered region !! Language !! Description !! Free materials !! Image\n" + "|-"; -for (const layout of AllKnownLayouts.layoutsList) { +for (const layout of themeOverview) { if (layout.hideFromOverview) { continue; } diff --git a/scripts/lint.ts b/scripts/lint.ts index 587c201a2..7280fb693 100644 --- a/scripts/lint.ts +++ b/scripts/lint.ts @@ -1,6 +1,6 @@ import ScriptUtils from "./ScriptUtils"; import {writeFileSync} from "fs"; -import LegacyJsonConvert from "../Models/ThemeConfig/LegacyJsonConvert"; +import {FixLegacyTheme, UpdateLegacyLayer} from "../Models/ThemeConfig/LegacyJsonConvert"; /* * This script reads all theme and layer files and reformats them inplace @@ -10,8 +10,9 @@ import LegacyJsonConvert from "../Models/ThemeConfig/LegacyJsonConvert"; const layerFiles = ScriptUtils.getLayerFiles(); for (const layerFile of layerFiles) { try { - LegacyJsonConvert.fixLayerConfig(layerFile.parsed) - writeFileSync(layerFile.path, JSON.stringify(layerFile.parsed, null, " ")) + const state : any = undefined; // FIXME + const fixed = new UpdateLegacyLayer().convertStrict(state,layerFile.parsed, "While linting "+layerFile.path); + writeFileSync(layerFile.path, JSON.stringify(fixed, null, " ")) } catch (e) { console.error("COULD NOT LINT LAYER" + layerFile.path + ":\n\t" + e) } @@ -20,8 +21,9 @@ for (const layerFile of layerFiles) { const themeFiles = ScriptUtils.getThemeFiles() for (const themeFile of themeFiles) { try { - LegacyJsonConvert.fixThemeConfig(themeFile.parsed) - writeFileSync(themeFile.path, JSON.stringify(themeFile.parsed, null, " ")) + const state : any = undefined; // FIXME + const fixed = new FixLegacyTheme().convertStrict(state,themeFile.parsed, "While linting "+themeFile.path); + writeFileSync(themeFile.path, JSON.stringify(fixed, null, " ")) } catch (e) { console.error("COULD NOT LINT THEME" + themeFile.path + ":\n\t" + e) } diff --git a/test/Actors.spec.ts b/test/Actors.spec.ts index 38c2a7c17..12b7cfb87 100644 --- a/test/Actors.spec.ts +++ b/test/Actors.spec.ts @@ -1,5 +1,4 @@ import T from "./TestHelper"; -import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; import SelectedElementTagsUpdater from "../Logic/Actors/SelectedElementTagsUpdater"; import UserRelatedState from "../Logic/State/UserRelatedState"; import {Utils} from "../Utils"; @@ -7,6 +6,8 @@ import SelectedFeatureHandler from "../Logic/Actors/SelectedFeatureHandler"; import {UIEventSource} from "../Logic/UIEventSource"; import {ElementStorage} from "../Logic/ElementStorage"; import Loc from "../Models/Loc"; +import * as bookcaseJson from "../assets/themes/bookcases/bookcases.json" +import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; export default class ActorsSpec extends T { @@ -52,7 +53,7 @@ export default class ActorsSpec extends T { [ "download latest version", () => { - const state = new UserRelatedState(AllKnownLayouts.allKnownLayouts.get("bookcases")) + const state = new UserRelatedState(new LayoutConfig(bookcaseJson, true, "tests" )) const feature = { "type": "Feature", "id": "node/5568693115", diff --git a/test/LegacyThemeLoader.spec.ts b/test/LegacyThemeLoader.spec.ts index 96eda9623..7d55225ac 100644 --- a/test/LegacyThemeLoader.spec.ts +++ b/test/LegacyThemeLoader.spec.ts @@ -1,6 +1,8 @@ import T from "./TestHelper"; -import LegacyJsonConvert from "../Models/ThemeConfig/LegacyJsonConvert"; +import {FixLegacyTheme} from "../Models/ThemeConfig/LegacyJsonConvert"; import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; +import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; +import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; export default class LegacyThemeLoaderSpec extends T { @@ -145,9 +147,12 @@ export default class LegacyThemeLoaderSpec extends T { ["Walking_node_theme", () => { const config = LegacyThemeLoaderSpec.walking_node_theme - LegacyJsonConvert.fixThemeConfig(config) - // @ts-ignore - const theme = new LayoutConfig(config) + const fixed = new FixLegacyTheme().convert({tagRenderings: new Map(), sharedLayers: new Map()}, + // @ts-ignore + config, + "While testing") + T.isTrue(fixed.errors.length === 0, "Could not fix the legacy theme") + const theme = new LayoutConfig(fixed.result) }] ] diff --git a/theme.html b/theme.html new file mode 100644 index 000000000..68e3f9fc4 --- /dev/null +++ b/theme.html @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + MapComplete + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + +
+
+ +
+
+
+
+ +
+
+ +
+ Loading MapComplete, hang on... +
+ +Below +
+ + + + + + From 8e2e367a0c7ada3cdb761d94130a9939f15f61b8 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 21 Dec 2021 19:09:24 +0100 Subject: [PATCH 03/16] Add 404, fixing custom layouts and redirects --- Customizations/AllKnownLayouts.ts | 2 - Logic/DetermineLayout.ts | 18 +- UI/Base/SubtleButton.ts | 36 +- all_themes_index.ts | 25 +- dependencies.svg | 8177 ----------------------------- index.html | 2 +- index.ts | 26 - notfound.ts | 11 + package.json | 2 +- scripts/generateLayerOverview.ts | 18 +- 10 files changed, 59 insertions(+), 8258 deletions(-) delete mode 100644 dependencies.svg create mode 100644 notfound.ts diff --git a/Customizations/AllKnownLayouts.ts b/Customizations/AllKnownLayouts.ts index 2afb4380d..381069908 100644 --- a/Customizations/AllKnownLayouts.ts +++ b/Customizations/AllKnownLayouts.ts @@ -30,8 +30,6 @@ export class AllKnownLayouts { return sharedLayers; } - - public static allKnownLayouts: Map = AllKnownLayouts.AllLayouts(); public static layoutsList: LayoutConfig[] = AllKnownLayouts.GenerateOrderedList(AllKnownLayouts.allKnownLayouts); diff --git a/Logic/DetermineLayout.ts b/Logic/DetermineLayout.ts index 8b27cfa1d..959cefa31 100644 --- a/Logic/DetermineLayout.ts +++ b/Logic/DetermineLayout.ts @@ -10,9 +10,10 @@ import {UIEventSource} from "./UIEventSource"; import {LocalStorageSource} from "./Web/LocalStorageSource"; import LZString from "lz-string"; import * as personal from "../assets/themes/personal/personal.json"; -import {FixLegacyTheme} from "../Models/ThemeConfig/LegacyJsonConvert"; +import {FixLegacyTheme, PrepareTheme} from "../Models/ThemeConfig/LegacyJsonConvert"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; import SharedTagRenderings from "../Customizations/SharedTagRenderings"; +import * as known_layers from "../assets/generated/known_layers.json" export default class DetermineLayout { @@ -106,10 +107,19 @@ export default class DetermineLayout { } } - json = new FixLegacyTheme().convertStrict({ + const knownLayersDict = new Map() + for (const key in known_layers["default"]) { + knownLayersDict.set(key, known_layers["default"][key]) + } + + const converState = { tagRenderings: SharedTagRenderings.SharedTagRenderingJson, - sharedLayers: new Map() // FIXME: actually add the layers - }, json, "While loading a dynamic theme") + sharedLayers: knownLayersDict + } + + json = new FixLegacyTheme().convertStrict(converState, json, "While loading a dynamic theme") + + json = new PrepareTheme().convertStrict(converState, json, "While preparing a dynamic theme") const layoutToUse = new LayoutConfig(json, false); userLayoutParam.setData(layoutToUse.id); diff --git a/UI/Base/SubtleButton.ts b/UI/Base/SubtleButton.ts index a324505f7..13c3c82a7 100644 --- a/UI/Base/SubtleButton.ts +++ b/UI/Base/SubtleButton.ts @@ -8,32 +8,35 @@ import {UIElement} from "../UIElement"; export class SubtleButton extends UIElement { + private readonly imageUrl: string | BaseUIElement; + private readonly message: string | BaseUIElement; + private readonly linkTo: { url: string | UIEventSource; newTab?: boolean }; - private readonly _element: BaseUIElement constructor(imageUrl: string | BaseUIElement, message: string | BaseUIElement, linkTo: { url: string | UIEventSource, newTab?: boolean } = undefined) { super(); - this._element = SubtleButton.generateContent(imageUrl, message, linkTo) - this.SetClass("block flex p-3 my-2 bg-blue-100 rounded-lg hover:shadow-xl hover:bg-blue-200 link-no-underline") - + this.imageUrl = imageUrl; + this.message = message; + this.linkTo = linkTo; } - private static generateContent(imageUrl: string | BaseUIElement, messageT: string | BaseUIElement, linkTo: { url: string | UIEventSource, newTab?: boolean } = undefined): BaseUIElement { - const message = Translations.W(messageT); - message + protected InnerRender(): string | BaseUIElement { + const classes= "block flex p-3 my-2 bg-blue-100 rounded-lg hover:shadow-xl hover:bg-blue-200 link-no-underline"; + const message = Translations.W(this.message); let img; - if ((imageUrl ?? "") === "") { + if ((this.imageUrl ?? "") === "") { img = undefined; - } else if (typeof (imageUrl) === "string") { - img = new Img(imageUrl) + } else if (typeof (this.imageUrl) === "string") { + img = new Img(this.imageUrl) } else { - img = imageUrl; + img = this.imageUrl; } img?.SetClass("block flex items-center justify-center h-11 w-11 flex-shrink0 mr-4") const image = new Combine([img]) .SetClass("flex-shrink-0"); - if (linkTo == undefined) { + if (this.linkTo == undefined) { + this.SetClass(classes) return new Combine([ image, message?.SetClass("block overflow-ellipsis"), @@ -46,13 +49,10 @@ export class SubtleButton extends UIElement { image, message?.SetClass("block overflow-ellipsis") ]).SetClass("flex group w-full"), - linkTo.url, - linkTo.newTab ?? false - ) - } + this.linkTo.url, + this.linkTo.newTab ?? false + ).SetClass(classes) - protected InnerRender(): string | BaseUIElement { - return this._element; } diff --git a/all_themes_index.ts b/all_themes_index.ts index 008cc77da..d18acadbd 100644 --- a/all_themes_index.ts +++ b/all_themes_index.ts @@ -1,19 +1,18 @@ -import {FixedUiElement} from "./UI/Base/FixedUiElement"; -import {QueryParameters} from "./Logic/Web/QueryParameters"; -import Combine from "./UI/Base/Combine"; -import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers"; -import MinimapImplementation from "./UI/Base/MinimapImplementation"; import {Utils} from "./Utils"; import AllThemesGui from "./UI/AllThemesGui"; -import DetermineLayout from "./Logic/DetermineLayout"; -import LayoutConfig from "./Models/ThemeConfig/LayoutConfig"; -import DefaultGUI from "./UI/DefaultGUI"; -import State from "./State"; -import AvailableBaseLayersImplementation from "./Logic/Actors/AvailableBaseLayersImplementation"; -import ShowOverlayLayerImplementation from "./UI/ShowDataLayer/ShowOverlayLayerImplementation"; -import {DefaultGuiState} from "./UI/DefaultGuiState"; +import {QueryParameters} from "./Logic/Web/QueryParameters"; + + +const layout = QueryParameters.GetQueryParameter("layout", undefined).data ?? "" +const customLayout = QueryParameters.GetQueryParameter("userlayout", undefined).data ?? "" +const l = window.location; +if( layout !== ""){ + window.location.replace(l.protocol + "//" + window.location.host+"/"+layout+".html"+ l.search + l.hash); +}else if (customLayout !== ""){ + window.location.replace(l.protocol + "//" + window.location.host+"/theme.html"+ l.search + l.hash); +} + -// Miscelleanous Utils.DisableLongPresses() document.getElementById("decoration-desktop").remove(); new AllThemesGui(); \ No newline at end of file diff --git a/dependencies.svg b/dependencies.svg deleted file mode 100644 index 169e50155..000000000 --- a/dependencies.svg +++ /dev/null @@ -1,8177 +0,0 @@ - - - - - - -dependency-cruiser output - - -cluster_Customizations - -Customizations - - -cluster_Logic - -Logic - - -cluster_Logic/Actors - -Actors - - -cluster_Logic/FeatureSource - -FeatureSource - - -cluster_Logic/FeatureSource/Actors - -Actors - - -cluster_Logic/FeatureSource/Sources - -Sources - - -cluster_Logic/FeatureSource/TiledFeatureSource - -TiledFeatureSource - - -cluster_Logic/ImageProviders - -ImageProviders - - -cluster_Logic/Osm - -Osm - - -cluster_Logic/Osm/Actions - -Actions - - -cluster_Logic/State - -State - - -cluster_Logic/Tags - -Tags - - -cluster_Logic/Web - -Web - - -cluster_Models - -Models - - -cluster_Models/ThemeConfig - -ThemeConfig - - -cluster_UI - -UI - - -cluster_UI/Base - -Base - - -cluster_UI/BigComponents - -BigComponents - - -cluster_UI/Image - -Image - - -cluster_UI/Input - -Input - - -cluster_UI/NewPoint - -NewPoint - - -cluster_UI/OpeningHours - -OpeningHours - - -cluster_UI/Popup - -Popup - - -cluster_UI/Reviews - -Reviews - - -cluster_UI/ShowDataLayer - -ShowDataLayer - - -cluster_UI/Wikipedia - -Wikipedia - - -cluster_UI/i18n - -i18n - - -cluster_assets - -assets - - -cluster_assets/generated - -generated - - -cluster_assets/layers - -layers - - -cluster_assets/layers/bike_repair_station - -bike_repair_station - - -cluster_assets/layers/cluster_style - -cluster_style - - -cluster_assets/layers/split_point - -split_point - - -cluster_assets/tagRenderings - -tagRenderings - - -cluster_assets/themes - -themes - - -cluster_assets/themes/personal - -personal - - -cluster_scripts - -scripts - - -cluster_test - -test - - - -AllTranslationAssets.ts - - -AllTranslationAssets.ts - - - - - -assets/generated/CompiledTranslations.ts - - -CompiledTranslations.ts - - - - - -AllTranslationAssets.ts->assets/generated/CompiledTranslations.ts - - - - - -UI/i18n/Translation.ts - - -Translation.ts - - - - - -assets/generated/CompiledTranslations.ts->UI/i18n/Translation.ts - - - - - -Customizations/AllKnownLayers.ts - - -AllKnownLayers.ts - - - - - -assets/generated/known_layers_and_themes.json - - -known_layers_and_themes.json - - - - - -Customizations/AllKnownLayers.ts->assets/generated/known_layers_and_themes.json - - - - - -Models/ThemeConfig/LayerConfig.ts - - -LayerConfig.ts - - - - - -Customizations/AllKnownLayers.ts->Models/ThemeConfig/LayerConfig.ts - - - - - - - -Models/ThemeConfig/WithContextLoader.ts - - -WithContextLoader.ts - - - - - -Customizations/AllKnownLayers.ts->Models/ThemeConfig/WithContextLoader.ts - - - - - - - -Utils.ts - - -Utils.ts - - - - - -Customizations/AllKnownLayers.ts->Utils.ts - - - - - -Customizations/SharedTagRenderings.ts - - -SharedTagRenderings.ts - - - - - -Customizations/AllKnownLayers.ts->Customizations/SharedTagRenderings.ts - - - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/ThemeConfig/WithContextLoader.ts - - - - - - - -Models/ThemeConfig/LayerConfig.ts->Utils.ts - - - - - -UI/Base/Combine.ts - - -Combine.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->UI/Base/Combine.ts - - - - - -UI/Base/List.ts - - -List.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->UI/Base/List.ts - - - - - - - -UI/Base/Title.ts - - -Title.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->UI/Base/Title.ts - - - - - -assets/tagRenderings/icons.json - - -icons.json - - - - - -Models/ThemeConfig/LayerConfig.ts->assets/tagRenderings/icons.json - - - - - -Models/ThemeConfig/TagRenderingConfig.ts - - -TagRenderingConfig.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/ThemeConfig/TagRenderingConfig.ts - - - - - - - -Logic/UIEventSource.ts - - -UIEventSource.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Logic/UIEventSource.ts - - - - - -UI/i18n/Translations.ts - - -Translations.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->UI/i18n/Translations.ts - - - - - -Logic/ExtraFunctions.ts - - -ExtraFunctions.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Logic/ExtraFunctions.ts - - - - - -UI/Base/Link.ts - - -Link.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->UI/Base/Link.ts - - - - - -Logic/Tags/TagUtils.ts - - -TagUtils.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Logic/Tags/TagUtils.ts - - - - - -Models/ThemeConfig/DeleteConfig.ts - - -DeleteConfig.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/ThemeConfig/DeleteConfig.ts - - - - - -Models/ThemeConfig/FilterConfig.ts - - -FilterConfig.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/ThemeConfig/FilterConfig.ts - - - - - -Models/Unit.ts - - -Unit.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/Unit.ts - - - - - -Models/ThemeConfig/LineRenderingConfig.ts - - -LineRenderingConfig.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/ThemeConfig/LineRenderingConfig.ts - - - - - - - -Models/ThemeConfig/MoveConfig.ts - - -MoveConfig.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/ThemeConfig/MoveConfig.ts - - - - - -Models/ThemeConfig/PointRenderingConfig.ts - - -PointRenderingConfig.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/ThemeConfig/PointRenderingConfig.ts - - - - - - - -Models/ThemeConfig/SourceConfig.ts - - -SourceConfig.ts - - - - - -Models/ThemeConfig/LayerConfig.ts->Models/ThemeConfig/SourceConfig.ts - - - - - -Models/ThemeConfig/WithContextLoader.ts->Utils.ts - - - - - -Models/ThemeConfig/WithContextLoader.ts->Customizations/SharedTagRenderings.ts - - - - - - - -Models/ThemeConfig/WithContextLoader.ts->Models/ThemeConfig/TagRenderingConfig.ts - - - - - - - -assets/colors.json - - -colors.json - - - - - -Utils.ts->assets/colors.json - - - - - -Customizations/SharedTagRenderings.ts->Utils.ts - - - - - -Customizations/SharedTagRenderings.ts->assets/tagRenderings/icons.json - - - - - -assets/tagRenderings/questions.json - - -questions.json - - - - - -Customizations/SharedTagRenderings.ts->assets/tagRenderings/questions.json - - - - - -Customizations/SharedTagRenderings.ts->Models/ThemeConfig/TagRenderingConfig.ts - - - - - - - -Customizations/AllKnownLayouts.ts - - -AllKnownLayouts.ts - - - - - -Customizations/AllKnownLayouts.ts->Customizations/AllKnownLayers.ts - - - - - -Customizations/AllKnownLayouts.ts->assets/generated/known_layers_and_themes.json - - - - - -Models/ThemeConfig/LayoutConfig.ts - - -LayoutConfig.ts - - - - - -Customizations/AllKnownLayouts.ts->Models/ThemeConfig/LayoutConfig.ts - - - - - -Customizations/AllKnownLayouts.ts->UI/Base/Combine.ts - - - - - -Customizations/AllKnownLayouts.ts->UI/Base/List.ts - - - - - - - -Customizations/AllKnownLayouts.ts->UI/Base/Title.ts - - - - - -Models/ThemeConfig/LayoutConfig.ts->Customizations/AllKnownLayers.ts - - - - - - - -Models/ThemeConfig/LayoutConfig.ts->Models/ThemeConfig/LayerConfig.ts - - - - - - - -Models/ThemeConfig/LayoutConfig.ts->Utils.ts - - - - - -Models/Constants.ts - - -Constants.ts - - - - - -Models/ThemeConfig/LayoutConfig.ts->Models/Constants.ts - - - - - -Models/ThemeConfig/LayoutConfig.ts->UI/i18n/Translation.ts - - - - - -Models/ThemeConfig/TilesourceConfig.ts - - -TilesourceConfig.ts - - - - - -Models/ThemeConfig/LayoutConfig.ts->Models/ThemeConfig/TilesourceConfig.ts - - - - - -UI/Base/Combine.ts->Utils.ts - - - - - -UI/Base/FixedUiElement.ts - - -FixedUiElement.ts - - - - - -UI/Base/Combine.ts->UI/Base/FixedUiElement.ts - - - - - -UI/BaseUIElement.ts - - -BaseUIElement.ts - - - - - -UI/Base/Combine.ts->UI/BaseUIElement.ts - - - - - -UI/Base/List.ts->Utils.ts - - - - - -UI/Base/List.ts->UI/i18n/Translations.ts - - - - - -UI/Base/List.ts->UI/BaseUIElement.ts - - - - - -UI/Base/Title.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Base/Title.ts->UI/BaseUIElement.ts - - - - - -Models/ThemeConfig/TagRenderingConfig.ts->Utils.ts - - - - - -Models/ThemeConfig/TagRenderingConfig.ts->UI/i18n/Translations.ts - - - - - -Logic/Tags/And.ts - - -And.ts - - - - - -Models/ThemeConfig/TagRenderingConfig.ts->Logic/Tags/And.ts - - - - - -Models/ThemeConfig/TagRenderingConfig.ts->Logic/Tags/TagUtils.ts - - - - - -Models/ThemeConfig/TagRenderingConfig.ts->UI/i18n/Translation.ts - - - - - -UI/Input/ValidatedTextField.ts - - -ValidatedTextField.ts - - - - - -Models/ThemeConfig/TagRenderingConfig.ts->UI/Input/ValidatedTextField.ts - - - - - -UI/SubstitutedTranslation.ts - - -SubstitutedTranslation.ts - - - - - -Models/ThemeConfig/TagRenderingConfig.ts->UI/SubstitutedTranslation.ts - - - - - - - -Logic/Actors/AvailableBaseLayers.ts - - -AvailableBaseLayers.ts - - - - - -Logic/Actors/AvailableBaseLayers.ts->Logic/UIEventSource.ts - - - - - -Logic/UIEventSource.ts->Utils.ts - - - - - -Logic/Actors/ChangeToElementsActor.ts - - -ChangeToElementsActor.ts - - - - - -Logic/Actors/InstalledThemes.ts - - -InstalledThemes.ts - - - - - -Logic/Actors/InstalledThemes.ts->Utils.ts - - - - - -Logic/Actors/InstalledThemes.ts->Models/ThemeConfig/LayoutConfig.ts - - - - - - - -Logic/Actors/OverpassFeatureSource.ts - - -OverpassFeatureSource.ts - - - - - -Logic/Actors/OverpassFeatureSource.ts->Customizations/AllKnownLayers.ts - - - - - - - -Logic/Actors/OverpassFeatureSource.ts->Utils.ts - - - - - -Logic/Actors/OverpassFeatureSource.ts->Logic/UIEventSource.ts - - - - - -Logic/Osm/Overpass.ts - - -Overpass.ts - - - - - -Logic/Actors/OverpassFeatureSource.ts->Logic/Osm/Overpass.ts - - - - - -Logic/SimpleMetaTagger.ts - - -SimpleMetaTagger.ts - - - - - -Logic/Actors/OverpassFeatureSource.ts->Logic/SimpleMetaTagger.ts - - - - - - - -Logic/Tags/Or.ts - - -Or.ts - - - - - -Logic/Actors/OverpassFeatureSource.ts->Logic/Tags/Or.ts - - - - - -Logic/Osm/Overpass.ts->Utils.ts - - - - - -Logic/SimpleMetaTagger.ts->Utils.ts - - - - - -Logic/SimpleMetaTagger.ts->UI/Base/Combine.ts - - - - - - - -Logic/SimpleMetaTagger.ts->UI/Base/Title.ts - - - - - - - -Logic/GeoOperations.ts - - -GeoOperations.ts - - - - - -Logic/SimpleMetaTagger.ts->Logic/GeoOperations.ts - - - - - -State.ts - - -State.ts - - - - - -Logic/SimpleMetaTagger.ts->State.ts - - - - - - - -Logic/SimpleMetaTagger.ts->UI/Base/FixedUiElement.ts - - - - - -Logic/Tags/TagsFilter.ts - - -TagsFilter.ts - - - - - -Logic/Tags/Or.ts->Logic/Tags/TagsFilter.ts - - - - - -Logic/Actors/PendingChangesUploader.ts - - -PendingChangesUploader.ts - - - - - -Logic/Actors/PendingChangesUploader.ts->Utils.ts - - - - - -Logic/Actors/PendingChangesUploader.ts->Models/Constants.ts - - - - - - - -Models/Constants.ts->Utils.ts - - - - - -Logic/Actors/SelectedElementTagsUpdater.ts - - -SelectedElementTagsUpdater.ts - - - - - -Logic/Actors/SelectedElementTagsUpdater.ts->Logic/SimpleMetaTagger.ts - - - - - - - -Logic/Osm/OsmObject.ts - - -OsmObject.ts - - - - - -Logic/Actors/SelectedElementTagsUpdater.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/Osm/OsmObject.ts->Utils.ts - - - - - -Logic/Osm/OsmObject.ts->Logic/UIEventSource.ts - - - - - -assets/polygon-features.json - - -polygon-features.json - - - - - -Logic/Osm/OsmObject.ts->assets/polygon-features.json - - - - - -Logic/Actors/SelectedFeatureHandler.ts - - -SelectedFeatureHandler.ts - - - - - -Logic/Actors/SelectedFeatureHandler.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/Actors/SelectedFeatureHandler.ts->Logic/GeoOperations.ts - - - - - -Logic/GeoOperations.ts->Models/Constants.ts - - - - - -Logic/BBox.ts - - -BBox.ts - - - - - -Logic/GeoOperations.ts->Logic/BBox.ts - - - - - - - -Logic/Actors/TitleHandler.ts - - -TitleHandler.ts - - - - - -Logic/Actors/TitleHandler.ts->Utils.ts - - - - - -Logic/Actors/TitleHandler.ts->UI/Base/Combine.ts - - - - - -Logic/Actors/TitleHandler.ts->Logic/UIEventSource.ts - - - - - -UI/i18n/Locale.ts - - -Locale.ts - - - - - -Logic/Actors/TitleHandler.ts->UI/i18n/Locale.ts - - - - - -Logic/Actors/TitleHandler.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/TagRenderingAnswer.ts - - -TagRenderingAnswer.ts - - - - - -Logic/Actors/TitleHandler.ts->UI/Popup/TagRenderingAnswer.ts - - - - - - - -UI/i18n/Locale.ts->Utils.ts - - - - - -Logic/Web/LocalStorageSource.ts - - -LocalStorageSource.ts - - - - - -UI/i18n/Locale.ts->Logic/Web/LocalStorageSource.ts - - - - - -Logic/Web/QueryParameters.ts - - -QueryParameters.ts - - - - - -UI/i18n/Locale.ts->Logic/Web/QueryParameters.ts - - - - - -UI/i18n/Translations.ts->AllTranslationAssets.ts - - - - - -UI/i18n/Translations.ts->UI/Base/FixedUiElement.ts - - - - - -UI/i18n/Translations.ts->UI/i18n/Translation.ts - - - - - -UI/Popup/TagRenderingAnswer.ts->Utils.ts - - - - - -UI/Popup/TagRenderingAnswer.ts->UI/Base/List.ts - - - - - -UI/Base/VariableUIElement.ts - - -VariableUIElement.ts - - - - - -UI/Popup/TagRenderingAnswer.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Popup/TagRenderingAnswer.ts->UI/SubstitutedTranslation.ts - - - - - - - -Logic/BBox.ts->Logic/GeoOperations.ts - - - - - - - -Models/TileRange.ts - - -TileRange.ts - - - - - -Logic/BBox.ts->Models/TileRange.ts - - - - - -Logic/ElementStorage.ts - - -ElementStorage.ts - - - - - -Logic/ElementStorage.ts->Logic/UIEventSource.ts - - - - - -Logic/ExtraFunctions.ts->UI/Base/Combine.ts - - - - - -Logic/ExtraFunctions.ts->UI/Base/List.ts - - - - - - - -Logic/ExtraFunctions.ts->UI/Base/Title.ts - - - - - -Logic/ExtraFunctions.ts->Logic/GeoOperations.ts - - - - - -Logic/ExtraFunctions.ts->Logic/BBox.ts - - - - - -Logic/FeatureSource/Actors/RegisteringAllFromFeatureSourceActor.ts - - -RegisteringAllFromFeatureSourceActor.ts - - - - - -Logic/FeatureSource/Actors/RegisteringAllFromFeatureSourceActor.ts->State.ts - - - - - - - -Logic/State/FeaturePipelineState.ts - - -FeaturePipelineState.ts - - - - - -State.ts->Logic/State/FeaturePipelineState.ts - - - - - - - -Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts - - -SaveTileToLocalStorageActor.ts - - - - - -Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts->Logic/BBox.ts - - - - - -Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts->Models/TileRange.ts - - - - - - - -Logic/Web/IdbLocalStorage.ts - - -IdbLocalStorage.ts - - - - - -Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts->Logic/Web/IdbLocalStorage.ts - - - - - -Logic/FeatureSource/Sources/SimpleFeatureSource.ts - - -SimpleFeatureSource.ts - - - - - -Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts->Logic/FeatureSource/Sources/SimpleFeatureSource.ts - - - - - -Logic/Web/IdbLocalStorage.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/Sources/SimpleFeatureSource.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/Sources/SimpleFeatureSource.ts->Logic/BBox.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts - - -FeaturePipeline.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/Actors/OverpassFeatureSource.ts - - - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Models/TileRange.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/Actors/RegisteringAllFromFeatureSourceActor.ts - - - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts - - - - - -Logic/MetaTagging.ts - - -MetaTagging.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/MetaTagging.ts - - - - - - - -Logic/Osm/RelationsTracker.ts - - -RelationsTracker.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/Osm/RelationsTracker.ts - - - - - -Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts - - -PerLayerFeatureSourceSplitter.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts - - - - - -Logic/FeatureSource/Sources/ChangeGeometryApplicator.ts - - -ChangeGeometryApplicator.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/Sources/ChangeGeometryApplicator.ts - - - - - -Logic/FeatureSource/Sources/FilteringFeatureSource.ts - - -FilteringFeatureSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/Sources/FilteringFeatureSource.ts - - - - - -Logic/FeatureSource/Sources/GeoJsonSource.ts - - -GeoJsonSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/Sources/GeoJsonSource.ts - - - - - -Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts - - -NewGeometryFromChangesFeatureSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts - - - - - - - -Logic/FeatureSource/Sources/RememberingSource.ts - - -RememberingSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/Sources/RememberingSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts - - -DynamicGeoJsonTileSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource.ts - - -FullNodeDatabaseSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts - - -OsmFeatureSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts - - -TiledFeatureSource.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TileHierarchy.ts - - -TileHierarchy.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/TiledFeatureSource/TileHierarchy.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts - - -TileHierarchyMerger.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts - - - - - -Logic/FeatureSource/TileFreshnessCalculator.ts - - -TileFreshnessCalculator.ts - - - - - -Logic/FeatureSource/FeaturePipeline.ts->Logic/FeatureSource/TileFreshnessCalculator.ts - - - - - -Logic/MetaTagging.ts->Logic/SimpleMetaTagger.ts - - - - - - - -Logic/MetaTagging.ts->Logic/ExtraFunctions.ts - - - - - -Logic/MetaTagging.ts->State.ts - - - - - - - -Logic/Osm/RelationsTracker.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts->Logic/FeatureSource/Sources/SimpleFeatureSource.ts - - - - - -Logic/FeatureSource/Sources/ChangeGeometryApplicator.ts->Logic/UIEventSource.ts - - - - - -Logic/Osm/Actions/ChangeDescription.ts - - -ChangeDescription.ts - - - - - -Logic/FeatureSource/Sources/ChangeGeometryApplicator.ts->Logic/Osm/Actions/ChangeDescription.ts - - - - - -Logic/FeatureSource/Sources/FilteringFeatureSource.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/Sources/FilteringFeatureSource.ts->Logic/BBox.ts - - - - - -Logic/Web/Hash.ts - - -Hash.ts - - - - - -Logic/FeatureSource/Sources/FilteringFeatureSource.ts->Logic/Web/Hash.ts - - - - - -Logic/FeatureSource/Sources/GeoJsonSource.ts->Utils.ts - - - - - -Logic/FeatureSource/Sources/GeoJsonSource.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/Sources/GeoJsonSource.ts->Logic/GeoOperations.ts - - - - - -Logic/FeatureSource/Sources/GeoJsonSource.ts->Logic/BBox.ts - - - - - -Logic/FeatureSource/Sources/GeoJsonSource.ts->Models/TileRange.ts - - - - - -Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts->State.ts - - - - - - - -Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts->Utils.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts->Logic/FeatureSource/Sources/GeoJsonSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts - - -DynamicTileSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts->Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource.ts->Logic/FeatureSource/Sources/SimpleFeatureSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts->Utils.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts->Logic/Tags/Or.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts->Logic/BBox.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts->Models/TileRange.ts - - - - - - - -Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts->Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts - - - - - -Logic/FeatureSource/Sources/StaticFeatureSource.ts - - -StaticFeatureSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts->Logic/BBox.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts->Models/TileRange.ts - - - - - - - -Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts->Logic/BBox.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts->Models/TileRange.ts - - - - - - - -Logic/FeatureSource/Sources/FeatureSourceMerger.ts - - -FeatureSourceMerger.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts->Logic/FeatureSource/Sources/FeatureSourceMerger.ts - - - - - -Logic/FeatureSource/TileFreshnessCalculator.ts->Models/TileRange.ts - - - - - - - -Logic/Osm/Actions/ChangeDescription.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/FeatureSource/Sources/FeatureSourceMerger.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/Sources/FeatureSourceMerger.ts->Models/TileRange.ts - - - - - -Logic/Web/Hash.ts->Utils.ts - - - - - -Logic/Web/Hash.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/Sources/RenderingMultiPlexerFeatureSource.ts - - -RenderingMultiPlexerFeatureSource.ts - - - - - -Logic/FeatureSource/Sources/RenderingMultiPlexerFeatureSource.ts->Logic/GeoOperations.ts - - - - - -Logic/FeatureSource/Sources/StaticFeatureSource.ts->Logic/UIEventSource.ts - - - - - -Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts->Models/TileRange.ts - - - - - -Logic/ImageProviders/AllImageProviders.ts - - -AllImageProviders.ts - - - - - -Logic/ImageProviders/AllImageProviders.ts->Logic/UIEventSource.ts - - - - - -Logic/ImageProviders/GenericImageProvider.ts - - -GenericImageProvider.ts - - - - - -Logic/ImageProviders/AllImageProviders.ts->Logic/ImageProviders/GenericImageProvider.ts - - - - - -Logic/ImageProviders/Imgur.ts - - -Imgur.ts - - - - - -Logic/ImageProviders/AllImageProviders.ts->Logic/ImageProviders/Imgur.ts - - - - - -Logic/ImageProviders/Mapillary.ts - - -Mapillary.ts - - - - - -Logic/ImageProviders/AllImageProviders.ts->Logic/ImageProviders/Mapillary.ts - - - - - -Logic/ImageProviders/WikidataImageProvider.ts - - -WikidataImageProvider.ts - - - - - -Logic/ImageProviders/AllImageProviders.ts->Logic/ImageProviders/WikidataImageProvider.ts - - - - - -Logic/ImageProviders/WikimediaImageProvider.ts - - -WikimediaImageProvider.ts - - - - - -Logic/ImageProviders/AllImageProviders.ts->Logic/ImageProviders/WikimediaImageProvider.ts - - - - - -Logic/ImageProviders/ImageProvider.ts - - -ImageProvider.ts - - - - - -Logic/ImageProviders/GenericImageProvider.ts->Logic/ImageProviders/ImageProvider.ts - - - - - -Logic/ImageProviders/Imgur.ts->Utils.ts - - - - - -Logic/ImageProviders/Imgur.ts->Models/Constants.ts - - - - - - - -Logic/ImageProviders/Imgur.ts->Logic/ImageProviders/ImageProvider.ts - - - - - -Logic/ImageProviders/LicenseInfo.ts - - -LicenseInfo.ts - - - - - -Logic/ImageProviders/Imgur.ts->Logic/ImageProviders/LicenseInfo.ts - - - - - -Logic/ImageProviders/Mapillary.ts->Utils.ts - - - - - -Logic/ImageProviders/Mapillary.ts->Models/Constants.ts - - - - - - - -Logic/ImageProviders/Mapillary.ts->Logic/ImageProviders/ImageProvider.ts - - - - - -Logic/ImageProviders/Mapillary.ts->Logic/ImageProviders/LicenseInfo.ts - - - - - -Svg.ts - - -Svg.ts - - - - - -Logic/ImageProviders/Mapillary.ts->Svg.ts - - - - - -Logic/ImageProviders/WikidataImageProvider.ts->Logic/ImageProviders/WikimediaImageProvider.ts - - - - - -Logic/ImageProviders/WikidataImageProvider.ts->Logic/ImageProviders/ImageProvider.ts - - - - - -Logic/ImageProviders/WikidataImageProvider.ts->Svg.ts - - - - - -Logic/Web/Wikidata.ts - - -Wikidata.ts - - - - - -Logic/ImageProviders/WikidataImageProvider.ts->Logic/Web/Wikidata.ts - - - - - -Logic/ImageProviders/WikimediaImageProvider.ts->Utils.ts - - - - - -Logic/ImageProviders/WikimediaImageProvider.ts->Logic/ImageProviders/ImageProvider.ts - - - - - -Logic/ImageProviders/WikimediaImageProvider.ts->Logic/ImageProviders/LicenseInfo.ts - - - - - -Logic/ImageProviders/WikimediaImageProvider.ts->Svg.ts - - - - - -Logic/ImageProviders/WikimediaImageProvider.ts->UI/Base/Link.ts - - - - - -Logic/Web/Wikimedia.ts - - -Wikimedia.ts - - - - - -Logic/ImageProviders/WikimediaImageProvider.ts->Logic/Web/Wikimedia.ts - - - - - -Logic/ImageProviders/ImageProvider.ts->Utils.ts - - - - - -Logic/ImageProviders/ImageProvider.ts->Logic/UIEventSource.ts - - - - - -Logic/ImageProviders/ImgurUploader.ts - - -ImgurUploader.ts - - - - - -Logic/ImageProviders/ImgurUploader.ts->Logic/UIEventSource.ts - - - - - -Logic/ImageProviders/ImgurUploader.ts->Logic/ImageProviders/Imgur.ts - - - - - -UI/Base/Img.ts - - -Img.ts - - - - - -Svg.ts->UI/Base/Img.ts - - - - - -Svg.ts->UI/Base/FixedUiElement.ts - - - - - -Logic/Web/Wikidata.ts->Utils.ts - - - - - -Logic/Web/Wikidata.ts->Logic/UIEventSource.ts - - - - - -UI/Base/Link.ts->UI/i18n/Translations.ts - - - - - - - -UI/Base/Link.ts->UI/BaseUIElement.ts - - - - - -Logic/Web/Wikimedia.ts->Utils.ts - - - - - -Logic/Osm/Actions/ChangeLocationAction.ts - - -ChangeLocationAction.ts - - - - - -Logic/Osm/Actions/OsmChangeAction.ts - - -OsmChangeAction.ts - - - - - -Logic/Osm/Actions/ChangeLocationAction.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/ChangeTagAction.ts - - -ChangeTagAction.ts - - - - - -Logic/Osm/Actions/ChangeTagAction.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/CreateNewNodeAction.ts - - -CreateNewNodeAction.ts - - - - - -Logic/Osm/Actions/CreateNewNodeAction.ts->Logic/GeoOperations.ts - - - - - -Logic/Osm/Actions/CreateNewNodeAction.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/CreateNewNodeAction.ts->Logic/Tags/And.ts - - - - - -Logic/Tags/And.ts->Logic/Tags/TagsFilter.ts - - - - - -Logic/Osm/Actions/CreateNewWayAction.ts - - -CreateNewWayAction.ts - - - - - -Logic/Osm/Actions/CreateNewWayAction.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/CreateNewWayAction.ts->Logic/Osm/Actions/CreateNewNodeAction.ts - - - - - -Logic/Osm/Actions/CreateNewWayAction.ts->Logic/Tags/And.ts - - - - - -Logic/Osm/Actions/CreateWayWithPointReuseAction.ts - - -CreateWayWithPointReuseAction.ts - - - - - -Logic/Osm/Actions/CreateWayWithPointReuseAction.ts->Logic/GeoOperations.ts - - - - - -Logic/Osm/Actions/CreateWayWithPointReuseAction.ts->Logic/BBox.ts - - - - - -Logic/Osm/Actions/CreateWayWithPointReuseAction.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -Logic/Osm/Actions/CreateWayWithPointReuseAction.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/CreateWayWithPointReuseAction.ts->Logic/Osm/Actions/CreateNewNodeAction.ts - - - - - -Logic/Osm/Actions/CreateWayWithPointReuseAction.ts->Logic/Osm/Actions/CreateNewWayAction.ts - - - - - -Logic/Osm/Actions/DeleteAction.ts - - -DeleteAction.ts - - - - - -Logic/Osm/Actions/DeleteAction.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/Osm/Actions/DeleteAction.ts->State.ts - - - - - - - -Logic/Osm/Actions/DeleteAction.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/DeleteAction.ts->Logic/Osm/Actions/ChangeTagAction.ts - - - - - -Logic/Osm/Actions/DeleteAction.ts->Logic/Tags/And.ts - - - - - -Logic/Tags/Tag.ts - - -Tag.ts - - - - - -Logic/Osm/Actions/DeleteAction.ts->Logic/Tags/Tag.ts - - - - - -Logic/Tags/Tag.ts->Utils.ts - - - - - -Logic/Tags/Tag.ts->Logic/Tags/TagsFilter.ts - - - - - -Logic/Tags/RegexTag.ts - - -RegexTag.ts - - - - - -Logic/Tags/Tag.ts->Logic/Tags/RegexTag.ts - - - - - - - -Logic/Osm/Actions/RelationSplitHandler.ts - - -RelationSplitHandler.ts - - - - - -Logic/Osm/Actions/RelationSplitHandler.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/Osm/Actions/RelationSplitHandler.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts - - -ReplaceGeometryAction.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts->Utils.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts->Logic/GeoOperations.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts->Logic/Osm/Actions/ChangeTagAction.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts->Logic/Osm/Actions/CreateNewNodeAction.ts - - - - - -Logic/Osm/Actions/ReplaceGeometryAction.ts->Logic/Tags/And.ts - - - - - -Logic/Osm/Actions/SplitAction.ts - - -SplitAction.ts - - - - - -Logic/Osm/Actions/SplitAction.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/Osm/Actions/SplitAction.ts->Logic/GeoOperations.ts - - - - - -Logic/Osm/Actions/SplitAction.ts->Logic/Osm/Actions/OsmChangeAction.ts - - - - - -Logic/Osm/Actions/SplitAction.ts->Logic/Osm/Actions/RelationSplitHandler.ts - - - - - -Logic/Osm/Changes.ts - - -Changes.ts - - - - - -Logic/Osm/Changes.ts->Utils.ts - - - - - -Logic/Osm/Changes.ts->Logic/UIEventSource.ts - - - - - -Logic/Osm/Changes.ts->Logic/SimpleMetaTagger.ts - - - - - - - -Logic/Osm/Changes.ts->Models/Constants.ts - - - - - - - -Logic/Osm/Changes.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/Osm/Changes.ts->Logic/GeoOperations.ts - - - - - -Logic/Osm/Changes.ts->State.ts - - - - - - - -Logic/Osm/Changes.ts->Logic/Osm/Actions/CreateNewNodeAction.ts - - - - - -Logic/Osm/Changes.ts->Logic/Web/LocalStorageSource.ts - - - - - -Logic/Web/LocalStorageSource.ts->Logic/UIEventSource.ts - - - - - -Logic/Osm/ChangesetHandler.ts - - -ChangesetHandler.ts - - - - - -Logic/Osm/ChangesetHandler.ts->Utils.ts - - - - - -Logic/Osm/ChangesetHandler.ts->Models/Constants.ts - - - - - -Logic/Osm/ChangesetHandler.ts->UI/i18n/Locale.ts - - - - - -Logic/Osm/ChangesetHandler.ts->State.ts - - - - - - - -Logic/Osm/OsmConnection.ts - - -OsmConnection.ts - - - - - -Logic/Osm/OsmConnection.ts->Utils.ts - - - - - -Logic/Osm/OsmConnection.ts->Logic/UIEventSource.ts - - - - - -Logic/Osm/OsmConnection.ts->Logic/Osm/OsmObject.ts - - - - - -Logic/Osm/OsmConnection.ts->Svg.ts - - - - - -Logic/Osm/OsmConnection.ts->Logic/Osm/ChangesetHandler.ts - - - - - - - -Logic/Osm/OsmConnection.ts->UI/Base/Img.ts - - - - - - - -Logic/Osm/OsmPreferences.ts - - -OsmPreferences.ts - - - - - -Logic/Osm/OsmConnection.ts->Logic/Osm/OsmPreferences.ts - - - - - -UI/Base/Img.ts->Utils.ts - - - - - -UI/Base/Img.ts->UI/BaseUIElement.ts - - - - - -Logic/Osm/OsmPreferences.ts->Utils.ts - - - - - -Logic/Osm/OsmPreferences.ts->Logic/UIEventSource.ts - - - - - -UI/Base/FixedUiElement.ts->UI/BaseUIElement.ts - - - - - -Logic/State/ElementsState.ts - - -ElementsState.ts - - - - - -Logic/State/ElementsState.ts->Utils.ts - - - - - -Logic/State/ElementsState.ts->Logic/UIEventSource.ts - - - - - -Logic/State/ElementsState.ts->Logic/Actors/ChangeToElementsActor.ts - - - - - -Logic/State/ElementsState.ts->Logic/Actors/PendingChangesUploader.ts - - - - - -Logic/State/ElementsState.ts->Logic/Actors/TitleHandler.ts - - - - - - - -Logic/State/ElementsState.ts->Logic/ElementStorage.ts - - - - - -Logic/State/ElementsState.ts->Logic/Osm/Changes.ts - - - - - - - -Logic/State/ElementsState.ts->Logic/Web/LocalStorageSource.ts - - - - - -Logic/State/ElementsState.ts->Logic/Web/QueryParameters.ts - - - - - -Logic/State/FeatureSwitchState.ts - - -FeatureSwitchState.ts - - - - - -Logic/State/ElementsState.ts->Logic/State/FeatureSwitchState.ts - - - - - -Logic/Web/QueryParameters.ts->Utils.ts - - - - - -Logic/Web/QueryParameters.ts->Logic/UIEventSource.ts - - - - - -Logic/Web/QueryParameters.ts->Logic/Web/Hash.ts - - - - - -Logic/State/FeatureSwitchState.ts->Utils.ts - - - - - -Logic/State/FeatureSwitchState.ts->Logic/UIEventSource.ts - - - - - -Logic/State/FeatureSwitchState.ts->Models/Constants.ts - - - - - - - -Logic/State/FeatureSwitchState.ts->Logic/Web/QueryParameters.ts - - - - - -Logic/State/FeaturePipelineState.ts->Logic/Actors/SelectedFeatureHandler.ts - - - - - -Logic/State/FeaturePipelineState.ts->Models/TileRange.ts - - - - - -Logic/State/FeaturePipelineState.ts->Logic/FeatureSource/FeaturePipeline.ts - - - - - - - -Logic/State/FeaturePipelineState.ts->Logic/Web/Hash.ts - - - - - -UI/ShowDataLayer/ShowDataLayer.ts - - -ShowDataLayer.ts - - - - - -Logic/State/FeaturePipelineState.ts->UI/ShowDataLayer/ShowDataLayer.ts - - - - - - - -UI/ShowDataLayer/ShowTileInfo.ts - - -ShowTileInfo.ts - - - - - -Logic/State/FeaturePipelineState.ts->UI/ShowDataLayer/ShowTileInfo.ts - - - - - - - -UI/ShowDataLayer/TileHierarchyAggregator.ts - - -TileHierarchyAggregator.ts - - - - - -Logic/State/FeaturePipelineState.ts->UI/ShowDataLayer/TileHierarchyAggregator.ts - - - - - -Logic/State/MapState.ts - - -MapState.ts - - - - - -Logic/State/FeaturePipelineState.ts->Logic/State/MapState.ts - - - - - - - -UI/ShowDataLayer/ShowDataLayer.ts->Logic/UIEventSource.ts - - - - - -UI/ShowDataLayer/ShowDataLayer.ts->Logic/FeatureSource/Sources/RenderingMultiPlexerFeatureSource.ts - - - - - -UI/Popup/FeatureInfoBox.ts - - -FeatureInfoBox.ts - - - - - -UI/ShowDataLayer/ShowDataLayer.ts->UI/Popup/FeatureInfoBox.ts - - - - - - - -UI/ShowDataLayer/ShowTileInfo.ts->Models/ThemeConfig/LayerConfig.ts - - - - - - - -UI/ShowDataLayer/ShowTileInfo.ts->Logic/GeoOperations.ts - - - - - -UI/ShowDataLayer/ShowTileInfo.ts->Models/TileRange.ts - - - - - -UI/ShowDataLayer/ShowTileInfo.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -UI/ShowDataLayer/ShowTileInfo.ts->UI/ShowDataLayer/ShowDataLayer.ts - - - - - - - -assets/layers/cluster_style/cluster_style.json - - -cluster_style.json - - - - - -UI/ShowDataLayer/ShowTileInfo.ts->assets/layers/cluster_style/cluster_style.json - - - - - -UI/ShowDataLayer/TileHierarchyAggregator.ts->Logic/UIEventSource.ts - - - - - -UI/ShowDataLayer/TileHierarchyAggregator.ts->Logic/BBox.ts - - - - - -UI/ShowDataLayer/TileHierarchyAggregator.ts->Models/TileRange.ts - - - - - -UI/ShowDataLayer/TileHierarchyAggregator.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -Logic/State/MapState.ts->Logic/Actors/AvailableBaseLayers.ts - - - - - -Logic/State/MapState.ts->Logic/UIEventSource.ts - - - - - -Logic/State/MapState.ts->Logic/GeoOperations.ts - - - - - -Logic/State/MapState.ts->Models/TileRange.ts - - - - - -Logic/State/MapState.ts->Logic/FeatureSource/Sources/SimpleFeatureSource.ts - - - - - -Logic/State/MapState.ts->Logic/Web/LocalStorageSource.ts - - - - - -Logic/State/MapState.ts->Logic/Web/QueryParameters.ts - - - - - -assets/themes/personal/personal.json - - -personal.json - - - - - -Logic/State/MapState.ts->assets/themes/personal/personal.json - - - - - -UI/Base/Minimap.ts - - -Minimap.ts - - - - - -Logic/State/MapState.ts->UI/Base/Minimap.ts - - - - - -UI/BigComponents/Attribution.ts - - -Attribution.ts - - - - - -Logic/State/MapState.ts->UI/BigComponents/Attribution.ts - - - - - -UI/ShowDataLayer/ShowOverlayLayer.ts - - -ShowOverlayLayer.ts - - - - - -Logic/State/MapState.ts->UI/ShowDataLayer/ShowOverlayLayer.ts - - - - - -Logic/State/UserRelatedState.ts - - -UserRelatedState.ts - - - - - -Logic/State/MapState.ts->Logic/State/UserRelatedState.ts - - - - - - - -UI/BigComponents/Attribution.ts->Utils.ts - - - - - -UI/BigComponents/Attribution.ts->UI/Base/Combine.ts - - - - - -UI/BigComponents/Attribution.ts->Models/Constants.ts - - - - - -UI/BigComponents/Attribution.ts->Svg.ts - - - - - -UI/BigComponents/Attribution.ts->UI/Base/Link.ts - - - - - -UI/BigComponents/Attribution.ts->UI/Base/VariableUIElement.ts - - - - - -Logic/State/UserRelatedState.ts->Utils.ts - - - - - -Logic/State/UserRelatedState.ts->Logic/Actors/InstalledThemes.ts - - - - - - - -Logic/State/UserRelatedState.ts->Logic/Actors/SelectedElementTagsUpdater.ts - - - - - - - -Logic/State/UserRelatedState.ts->UI/i18n/Locale.ts - - - - - -Logic/State/UserRelatedState.ts->Logic/Web/LocalStorageSource.ts - - - - - -Logic/State/UserRelatedState.ts->Logic/Osm/OsmConnection.ts - - - - - - - -Logic/State/UserRelatedState.ts->Logic/State/ElementsState.ts - - - - - - - -Logic/State/UserRelatedState.ts->Logic/Web/QueryParameters.ts - - - - - -Logic/Web/MangroveReviews.ts - - -MangroveReviews.ts - - - - - -Logic/State/UserRelatedState.ts->Logic/Web/MangroveReviews.ts - - - - - -Logic/Web/MangroveReviews.ts->Logic/UIEventSource.ts - - - - - -Logic/Tags/ComparingTag.ts - - -ComparingTag.ts - - - - - -Logic/Tags/RegexTag.ts->Logic/Tags/Tag.ts - - - - - - - -Logic/Tags/RegexTag.ts->Logic/Tags/TagsFilter.ts - - - - - -Logic/Tags/SubstitutingTag.ts - - -SubstitutingTag.ts - - - - - -Logic/Tags/TagUtils.ts->Utils.ts - - - - - -Logic/Tags/TagUtils.ts->Logic/Tags/Or.ts - - - - - -Logic/Tags/TagUtils.ts->Logic/Tags/And.ts - - - - - -Logic/Tags/TagUtils.ts->Logic/Tags/Tag.ts - - - - - -Logic/Tags/TagUtils.ts->Logic/Tags/ComparingTag.ts - - - - - -Logic/Tags/TagUtils.ts->Logic/Tags/RegexTag.ts - - - - - -Logic/Tags/TagUtils.ts->Logic/Tags/SubstitutingTag.ts - - - - - -util - -util - - - -Logic/Tags/TagUtils.ts->util - - - - - -Logic/Web/LiveQueryHandler.ts - - -LiveQueryHandler.ts - - - - - -Logic/Web/LiveQueryHandler.ts->Utils.ts - - - - - -Logic/Web/LiveQueryHandler.ts->Logic/UIEventSource.ts - - - - - -Logic/Web/Wikipedia.ts - - -Wikipedia.ts - - - - - -Logic/Web/Wikipedia.ts->Utils.ts - - - - - -Logic/Web/Wikipedia.ts->Logic/UIEventSource.ts - - - - - -Models/Denomination.ts - - -Denomination.ts - - - - - -Models/Denomination.ts->UI/i18n/Translations.ts - - - - - -UI/Input/Toggle.ts - - -Toggle.ts - - - - - -Models/Denomination.ts->UI/Input/Toggle.ts - - - - - -UI/Input/Toggle.ts->Logic/UIEventSource.ts - - - - - -UI/Input/Toggle.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Base/Lazy.ts - - -Lazy.ts - - - - - -UI/Input/Toggle.ts->UI/Base/Lazy.ts - - - - - -Models/ThemeConfig/DeleteConfig.ts->UI/i18n/Translations.ts - - - - - - - -Models/ThemeConfig/DeleteConfig.ts->Logic/Tags/TagUtils.ts - - - - - -Models/ThemeConfig/FilterConfig.ts->UI/i18n/Translations.ts - - - - - - - -Models/ThemeConfig/FilterConfig.ts->Logic/Tags/TagUtils.ts - - - - - -Models/Unit.ts->UI/Base/Combine.ts - - - - - - - -Models/Unit.ts->UI/Base/FixedUiElement.ts - - - - - -Models/Unit.ts->Models/Denomination.ts - - - - - -Models/ThemeConfig/LineRenderingConfig.ts->Models/ThemeConfig/WithContextLoader.ts - - - - - - - -Models/ThemeConfig/LineRenderingConfig.ts->Utils.ts - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->Models/ThemeConfig/WithContextLoader.ts - - - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->Utils.ts - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->Customizations/SharedTagRenderings.ts - - - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->UI/Base/Combine.ts - - - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->Models/ThemeConfig/TagRenderingConfig.ts - - - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->Svg.ts - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->UI/Base/Img.ts - - - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->UI/Base/FixedUiElement.ts - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->Logic/Tags/TagUtils.ts - - - - - -Models/ThemeConfig/PointRenderingConfig.ts->UI/Base/VariableUIElement.ts - - - - - - - -Models/ThemeConfig/SourceConfig.ts->Logic/Tags/RegexTag.ts - - - - - -UI/i18n/Translation.ts->Utils.ts - - - - - -UI/i18n/Translation.ts->UI/i18n/Locale.ts - - - - - -UI/i18n/Translation.ts->UI/BaseUIElement.ts - - - - - -Models/ThemeConfig/TilesourceConfig.ts->UI/i18n/Translations.ts - - - - - -Models/ThemeConfig/LegacyJsonConvert.ts - - -LegacyJsonConvert.ts - - - - - -UI/Base/VariableUIElement.ts->UI/BaseUIElement.ts - - - - - -UI/Input/ValidatedTextField.ts->Utils.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Base/Combine.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Base/Title.ts - - - - - -UI/Input/ValidatedTextField.ts->Logic/Actors/AvailableBaseLayers.ts - - - - - -UI/Input/ValidatedTextField.ts->Logic/UIEventSource.ts - - - - - -UI/Input/ValidatedTextField.ts->Logic/GeoOperations.ts - - - - - -UI/Input/ValidatedTextField.ts->Logic/Web/Wikidata.ts - - - - - -UI/Base/Table.ts - - -Table.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Base/Table.ts - - - - - -UI/Input/DropDown.ts - - -DropDown.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Input/DropDown.ts - - - - - -UI/Input/ColorPicker.ts - - -ColorPicker.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Input/ColorPicker.ts - - - - - -UI/Input/CombinedInputElement.ts - - -CombinedInputElement.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Input/CombinedInputElement.ts - - - - - -UI/Input/DirectionInput.ts - - -DirectionInput.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Input/DirectionInput.ts - - - - - -UI/Input/FixedInputElement.ts - - -FixedInputElement.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Input/FixedInputElement.ts - - - - - -UI/Input/LengthInput.ts - - -LengthInput.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Input/LengthInput.ts - - - - - -UI/Input/SimpleDatePicker.ts - - -SimpleDatePicker.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Input/SimpleDatePicker.ts - - - - - -UI/Input/TextField.ts - - -TextField.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Input/TextField.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts - - -OpeningHoursInput.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/OpeningHours/OpeningHoursInput.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts - - -WikidataSearchBox.ts - - - - - -UI/Input/ValidatedTextField.ts->UI/Wikipedia/WikidataSearchBox.ts - - - - - -UI/SubstitutedTranslation.ts->Utils.ts - - - - - -UI/SubstitutedTranslation.ts->UI/Base/Combine.ts - - - - - -UI/SubstitutedTranslation.ts->UI/i18n/Locale.ts - - - - - -UI/SubstitutedTranslation.ts->State.ts - - - - - - - -UI/SubstitutedTranslation.ts->UI/Base/FixedUiElement.ts - - - - - -UI/SubstitutedTranslation.ts->UI/Base/VariableUIElement.ts - - - - - -UI/SpecialVisualizations.ts - - -SpecialVisualizations.ts - - - - - -UI/SubstitutedTranslation.ts->UI/SpecialVisualizations.ts - - - - - - - -UI/DefaultGuiState.ts - - -DefaultGuiState.ts - - - - - -UI/SubstitutedTranslation.ts->UI/DefaultGuiState.ts - - - - - -UI/Base/Button.ts - - -Button.ts - - - - - -UI/Base/Button.ts->UI/i18n/Translations.ts - - - - - -UI/Base/Button.ts->UI/BaseUIElement.ts - - - - - -UI/BaseUIElement.ts->Utils.ts - - - - - -UI/Base/Lazy.ts->UI/BaseUIElement.ts - - - - - -UI/Base/Loading.ts - - -Loading.ts - - - - - -UI/Base/Loading.ts->UI/Base/Combine.ts - - - - - -UI/Base/Loading.ts->UI/i18n/Translations.ts - - - - - -UI/Base/Loading.ts->Svg.ts - - - - - -UI/Base/ScrollableFullScreen.ts - - -ScrollableFullScreen.ts - - - - - -UI/Base/ScrollableFullScreen.ts->UI/Base/Combine.ts - - - - - -UI/Base/ScrollableFullScreen.ts->Logic/UIEventSource.ts - - - - - -UI/Base/ScrollableFullScreen.ts->Logic/Web/Hash.ts - - - - - -UI/Base/ScrollableFullScreen.ts->Svg.ts - - - - - -UI/Base/ScrollableFullScreen.ts->UI/Base/Img.ts - - - - - -UI/Base/ScrollableFullScreen.ts->UI/Base/FixedUiElement.ts - - - - - -UI/UIElement.ts - - -UIElement.ts - - - - - -UI/Base/ScrollableFullScreen.ts->UI/UIElement.ts - - - - - -UI/UIElement.ts->UI/BaseUIElement.ts - - - - - -UI/Base/SubtleButton.ts - - -SubtleButton.ts - - - - - -UI/Base/SubtleButton.ts->UI/Base/Combine.ts - - - - - -UI/Base/SubtleButton.ts->UI/i18n/Translations.ts - - - - - -UI/Base/SubtleButton.ts->UI/Base/Link.ts - - - - - -UI/Base/SubtleButton.ts->UI/Base/Img.ts - - - - - -UI/Base/SubtleButton.ts->UI/UIElement.ts - - - - - -UI/Base/TabbedComponent.ts - - -TabbedComponent.ts - - - - - -UI/Base/TabbedComponent.ts->UI/Base/Combine.ts - - - - - -UI/Base/TabbedComponent.ts->Logic/UIEventSource.ts - - - - - -UI/Base/TabbedComponent.ts->UI/i18n/Translations.ts - - - - - -UI/Base/TabbedComponent.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Base/Table.ts->Utils.ts - - - - - -UI/Base/Table.ts->UI/i18n/Translations.ts - - - - - -UI/Base/Table.ts->UI/BaseUIElement.ts - - - - - -UI/BigComponents/Histogram.ts - - -Histogram.ts - - - - - -UI/BigComponents/Histogram.ts->Utils.ts - - - - - -UI/BigComponents/Histogram.ts->UI/Base/Combine.ts - - - - - -UI/BigComponents/Histogram.ts->UI/i18n/Translations.ts - - - - - -UI/BigComponents/Histogram.ts->UI/Base/FixedUiElement.ts - - - - - -UI/BigComponents/Histogram.ts->UI/Base/VariableUIElement.ts - - - - - -UI/BigComponents/Histogram.ts->UI/Base/Table.ts - - - - - -UI/BigComponents/ImportButton.ts - - -ImportButton.ts - - - - - -UI/BigComponents/ImportButton.ts->Customizations/AllKnownLayers.ts - - - - - - - -UI/BigComponents/ImportButton.ts->Utils.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/Base/Combine.ts - - - - - -UI/BigComponents/ImportButton.ts->Logic/UIEventSource.ts - - - - - -UI/BigComponents/ImportButton.ts->Models/Constants.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/i18n/Translations.ts - - - - - -UI/BigComponents/ImportButton.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -UI/BigComponents/ImportButton.ts->Svg.ts - - - - - -UI/BigComponents/ImportButton.ts->Logic/Osm/Actions/CreateNewNodeAction.ts - - - - - -UI/BigComponents/ImportButton.ts->Logic/Osm/Actions/CreateWayWithPointReuseAction.ts - - - - - -UI/BigComponents/ImportButton.ts->Logic/Tags/Tag.ts - - - - - -UI/BigComponents/ImportButton.ts->Logic/Osm/Actions/ReplaceGeometryAction.ts - - - - - -UI/BigComponents/ImportButton.ts->Logic/Osm/OsmConnection.ts - - - - - - - -UI/BigComponents/ImportButton.ts->UI/Base/Img.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/Base/FixedUiElement.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/ShowDataLayer/ShowDataLayer.ts - - - - - - - -UI/BigComponents/ImportButton.ts->UI/Base/Minimap.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/Input/Toggle.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/Base/VariableUIElement.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/Base/Lazy.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/Base/Loading.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/Base/SubtleButton.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts - - -ConfirmLocationOfPoint.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/NewPoint/ConfirmLocationOfPoint.ts - - - - - - - -UI/ShowDataLayer/ShowDataMultiLayer.ts - - -ShowDataMultiLayer.ts - - - - - -UI/BigComponents/ImportButton.ts->UI/ShowDataLayer/ShowDataMultiLayer.ts - - - - - - - -UI/BigComponents/ImportButton.ts->UI/SpecialVisualizations.ts - - - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->UI/Base/Combine.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->Logic/Actors/AvailableBaseLayers.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->Logic/UIEventSource.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->UI/i18n/Translations.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->Svg.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->Logic/Tags/TagUtils.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->UI/Input/Toggle.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->UI/Base/SubtleButton.ts - - - - - -UI/BigComponents/SimpleAddUI.ts - - -SimpleAddUI.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->UI/BigComponents/SimpleAddUI.ts - - - - - - - -UI/Input/LocationInput.ts - - -LocationInput.ts - - - - - -UI/NewPoint/ConfirmLocationOfPoint.ts->UI/Input/LocationInput.ts - - - - - - - -UI/ShowDataLayer/ShowDataMultiLayer.ts->Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts - - - - - -UI/ShowDataLayer/ShowDataMultiLayer.ts->UI/ShowDataLayer/ShowDataLayer.ts - - - - - - - -UI/SpecialVisualizations.ts->Customizations/AllKnownLayers.ts - - - - - - - -UI/SpecialVisualizations.ts->Utils.ts - - - - - -UI/SpecialVisualizations.ts->UI/Base/Combine.ts - - - - - -UI/SpecialVisualizations.ts->UI/Base/Title.ts - - - - - -UI/SpecialVisualizations.ts->Logic/UIEventSource.ts - - - - - -UI/SpecialVisualizations.ts->Logic/SimpleMetaTagger.ts - - - - - - - -UI/SpecialVisualizations.ts->Logic/GeoOperations.ts - - - - - -UI/SpecialVisualizations.ts->UI/i18n/Translations.ts - - - - - -UI/SpecialVisualizations.ts->State.ts - - - - - - - -UI/SpecialVisualizations.ts->Logic/Web/Hash.ts - - - - - -UI/SpecialVisualizations.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -UI/SpecialVisualizations.ts->Logic/ImageProviders/AllImageProviders.ts - - - - - -UI/SpecialVisualizations.ts->Svg.ts - - - - - -UI/SpecialVisualizations.ts->Logic/Osm/Actions/ChangeTagAction.ts - - - - - -UI/SpecialVisualizations.ts->Logic/Tags/And.ts - - - - - -UI/SpecialVisualizations.ts->Logic/Tags/Tag.ts - - - - - -UI/SpecialVisualizations.ts->UI/Base/FixedUiElement.ts - - - - - -UI/SpecialVisualizations.ts->UI/ShowDataLayer/ShowDataLayer.ts - - - - - - - -UI/SpecialVisualizations.ts->UI/Base/Minimap.ts - - - - - -UI/SpecialVisualizations.ts->Logic/Web/MangroveReviews.ts - - - - - -UI/SpecialVisualizations.ts->Logic/Web/LiveQueryHandler.ts - - - - - -UI/SpecialVisualizations.ts->UI/Input/Toggle.ts - - - - - -UI/SpecialVisualizations.ts->UI/Base/VariableUIElement.ts - - - - - -UI/SpecialVisualizations.ts->UI/Base/SubtleButton.ts - - - - - -UI/SpecialVisualizations.ts->UI/Base/Table.ts - - - - - -UI/SpecialVisualizations.ts->UI/BigComponents/Histogram.ts - - - - - -UI/SpecialVisualizations.ts->UI/BigComponents/ImportButton.ts - - - - - - - -UI/SpecialVisualizations.ts->UI/ShowDataLayer/ShowDataMultiLayer.ts - - - - - - - -UI/BigComponents/ShareButton.ts - - -ShareButton.ts - - - - - -UI/SpecialVisualizations.ts->UI/BigComponents/ShareButton.ts - - - - - -UI/Image/ImageCarousel.ts - - -ImageCarousel.ts - - - - - -UI/SpecialVisualizations.ts->UI/Image/ImageCarousel.ts - - - - - - - -UI/Image/ImageUploadFlow.ts - - -ImageUploadFlow.ts - - - - - -UI/SpecialVisualizations.ts->UI/Image/ImageUploadFlow.ts - - - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts - - -OpeningHoursVisualization.ts - - - - - -UI/SpecialVisualizations.ts->UI/OpeningHours/OpeningHoursVisualization.ts - - - - - - - -UI/Popup/MultiApply.ts - - -MultiApply.ts - - - - - -UI/SpecialVisualizations.ts->UI/Popup/MultiApply.ts - - - - - -UI/Reviews/ReviewElement.ts - - -ReviewElement.ts - - - - - -UI/SpecialVisualizations.ts->UI/Reviews/ReviewElement.ts - - - - - -UI/Reviews/ReviewForm.ts - - -ReviewForm.ts - - - - - -UI/SpecialVisualizations.ts->UI/Reviews/ReviewForm.ts - - - - - -UI/Wikipedia/WikipediaBox.ts - - -WikipediaBox.ts - - - - - -UI/SpecialVisualizations.ts->UI/Wikipedia/WikipediaBox.ts - - - - - -UI/BigComponents/LicensePicker.ts - - -LicensePicker.ts - - - - - -UI/BigComponents/LicensePicker.ts->Logic/UIEventSource.ts - - - - - -UI/BigComponents/LicensePicker.ts->UI/i18n/Translations.ts - - - - - -UI/BigComponents/LicensePicker.ts->State.ts - - - - - - - -UI/BigComponents/LicensePicker.ts->UI/Input/DropDown.ts - - - - - -UI/Input/DropDown.ts->Logic/UIEventSource.ts - - - - - -UI/Input/DropDown.ts->UI/i18n/Translations.ts - - - - - -UI/Input/InputElement.ts - - -InputElement.ts - - - - - -UI/Input/DropDown.ts->UI/Input/InputElement.ts - - - - - -UI/BigComponents/ShareButton.ts->UI/BaseUIElement.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->UI/Base/Combine.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->Logic/UIEventSource.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->Models/Constants.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->Logic/Osm/OsmObject.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->UI/i18n/Translations.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->Svg.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->Logic/Osm/Actions/CreateNewNodeAction.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->Logic/Tags/TagUtils.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->UI/Input/Toggle.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->UI/Base/VariableUIElement.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->UI/Base/SubtleButton.ts - - - - - -UI/BigComponents/SimpleAddUI.ts->UI/NewPoint/ConfirmLocationOfPoint.ts - - - - - - - - - - - -UI/DefaultGuiState.ts->Logic/UIEventSource.ts - - - - - -UI/DefaultGuiState.ts->Logic/Web/Hash.ts - - - - - -UI/DefaultGuiState.ts->Logic/Web/QueryParameters.ts - - - - - -UI/Image/AttributedImage.ts - - -AttributedImage.ts - - - - - -UI/Image/AttributedImage.ts->UI/Base/Combine.ts - - - - - -UI/Image/AttributedImage.ts->Logic/ImageProviders/Mapillary.ts - - - - - -UI/Image/AttributedImage.ts->UI/Base/Img.ts - - - - - -UI/Image/Attribution.ts - - -Attribution.ts - - - - - -UI/Image/AttributedImage.ts->UI/Image/Attribution.ts - - - - - -UI/Image/Attribution.ts->UI/Base/Combine.ts - - - - - -UI/Image/Attribution.ts->UI/i18n/Translations.ts - - - - - -UI/Image/Attribution.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Image/DeleteImage.ts - - -DeleteImage.ts - - - - - -UI/Image/DeleteImage.ts->UI/Base/Combine.ts - - - - - -UI/Image/DeleteImage.ts->UI/i18n/Translations.ts - - - - - -UI/Image/DeleteImage.ts->State.ts - - - - - - - -UI/Image/DeleteImage.ts->Svg.ts - - - - - -UI/Image/DeleteImage.ts->Logic/Osm/Actions/ChangeTagAction.ts - - - - - -UI/Image/DeleteImage.ts->Logic/Tags/Tag.ts - - - - - -UI/Image/DeleteImage.ts->UI/Input/Toggle.ts - - - - - -UI/Image/ImageCarousel.ts->UI/Base/Combine.ts - - - - - -UI/Image/ImageCarousel.ts->UI/Input/Toggle.ts - - - - - -UI/Image/ImageCarousel.ts->UI/Image/AttributedImage.ts - - - - - -UI/Image/ImageCarousel.ts->UI/Image/DeleteImage.ts - - - - - - - -UI/Image/SlideShow.ts - - -SlideShow.ts - - - - - -UI/Image/ImageCarousel.ts->UI/Image/SlideShow.ts - - - - - -UI/Image/SlideShow.ts->Utils.ts - - - - - -UI/Image/SlideShow.ts->UI/Base/Combine.ts - - - - - -UI/Image/SlideShow.ts->UI/BaseUIElement.ts - - - - - -UI/Image/ImageUploadFlow.ts->UI/Base/Combine.ts - - - - - -UI/Image/ImageUploadFlow.ts->Logic/UIEventSource.ts - - - - - -UI/Image/ImageUploadFlow.ts->UI/i18n/Translations.ts - - - - - -UI/Image/ImageUploadFlow.ts->State.ts - - - - - - - -UI/Image/ImageUploadFlow.ts->Logic/ImageProviders/ImgurUploader.ts - - - - - -UI/Image/ImageUploadFlow.ts->Svg.ts - - - - - -UI/Image/ImageUploadFlow.ts->Logic/Osm/Actions/ChangeTagAction.ts - - - - - -UI/Image/ImageUploadFlow.ts->Logic/Tags/Tag.ts - - - - - -UI/Image/ImageUploadFlow.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Image/ImageUploadFlow.ts->UI/Input/Toggle.ts - - - - - -UI/Image/ImageUploadFlow.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Image/ImageUploadFlow.ts->UI/BigComponents/LicensePicker.ts - - - - - - - -UI/Input/FileSelectorButton.ts - - -FileSelectorButton.ts - - - - - -UI/Image/ImageUploadFlow.ts->UI/Input/FileSelectorButton.ts - - - - - -UI/Input/FileSelectorButton.ts->Logic/UIEventSource.ts - - - - - -UI/Input/FileSelectorButton.ts->UI/Input/InputElement.ts - - - - - -UI/Input/Checkboxes.ts - - -Checkboxes.ts - - - - - -UI/Input/Checkboxes.ts->Utils.ts - - - - - -UI/Input/Checkboxes.ts->Logic/UIEventSource.ts - - - - - -UI/Input/Checkboxes.ts->UI/Input/InputElement.ts - - - - - -UI/Input/InputElement.ts->UI/BaseUIElement.ts - - - - - -UI/Input/ColorPicker.ts->Logic/UIEventSource.ts - - - - - -UI/Input/ColorPicker.ts->UI/Input/InputElement.ts - - - - - -UI/Input/CombinedInputElement.ts->UI/Base/Combine.ts - - - - - -UI/Input/CombinedInputElement.ts->UI/Input/InputElement.ts - - - - - -UI/Input/DirectionInput.ts->Utils.ts - - - - - -UI/Input/DirectionInput.ts->UI/Base/Combine.ts - - - - - -UI/Input/DirectionInput.ts->Logic/UIEventSource.ts - - - - - -UI/Input/DirectionInput.ts->Svg.ts - - - - - -UI/Input/DirectionInput.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Input/DirectionInput.ts->UI/Base/Minimap.ts - - - - - -UI/Input/DirectionInput.ts->UI/Input/InputElement.ts - - - - - -UI/Input/FixedInputElement.ts->Logic/UIEventSource.ts - - - - - -UI/Input/FixedInputElement.ts->UI/i18n/Translations.ts - - - - - -UI/Input/FixedInputElement.ts->UI/Input/InputElement.ts - - - - - -UI/Input/InputElementMap.ts - - -InputElementMap.ts - - - - - -UI/Input/InputElementMap.ts->UI/Input/InputElement.ts - - - - - -UI/Input/InputElementWrapper.ts - - -InputElementWrapper.ts - - - - - -UI/Input/InputElementWrapper.ts->UI/SubstitutedTranslation.ts - - - - - - - -UI/Input/InputElementWrapper.ts->UI/Input/InputElement.ts - - - - - -UI/Input/LengthInput.ts->Utils.ts - - - - - -UI/Input/LengthInput.ts->UI/Base/Combine.ts - - - - - -UI/Input/LengthInput.ts->Logic/UIEventSource.ts - - - - - -UI/Input/LengthInput.ts->Logic/GeoOperations.ts - - - - - -UI/Input/LengthInput.ts->Svg.ts - - - - - -UI/Input/LengthInput.ts->UI/Base/Minimap.ts - - - - - -UI/Input/LengthInput.ts->UI/Input/InputElement.ts - - - - - -UI/Input/LocationInput.ts->Models/ThemeConfig/LayerConfig.ts - - - - - - - -UI/Input/LocationInput.ts->UI/Base/Combine.ts - - - - - -UI/Input/LocationInput.ts->Logic/UIEventSource.ts - - - - - -UI/Input/LocationInput.ts->Logic/GeoOperations.ts - - - - - -UI/Input/LocationInput.ts->State.ts - - - - - - - -UI/Input/LocationInput.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -UI/Input/LocationInput.ts->Svg.ts - - - - - -UI/Input/LocationInput.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Input/LocationInput.ts->UI/ShowDataLayer/ShowDataLayer.ts - - - - - - - -UI/Input/LocationInput.ts->UI/Base/Minimap.ts - - - - - -UI/Input/LocationInput.ts->UI/Input/Toggle.ts - - - - - -UI/Input/LocationInput.ts->UI/ShowDataLayer/ShowDataMultiLayer.ts - - - - - - - - - - - -UI/Input/LocationInput.ts->UI/Input/InputElement.ts - - - - - -UI/Input/RadioButton.ts - - -RadioButton.ts - - - - - -UI/Input/RadioButton.ts->Utils.ts - - - - - -UI/Input/RadioButton.ts->Logic/UIEventSource.ts - - - - - -UI/Input/RadioButton.ts->UI/Input/InputElement.ts - - - - - -UI/Input/SimpleDatePicker.ts->Logic/UIEventSource.ts - - - - - -UI/Input/SimpleDatePicker.ts->UI/Input/InputElement.ts - - - - - -UI/Input/TextField.ts->Logic/UIEventSource.ts - - - - - -UI/Input/TextField.ts->UI/i18n/Translations.ts - - - - - -UI/Input/TextField.ts->UI/Input/InputElement.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->Utils.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->UI/Base/Combine.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->Logic/UIEventSource.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->UI/i18n/Translations.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->UI/Base/FixedUiElement.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->UI/Base/VariableUIElement.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->UI/Input/InputElement.ts - - - - - -UI/OpeningHours/OpeningHours.ts - - -OpeningHours.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->UI/OpeningHours/OpeningHours.ts - - - - - -UI/OpeningHours/OpeningHoursPicker.ts - - -OpeningHoursPicker.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->UI/OpeningHours/OpeningHoursPicker.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts - - -PublicHolidayInput.ts - - - - - -UI/OpeningHours/OpeningHoursInput.ts->UI/OpeningHours/PublicHolidayInput.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/Base/Combine.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/Base/Title.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->Logic/UIEventSource.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/i18n/Locale.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/i18n/Translations.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->Svg.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->Logic/Web/Wikidata.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/Input/InputElement.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/Input/TextField.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/Wikipedia/WikipediaBox.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts - - -WikidataPreviewBox.ts - - - - - -UI/Wikipedia/WikidataSearchBox.ts->UI/Wikipedia/WikidataPreviewBox.ts - - - - - -UI/Input/VariableInputElement.ts - - -VariableInputElement.ts - - - - - -UI/Input/VariableInputElement.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Input/VariableInputElement.ts->UI/Input/InputElement.ts - - - - - -UI/OpeningHours/OpeningHours.ts->Utils.ts - - - - - -UI/OpeningHours/OpeningHoursPicker.ts->Logic/UIEventSource.ts - - - - - -UI/OpeningHours/OpeningHoursPicker.ts->UI/Input/InputElement.ts - - - - - -UI/OpeningHours/OpeningHoursPicker.ts->UI/OpeningHours/OpeningHours.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts - - -OpeningHoursPickerTable.ts - - - - - -UI/OpeningHours/OpeningHoursPicker.ts->UI/OpeningHours/OpeningHoursPickerTable.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts->UI/Base/Combine.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts->Logic/UIEventSource.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts->UI/i18n/Translations.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts->UI/Input/Toggle.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts->UI/Input/DropDown.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts->UI/Input/InputElement.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts->UI/Input/TextField.ts - - - - - -UI/OpeningHours/PublicHolidayInput.ts->UI/OpeningHours/OpeningHours.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts->Utils.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts->UI/Base/Combine.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts->Logic/UIEventSource.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts->UI/i18n/Translations.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts->UI/Base/FixedUiElement.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts->UI/Base/VariableUIElement.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts->UI/Input/InputElement.ts - - - - - -UI/OpeningHours/OpeningHoursRange.ts - - -OpeningHoursRange.ts - - - - - -UI/OpeningHours/OpeningHoursPickerTable.ts->UI/OpeningHours/OpeningHoursRange.ts - - - - - -UI/OpeningHours/OpeningHoursRange.ts->Utils.ts - - - - - -UI/OpeningHours/OpeningHoursRange.ts->UI/Base/Combine.ts - - - - - -UI/OpeningHours/OpeningHoursRange.ts->Svg.ts - - - - - -UI/OpeningHours/OpeningHoursRange.ts->UI/Base/FixedUiElement.ts - - - - - -UI/OpeningHours/OpeningHoursRange.ts->UI/BaseUIElement.ts - - - - - -UI/OpeningHours/OpeningHoursRange.ts->UI/OpeningHours/OpeningHours.ts - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->UI/Base/Combine.ts - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->Models/Constants.ts - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->UI/i18n/Translations.ts - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->State.ts - - - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->UI/Base/FixedUiElement.ts - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->UI/Input/Toggle.ts - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->UI/Base/VariableUIElement.ts - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->UI/Base/Table.ts - - - - - -UI/OpeningHours/OpeningHoursVisualization.ts->UI/OpeningHours/OpeningHours.ts - - - - - -UI/Popup/DeleteWizard.ts - - -DeleteWizard.ts - - - - - -UI/Popup/DeleteWizard.ts->UI/Base/Combine.ts - - - - - -UI/Popup/DeleteWizard.ts->Models/ThemeConfig/TagRenderingConfig.ts - - - - - - - -UI/Popup/DeleteWizard.ts->Logic/UIEventSource.ts - - - - - -UI/Popup/DeleteWizard.ts->Models/Constants.ts - - - - - -UI/Popup/DeleteWizard.ts->Logic/Osm/OsmObject.ts - - - - - -UI/Popup/DeleteWizard.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/DeleteWizard.ts->State.ts - - - - - - - -UI/Popup/DeleteWizard.ts->Svg.ts - - - - - -UI/Popup/DeleteWizard.ts->Logic/Osm/Actions/DeleteAction.ts - - - - - - - -UI/Popup/DeleteWizard.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Popup/DeleteWizard.ts->UI/Input/Toggle.ts - - - - - -UI/Popup/DeleteWizard.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Popup/DeleteWizard.ts->UI/Base/SubtleButton.ts - - - - - -UI/Popup/TagRenderingQuestion.ts - - -TagRenderingQuestion.ts - - - - - -UI/Popup/DeleteWizard.ts->UI/Popup/TagRenderingQuestion.ts - - - - - - - -UI/Popup/TagRenderingQuestion.ts->Utils.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Base/Combine.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->Logic/UIEventSource.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->Models/Constants.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->State.ts - - - - - - - -UI/Popup/TagRenderingQuestion.ts->Logic/Osm/Actions/ChangeTagAction.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->Logic/Tags/And.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->Logic/Tags/Tag.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->Logic/Tags/TagUtils.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/Toggle.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/ValidatedTextField.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/SubstitutedTranslation.ts - - - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/DropDown.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/Checkboxes.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/FixedInputElement.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/InputElementMap.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/InputElementWrapper.ts - - - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/RadioButton.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Input/VariableInputElement.ts - - - - - -UI/Popup/SaveButton.ts - - -SaveButton.ts - - - - - -UI/Popup/TagRenderingQuestion.ts->UI/Popup/SaveButton.ts - - - - - -UI/Popup/EditableTagRendering.ts - - -EditableTagRendering.ts - - - - - -UI/Popup/EditableTagRendering.ts->UI/Base/Combine.ts - - - - - -UI/Popup/EditableTagRendering.ts->Logic/UIEventSource.ts - - - - - -UI/Popup/EditableTagRendering.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/EditableTagRendering.ts->UI/Popup/TagRenderingAnswer.ts - - - - - - - -UI/Popup/EditableTagRendering.ts->State.ts - - - - - - - -UI/Popup/EditableTagRendering.ts->Svg.ts - - - - - -UI/Popup/EditableTagRendering.ts->UI/Input/Toggle.ts - - - - - -UI/Popup/EditableTagRendering.ts->UI/Base/Lazy.ts - - - - - -UI/Popup/EditableTagRendering.ts->UI/Popup/TagRenderingQuestion.ts - - - - - - - -UI/Popup/FeatureInfoBox.ts->Utils.ts - - - - - -UI/Popup/FeatureInfoBox.ts->Customizations/SharedTagRenderings.ts - - - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Base/Combine.ts - - - - - -UI/Popup/FeatureInfoBox.ts->Models/ThemeConfig/TagRenderingConfig.ts - - - - - - - -UI/Popup/FeatureInfoBox.ts->Models/Constants.ts - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Popup/TagRenderingAnswer.ts - - - - - - - -UI/Popup/FeatureInfoBox.ts->State.ts - - - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Input/Toggle.ts - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Popup/FeatureInfoBox.ts->UI/SubstitutedTranslation.ts - - - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Base/ScrollableFullScreen.ts - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Popup/DeleteWizard.ts - - - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Popup/EditableTagRendering.ts - - - - - - - -UI/Popup/MoveWizard.ts - - -MoveWizard.ts - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Popup/MoveWizard.ts - - - - - - - -UI/Popup/QuestionBox.ts - - -QuestionBox.ts - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Popup/QuestionBox.ts - - - - - - - -UI/Popup/SplitRoadWizard.ts - - -SplitRoadWizard.ts - - - - - -UI/Popup/FeatureInfoBox.ts->UI/Popup/SplitRoadWizard.ts - - - - - - - -UI/Popup/MoveWizard.ts->UI/Base/Combine.ts - - - - - -UI/Popup/MoveWizard.ts->Logic/Actors/AvailableBaseLayers.ts - - - - - -UI/Popup/MoveWizard.ts->Logic/UIEventSource.ts - - - - - -UI/Popup/MoveWizard.ts->Logic/Osm/OsmObject.ts - - - - - -UI/Popup/MoveWizard.ts->Logic/GeoOperations.ts - - - - - -UI/Popup/MoveWizard.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/MoveWizard.ts->Svg.ts - - - - - -UI/Popup/MoveWizard.ts->Logic/Osm/Actions/ChangeLocationAction.ts - - - - - -UI/Popup/MoveWizard.ts->UI/Input/Toggle.ts - - - - - -UI/Popup/MoveWizard.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Popup/MoveWizard.ts->UI/Base/SubtleButton.ts - - - - - -UI/Popup/MoveWizard.ts->UI/Input/LocationInput.ts - - - - - - - -UI/Popup/QuestionBox.ts->UI/Base/Combine.ts - - - - - -UI/Popup/QuestionBox.ts->Logic/UIEventSource.ts - - - - - -UI/Popup/QuestionBox.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/QuestionBox.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Popup/QuestionBox.ts->UI/Base/Lazy.ts - - - - - -UI/Popup/QuestionBox.ts->UI/Popup/TagRenderingQuestion.ts - - - - - - - -UI/Popup/SplitRoadWizard.ts->Models/ThemeConfig/LayerConfig.ts - - - - - - - -UI/Popup/SplitRoadWizard.ts->UI/Base/Combine.ts - - - - - -UI/Popup/SplitRoadWizard.ts->UI/Base/Title.ts - - - - - -UI/Popup/SplitRoadWizard.ts->Logic/UIEventSource.ts - - - - - -UI/Popup/SplitRoadWizard.ts->Logic/GeoOperations.ts - - - - - -UI/Popup/SplitRoadWizard.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/SplitRoadWizard.ts->Logic/BBox.ts - - - - - -UI/Popup/SplitRoadWizard.ts->State.ts - - - - - - - -UI/Popup/SplitRoadWizard.ts->Logic/FeatureSource/Sources/StaticFeatureSource.ts - - - - - -UI/Popup/SplitRoadWizard.ts->Svg.ts - - - - - -UI/Popup/SplitRoadWizard.ts->Logic/Osm/Actions/SplitAction.ts - - - - - -UI/Popup/SplitRoadWizard.ts->UI/ShowDataLayer/ShowDataLayer.ts - - - - - - - -UI/Popup/SplitRoadWizard.ts->UI/Base/Minimap.ts - - - - - -UI/Popup/SplitRoadWizard.ts->UI/Input/Toggle.ts - - - - - -UI/Popup/SplitRoadWizard.ts->UI/Base/Button.ts - - - - - -UI/Popup/SplitRoadWizard.ts->UI/Base/SubtleButton.ts - - - - - -UI/Popup/SplitRoadWizard.ts->UI/ShowDataLayer/ShowDataMultiLayer.ts - - - - - - - -assets/layers/split_point/split_point.json - - -split_point.json - - - - - -UI/Popup/SplitRoadWizard.ts->assets/layers/split_point/split_point.json - - - - - -UI/Popup/MultiApply.ts->UI/Base/Combine.ts - - - - - -UI/Popup/MultiApply.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/MultiApply.ts->Logic/Osm/Actions/ChangeTagAction.ts - - - - - -UI/Popup/MultiApply.ts->Logic/Tags/And.ts - - - - - -UI/Popup/MultiApply.ts->Logic/Tags/Tag.ts - - - - - -UI/Popup/MultiApply.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Popup/MultiApply.ts->UI/Input/Toggle.ts - - - - - -UI/Popup/MultiApply.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Popup/MultiApply.ts->UI/Base/SubtleButton.ts - - - - - -UI/Popup/SaveButton.ts->Logic/UIEventSource.ts - - - - - -UI/Popup/SaveButton.ts->UI/i18n/Translations.ts - - - - - -UI/Popup/SaveButton.ts->UI/Input/Toggle.ts - - - - - -UI/Reviews/ReviewElement.ts->UI/Base/Combine.ts - - - - - -UI/Reviews/ReviewElement.ts->UI/i18n/Translations.ts - - - - - -UI/Reviews/ReviewElement.ts->UI/Base/Link.ts - - - - - -UI/Reviews/ReviewElement.ts->UI/Base/Img.ts - - - - - -UI/Reviews/ReviewElement.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Reviews/SingleReview.ts - - -SingleReview.ts - - - - - -UI/Reviews/ReviewElement.ts->UI/Reviews/SingleReview.ts - - - - - -UI/Reviews/SingleReview.ts->Utils.ts - - - - - -UI/Reviews/SingleReview.ts->UI/Base/Combine.ts - - - - - -UI/Reviews/SingleReview.ts->UI/i18n/Translations.ts - - - - - -UI/Reviews/SingleReview.ts->UI/Base/Img.ts - - - - - -UI/Reviews/SingleReview.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Reviews/ReviewForm.ts->UI/Base/Combine.ts - - - - - -UI/Reviews/ReviewForm.ts->Logic/UIEventSource.ts - - - - - -UI/Reviews/ReviewForm.ts->UI/i18n/Translations.ts - - - - - -UI/Reviews/ReviewForm.ts->Svg.ts - - - - - -UI/Reviews/ReviewForm.ts->UI/Input/Toggle.ts - - - - - -UI/Reviews/ReviewForm.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Reviews/ReviewForm.ts->UI/Input/Checkboxes.ts - - - - - -UI/Reviews/ReviewForm.ts->UI/Input/InputElement.ts - - - - - -UI/Reviews/ReviewForm.ts->UI/Input/TextField.ts - - - - - -UI/Reviews/ReviewForm.ts->UI/Popup/SaveButton.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/Base/Combine.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/Base/Title.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/i18n/Locale.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/i18n/Translations.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->Svg.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->Logic/Web/Wikidata.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/Base/Link.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->Logic/Web/Wikipedia.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/i18n/Translation.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/Base/Loading.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/Base/TabbedComponent.ts - - - - - -UI/Wikipedia/WikipediaBox.ts->UI/Wikipedia/WikidataPreviewBox.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->Utils.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->UI/Base/Combine.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->UI/i18n/Translations.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->Logic/ImageProviders/WikimediaImageProvider.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->Svg.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->Logic/Web/Wikidata.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->UI/Base/Link.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->UI/Base/Img.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->UI/Base/FixedUiElement.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->UI/i18n/Translation.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->UI/Base/VariableUIElement.ts - - - - - -UI/Wikipedia/WikidataPreviewBox.ts->UI/Base/Loading.ts - - - - - -assert - -assert - - - -assets/layers/bike_repair_station/bike_repair_station.json - - -bike_repair_station.json - - - - - -fs - -fs - - - -https - -https - - - -scripts/ScriptUtils.ts - - -ScriptUtils.ts - - - - - -scripts/ScriptUtils.ts->Utils.ts - - - - - -scripts/ScriptUtils.ts->fs - - - - - -scripts/ScriptUtils.ts->https - - - - - -test/Actors.spec.ts - - -Actors.spec.ts - - - - - -test/Actors.spec.ts->Utils.ts - - - - - -test/Actors.spec.ts->Customizations/AllKnownLayouts.ts - - - - - -test/Actors.spec.ts->Logic/UIEventSource.ts - - - - - -test/Actors.spec.ts->Logic/Actors/SelectedElementTagsUpdater.ts - - - - - -test/Actors.spec.ts->Logic/Actors/SelectedFeatureHandler.ts - - - - - -test/Actors.spec.ts->Logic/ElementStorage.ts - - - - - -test/Actors.spec.ts->Logic/State/UserRelatedState.ts - - - - - -test/TestHelper.ts - - -TestHelper.ts - - - - - -test/Actors.spec.ts->test/TestHelper.ts - - - - - -test/GeoOperations.spec.ts - - -GeoOperations.spec.ts - - - - - -test/GeoOperations.spec.ts->Utils.ts - - - - - -test/GeoOperations.spec.ts->Logic/GeoOperations.ts - - - - - -test/GeoOperations.spec.ts->Logic/BBox.ts - - - - - -test/GeoOperations.spec.ts->assert - - - - - -test/GeoOperations.spec.ts->test/TestHelper.ts - - - - - -test/ImageAttribution.spec.ts - - -ImageAttribution.spec.ts - - - - - -test/ImageAttribution.spec.ts->Models/ThemeConfig/LayerConfig.ts - - - - - -test/ImageAttribution.spec.ts->Utils.ts - - - - - -test/ImageAttribution.spec.ts->UI/i18n/Translation.ts - - - - - -test/ImageAttribution.spec.ts->assert - - - - - -test/ImageAttribution.spec.ts->assets/layers/bike_repair_station/bike_repair_station.json - - - - - -test/ImageAttribution.spec.ts->test/TestHelper.ts - - - - - -test/ImageProvider.spec.ts - - -ImageProvider.spec.ts - - - - - -test/ImageProvider.spec.ts->Utils.ts - - - - - -test/ImageProvider.spec.ts->Logic/UIEventSource.ts - - - - - -test/ImageProvider.spec.ts->Logic/ImageProviders/AllImageProviders.ts - - - - - -test/ImageProvider.spec.ts->test/TestHelper.ts - - - - - -test/LegacyThemeLoader.spec.ts - - -LegacyThemeLoader.spec.ts - - - - - -test/LegacyThemeLoader.spec.ts->Models/ThemeConfig/LayoutConfig.ts - - - - - -test/LegacyThemeLoader.spec.ts->Models/ThemeConfig/LegacyJsonConvert.ts - - - - - -test/LegacyThemeLoader.spec.ts->test/TestHelper.ts - - - - - -test/OsmObject.spec.ts - - -OsmObject.spec.ts - - - - - -test/OsmObject.spec.ts->Logic/Osm/OsmObject.ts - - - - - -test/OsmObject.spec.ts->test/TestHelper.ts - - - - - -test/RelationSplitHandler.spec.ts - - -RelationSplitHandler.spec.ts - - - - - -test/RelationSplitHandler.spec.ts->Utils.ts - - - - - -test/RelationSplitHandler.spec.ts->Logic/Osm/OsmObject.ts - - - - - -test/RelationSplitHandler.spec.ts->Logic/Osm/Actions/RelationSplitHandler.ts - - - - - -test/RelationSplitHandler.spec.ts->Logic/Osm/Changes.ts - - - - - -test/RelationSplitHandler.spec.ts->test/TestHelper.ts - - - - - -test/ReplaceGeometry.spec.ts - - -ReplaceGeometry.spec.ts - - - - - -test/ReplaceGeometry.spec.ts->Utils.ts - - - - - -test/ReplaceGeometry.spec.ts->test/TestHelper.ts - - - - - -test/SplitAction.spec.ts - - -SplitAction.spec.ts - - - - - -test/SplitAction.spec.ts->Utils.ts - - - - - -test/SplitAction.spec.ts->Logic/Osm/Actions/SplitAction.ts - - - - - -test/SplitAction.spec.ts->Logic/Osm/Changes.ts - - - - - -test/SplitAction.spec.ts->assert - - - - - -test/SplitAction.spec.ts->test/TestHelper.ts - - - - - -test/Tag.spec.ts - - -Tag.spec.ts - - - - - -test/Tag.spec.ts->Utils.ts - - - - - -test/Tag.spec.ts->Models/ThemeConfig/TagRenderingConfig.ts - - - - - -test/Tag.spec.ts->UI/i18n/Locale.ts - - - - - -test/Tag.spec.ts->UI/i18n/Translations.ts - - - - - -test/Tag.spec.ts->Logic/Tags/And.ts - - - - - -test/Tag.spec.ts->Logic/Tags/Tag.ts - - - - - -test/Tag.spec.ts->Logic/Tags/TagUtils.ts - - - - - -test/Tag.spec.ts->UI/i18n/Translation.ts - - - - - -test/Tag.spec.ts->UI/OpeningHours/OpeningHours.ts - - - - - -test/Tag.spec.ts->assert - - - - - -test/Tag.spec.ts->test/TestHelper.ts - - - - - -test/TestAll.ts - - -TestAll.ts - - - - - -test/TestAll.ts->Utils.ts - - - - - -test/TestAll.ts->scripts/ScriptUtils.ts - - - - - -test/TestAll.ts->test/Actors.spec.ts - - - - - -test/TestAll.ts->test/GeoOperations.spec.ts - - - - - -test/TestAll.ts->test/ImageAttribution.spec.ts - - - - - -test/TestAll.ts->test/ImageProvider.spec.ts - - - - - -test/TestAll.ts->test/LegacyThemeLoader.spec.ts - - - - - -test/TestAll.ts->test/OsmObject.spec.ts - - - - - -test/TestAll.ts->test/RelationSplitHandler.spec.ts - - - - - -test/TestAll.ts->test/ReplaceGeometry.spec.ts - - - - - -test/TestAll.ts->test/SplitAction.spec.ts - - - - - -test/TestAll.ts->test/Tag.spec.ts - - - - - -test/Theme.spec.ts - - -Theme.spec.ts - - - - - -test/TestAll.ts->test/Theme.spec.ts - - - - - -test/TileFreshnessCalculator.spec.ts - - -TileFreshnessCalculator.spec.ts - - - - - -test/TestAll.ts->test/TileFreshnessCalculator.spec.ts - - - - - -test/Units.spec.ts - - -Units.spec.ts - - - - - -test/TestAll.ts->test/Units.spec.ts - - - - - -test/Utils.spec.ts - - -Utils.spec.ts - - - - - -test/TestAll.ts->test/Utils.spec.ts - - - - - -test/Wikidata.spec.test.ts - - -Wikidata.spec.test.ts - - - - - -test/TestAll.ts->test/Wikidata.spec.test.ts - - - - - -test/Theme.spec.ts->Utils.ts - - - - - -test/Theme.spec.ts->Models/ThemeConfig/LayoutConfig.ts - - - - - -test/Theme.spec.ts->assert - - - - - -test/Theme.spec.ts->test/TestHelper.ts - - - - - -test/TileFreshnessCalculator.spec.ts->Models/TileRange.ts - - - - - -test/TileFreshnessCalculator.spec.ts->Logic/FeatureSource/TileFreshnessCalculator.ts - - - - - -test/TileFreshnessCalculator.spec.ts->assert - - - - - -test/TileFreshnessCalculator.spec.ts->test/TestHelper.ts - - - - - -test/Units.spec.ts->Models/Denomination.ts - - - - - -test/Units.spec.ts->Models/Unit.ts - - - - - -test/Units.spec.ts->assert - - - - - -test/Units.spec.ts->test/TestHelper.ts - - - - - -test/Utils.spec.ts->Utils.ts - - - - - -test/Utils.spec.ts->assert - - - - - -test/Utils.spec.ts->test/TestHelper.ts - - - - - -test/Wikidata.spec.test.ts->Utils.ts - - - - - -test/Wikidata.spec.test.ts->Logic/Web/Wikidata.ts - - - - - -test/Wikidata.spec.test.ts->assert - - - - - -test/Wikidata.spec.test.ts->test/TestHelper.ts - - - - - diff --git a/index.html b/index.html index d8616f9f7..d7a2734e8 100644 --- a/index.html +++ b/index.html @@ -77,7 +77,7 @@ Below
- + diff --git a/index.ts b/index.ts index e8718f0b5..b93cb994b 100644 --- a/index.ts +++ b/index.ts @@ -1,5 +1,4 @@ import {FixedUiElement} from "./UI/Base/FixedUiElement"; -import {QueryParameters} from "./Logic/Web/QueryParameters"; import Combine from "./UI/Base/Combine"; import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers"; import MinimapImplementation from "./UI/Base/MinimapImplementation"; @@ -20,14 +19,6 @@ ShowOverlayLayerImplementation.Implement(); // Miscelleanous Utils.DisableLongPresses() -// --------------------- Special actions based on the parameters ----------------- -// @ts-ignore -if (location.href.startsWith("http://buurtnatuur.be")) { - // Reload the https version. This is important for the 'locate me' button - window.location.replace("https://buurtnatuur.be"); -} - - class Init { public static Init(layoutToUse: LayoutConfig, encoded: string) { @@ -42,23 +33,6 @@ class Init { return; } - // Workaround/legacy to keep the old paramters working as I renamed some of them - if (layoutToUse?.id === "cyclofix") { - const legacy = QueryParameters.GetQueryParameter("layer-bike_shops", "true", "Legacy - keep De Fietsambassade working"); - const correct = QueryParameters.GetQueryParameter("layer-bike_shop", "true", "Legacy - keep De Fietsambassade working") - if (legacy.data !== "true") { - correct.setData(legacy.data) - } - console.log("layer-bike_shop toggles: legacy:", legacy.data, "new:", correct.data) - - const legacyCafe = QueryParameters.GetQueryParameter("layer-bike_cafes", "true", "Legacy - keep De Fietsambassade working") - const correctCafe = QueryParameters.GetQueryParameter("layer-bike_cafe", "true", "Legacy - keep De Fietsambassade working") - if (legacyCafe.data !== "true") { - correctCafe.setData(legacy.data) - } - } - - const guiState = new DefaultGuiState() State.state = new State(layoutToUse); DefaultGuiState.state = guiState; diff --git a/notfound.ts b/notfound.ts new file mode 100644 index 000000000..12146ef4d --- /dev/null +++ b/notfound.ts @@ -0,0 +1,11 @@ +import {FixedUiElement} from "./UI/Base/FixedUiElement"; +import Combine from "./UI/Base/Combine"; +import {SubtleButton} from "./UI/Base/SubtleButton"; +import Svg from "./Svg"; + +new Combine([new FixedUiElement("This page is not found"), +new SubtleButton(Svg.back_svg(), "Back to index", { + url: "./index.html", + newTab: false +}) +]).AttachTo("maindiv") \ No newline at end of file diff --git a/package.json b/package.json index 691adcc29..8f8772cd2 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "deploy:production": "cd ~/git/mapcomplete.github.io/ && git pull && cd - && rm -rf ./assets/generated && npm run prepare-deploy && npm run optimize-images && rm -rf ~/git/mapcomplete.github.io/* && cp -r dist/* ~/git/mapcomplete.github.io/ && cd ~/git/mapcomplete.github.io/ && echo \"mapcomplete.osm.be\" > CNAME && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean && npm run gittag", "gittag": "ts-node scripts/printVersion.ts | bash", "lint": "tslint --project . -c tslint.json '**.ts' ", - "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", + "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(404|index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot", "genPostal": " ts-node ./scripts/postal_code_tools/createRoutablePoint.ts /home/pietervdvn/Downloads/postal_codes/postal_codes_town_hall_points.geojson /home/pietervdvn/Downloads/31370/Postcodes.geojson\n" }, diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index c3b5983e9..35f713ea3 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -26,22 +26,6 @@ interface LayersAndThemes { class LayerOverviewUtils { - loadThemesAndLayers(): LayersAndThemes { - - const layerFiles = ScriptUtils.getLayerFiles(); - - const themeFiles: LayoutConfigJson[] = ScriptUtils.getThemeFiles().map(x => x.parsed); - - console.log("Discovered", layerFiles.length, "layers and", themeFiles.length, "themes\n") - if (layerFiles.length + themeFiles.length === 0) { - throw "Panic: no themes and layers loaded!" - } - return { - layers: layerFiles, - themes: themeFiles - } - } - writeSmallOverview(themes: { id: string, title: any, shortDescription: any, icon: string, hideFromOverview: boolean }[]) { const perId = new Map(); for (const theme of themes) { @@ -191,6 +175,8 @@ class LayerOverviewUtils { "layers": Array.from(sharedLayers.values()), "themes": Array.from(sharedThemes.values()) })) + + writeFileSync("./assets/generated/known_layers.json", JSON.stringify(Array.from(sharedLayers.values()))) } } From 4b6769d601610ffbeadc50df2a95c37552abece9 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 21 Dec 2021 19:56:04 +0100 Subject: [PATCH 04/16] Fix custom layouts --- 404.html | 56 +++++++++++++++++++++++++ Logic/DetermineLayout.ts | 21 ++++------ Models/ThemeConfig/LegacyJsonConvert.ts | 7 ++++ index.ts | 13 ++---- package.json | 2 +- 5 files changed, 76 insertions(+), 23 deletions(-) create mode 100644 404.html diff --git a/404.html b/404.html new file mode 100644 index 000000000..fa1f722f3 --- /dev/null +++ b/404.html @@ -0,0 +1,56 @@ + + + + + + + + + + + MapComplete - page not found + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+ Not found... +
+ + + + + + diff --git a/Logic/DetermineLayout.ts b/Logic/DetermineLayout.ts index 959cefa31..0026499f1 100644 --- a/Logic/DetermineLayout.ts +++ b/Logic/DetermineLayout.ts @@ -20,23 +20,18 @@ export default class DetermineLayout { /** * Gets the correct layout for this website */ - public static async GetLayout(): Promise<[LayoutConfig, string]> { + public static async GetLayout(): Promise { const loadCustomThemeParam = QueryParameters.GetQueryParameter("userlayout", "false", "If not 'false', a custom (non-official) theme is loaded. This custom layout can be done in multiple ways: \n\n- The hash of the URL contains a base64-encoded .json-file containing the theme definition\n- The hash of the URL contains a lz-compressed .json-file, as generated by the custom theme generator\n- The parameter itself is an URL, in which case that URL will be downloaded. It should point to a .json of a theme") const layoutFromBase64 = decodeURIComponent(loadCustomThemeParam.data); if (layoutFromBase64.startsWith("http")) { - const layout = await DetermineLayout.LoadRemoteTheme(layoutFromBase64) - return [layout, undefined] + return await DetermineLayout.LoadRemoteTheme(layoutFromBase64) } if (layoutFromBase64 !== "false") { // We have to load something from the hash (or from disk) - let loaded = DetermineLayout.LoadLayoutFromHash(loadCustomThemeParam); - if (loaded === null) { - return [null, undefined] - } - return loaded + return DetermineLayout.LoadLayoutFromHash(loadCustomThemeParam) } let layoutId: string = undefined @@ -64,12 +59,12 @@ export default class DetermineLayout { } } - return [layoutToUse, undefined] + return layoutToUse } public static LoadLayoutFromHash( userLayoutParam: UIEventSource - ): [LayoutConfig, string] | null { + ): LayoutConfig | null { let hash = location.hash.substr(1); try { // layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter @@ -109,7 +104,9 @@ export default class DetermineLayout { const knownLayersDict = new Map() for (const key in known_layers["default"]) { - knownLayersDict.set(key, known_layers["default"][key]) + const layer = known_layers["default"][key] + console.log("Found shared layer "+layer.id) + knownLayersDict.set(layer.id, layer) } const converState = { @@ -123,7 +120,7 @@ export default class DetermineLayout { const layoutToUse = new LayoutConfig(json, false); userLayoutParam.setData(layoutToUse.id); - return [layoutToUse, btoa(Utils.MinifyJSON(JSON.stringify(json)))]; + return layoutToUse; } catch (e) { console.error(e) if (hash === undefined || hash.length < 10) { diff --git a/Models/ThemeConfig/LegacyJsonConvert.ts b/Models/ThemeConfig/LegacyJsonConvert.ts index 5de97e5e3..7e0397137 100644 --- a/Models/ThemeConfig/LegacyJsonConvert.ts +++ b/Models/ThemeConfig/LegacyJsonConvert.ts @@ -406,7 +406,12 @@ export class UpdateLegacyLayer extends DesugaringStep 10) { - // We save the layout to the user settings and local storage - State.state.osmConnection.OnLoggedIn(() => { - State.state.osmConnection - .GetLongPreference("installed-theme-" + layoutToUse.id) - .setData(encoded); - }); - } + } } @@ -67,7 +60,7 @@ new Combine(["Initializing...
", // @ts-ignore DetermineLayout.GetLayout().then(value => { console.log("Got ", value) - Init.Init(value[0], value[1]) + Init.Init(value) }).catch(err => { console.error("Error while initializing: ", err, err.stack) }) diff --git a/package.json b/package.json index 8f8772cd2..c5f078609 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "deploy:production": "cd ~/git/mapcomplete.github.io/ && git pull && cd - && rm -rf ./assets/generated && npm run prepare-deploy && npm run optimize-images && rm -rf ~/git/mapcomplete.github.io/* && cp -r dist/* ~/git/mapcomplete.github.io/ && cd ~/git/mapcomplete.github.io/ && echo \"mapcomplete.osm.be\" > CNAME && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean && npm run gittag", "gittag": "ts-node scripts/printVersion.ts | bash", "lint": "tslint --project . -c tslint.json '**.ts' ", - "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(404|index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", + "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(404\\|index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot", "genPostal": " ts-node ./scripts/postal_code_tools/createRoutablePoint.ts /home/pietervdvn/Downloads/postal_codes/postal_codes_town_hall_points.geojson /home/pietervdvn/Downloads/31370/Postcodes.geojson\n" }, From 7fe79600fb9bedd88d46b06380e4c04e3d559cc1 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 21 Dec 2021 20:57:25 +0100 Subject: [PATCH 05/16] Remove unmaintained preferences page, re-add earlier visited installed themes (only remove themes) --- Logic/Actors/InstalledThemes.ts | 65 -------------- Logic/DetermineLayout.ts | 46 +++++----- Logic/State/UserRelatedState.ts | 54 +++++++++-- UI/BigComponents/MoreScreen.ts | 12 ++- preferences.html | 29 ------ preferences.ts | 154 -------------------------------- 6 files changed, 78 insertions(+), 282 deletions(-) delete mode 100644 Logic/Actors/InstalledThemes.ts delete mode 100644 preferences.html delete mode 100644 preferences.ts diff --git a/Logic/Actors/InstalledThemes.ts b/Logic/Actors/InstalledThemes.ts deleted file mode 100644 index 06c696a77..000000000 --- a/Logic/Actors/InstalledThemes.ts +++ /dev/null @@ -1,65 +0,0 @@ -import {UIEventSource} from "../UIEventSource"; -import {OsmConnection} from "../Osm/OsmConnection"; -import {Utils} from "../../Utils"; -import LZString from "lz-string"; -import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; - -/** - * Gives an overview of themes that are installed in the user preferences - */ -export default class InstalledThemes { - public installedThemes: UIEventSource<{ layout: LayoutConfig; definition: string }[]>; - - - constructor(osmConnection: OsmConnection) { - this.installedThemes = osmConnection.preferencesHandler.preferences.map<{ layout: LayoutConfig, definition: string }[]>(allPreferences => { - const installedThemes: { layout: LayoutConfig, definition: string }[] = []; - if (allPreferences === undefined) { - console.log("All prefs is undefined"); - return installedThemes; - } - const invalidThemes = [] - for (const allPreferencesKey in allPreferences) { - const themename = allPreferencesKey.match(/^mapcomplete-installed-theme-(.*)-combined-length$/); - if (themename && themename[1] !== "") { - const customLayout = osmConnection.GetLongPreference("installed-theme-" + themename[1]); - if (customLayout.data === undefined) { - console.log("No data defined for ", themename[1]); - continue; - } - try { - let layoutJson; - try { - layoutJson = JSON.parse(atob(customLayout.data)) - } catch (e) { - layoutJson = JSON.parse(Utils.UnMinify(LZString.decompressFromBase64(customLayout.data))) - } - const layout = new LayoutConfig(layoutJson, false); - installedThemes.push({ - layout: layout, - definition: customLayout.data - }); - } catch (e) { - console.warn("Could not parse custom layout from preferences - deleting: ", allPreferencesKey, e, customLayout.data); - invalidThemes.push(themename[1]) - } - } - } - - InstalledThemes.DeleteInvalid(osmConnection, invalidThemes); - - return installedThemes; - - }); - } - - private static DeleteInvalid(osmConnection: OsmConnection, invalidThemes: any[]) { - for (const invalid of invalidThemes) { - console.error("Attempting to remove ", invalid) - osmConnection.GetLongPreference( - "installed-theme-" + invalid - ).setData(null); - } - } - -} \ No newline at end of file diff --git a/Logic/DetermineLayout.ts b/Logic/DetermineLayout.ts index 0026499f1..5f9c1f0e6 100644 --- a/Logic/DetermineLayout.ts +++ b/Logic/DetermineLayout.ts @@ -14,6 +14,7 @@ import {FixLegacyTheme, PrepareTheme} from "../Models/ThemeConfig/LegacyJsonConv import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; import SharedTagRenderings from "../Customizations/SharedTagRenderings"; import * as known_layers from "../assets/generated/known_layers.json" +import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; export default class DetermineLayout { @@ -62,6 +63,22 @@ export default class DetermineLayout { return layoutToUse } + private static prepCustomTheme(json: any): LayoutConfigJson{ + const knownLayersDict = new Map() + for (const key in known_layers["default"]) { + const layer = known_layers["default"][key] + knownLayersDict.set(layer.id, layer) + } + const converState = { + tagRenderings: SharedTagRenderings.SharedTagRenderingJson, + sharedLayers: knownLayersDict + } + json = new FixLegacyTheme().convertStrict(converState, json, "While loading a dynamic theme") + json = new PrepareTheme().convertStrict(converState, json, "While preparing a dynamic theme") + console.log("The layoutconfig is ", json) + return json + } + public static LoadLayoutFromHash( userLayoutParam: UIEventSource ): LayoutConfig | null { @@ -102,25 +119,9 @@ export default class DetermineLayout { } } - const knownLayersDict = new Map() - for (const key in known_layers["default"]) { - const layer = known_layers["default"][key] - console.log("Found shared layer "+layer.id) - knownLayersDict.set(layer.id, layer) - } - - const converState = { - tagRenderings: SharedTagRenderings.SharedTagRenderingJson, - sharedLayers: knownLayersDict - } - - json = new FixLegacyTheme().convertStrict(converState, json, "While loading a dynamic theme") - - json = new PrepareTheme().convertStrict(converState, json, "While preparing a dynamic theme") - - const layoutToUse = new LayoutConfig(json, false); + const layoutToUse = DetermineLayout.prepCustomTheme(json) userLayoutParam.setData(layoutToUse.id); - return layoutToUse; + return new LayoutConfig(layoutToUse, false); } catch (e) { console.error(e) if (hash === undefined || hash.length < 10) { @@ -160,9 +161,14 @@ export default class DetermineLayout { tagRenderings: SharedTagRenderings.SharedTagRenderingJson, sharedLayers: new Map() // FIXME: actually add the layers }, parsed, "While loading a dynamic theme") - try { + + parsed.id = link; - return new LayoutConfig(parsed, false).patchImages(link, JSON.stringify(parsed)); + + + try { + const layoutToUse = DetermineLayout.prepCustomTheme(parsed) + return new LayoutConfig(layoutToUse,false).patchImages(link, JSON.stringify(layoutToUse)); } catch (e) { console.error(e) DetermineLayout.ShowErrorOnCustomTheme( diff --git a/Logic/State/UserRelatedState.ts b/Logic/State/UserRelatedState.ts index ca69006ac..37deb04dc 100644 --- a/Logic/State/UserRelatedState.ts +++ b/Logic/State/UserRelatedState.ts @@ -3,12 +3,12 @@ import {OsmConnection} from "../Osm/OsmConnection"; import {MangroveIdentity} from "../Web/MangroveReviews"; import {UIEventSource} from "../UIEventSource"; import {QueryParameters} from "../Web/QueryParameters"; -import InstalledThemes from "../Actors/InstalledThemes"; import {LocalStorageSource} from "../Web/LocalStorageSource"; import {Utils} from "../../Utils"; import Locale from "../../UI/i18n/Locale"; import ElementsState from "./ElementsState"; import SelectedElementTagsUpdater from "../Actors/SelectedElementTagsUpdater"; +import {log} from "util"; /** * The part of the state which keeps track of user-related stuff, e.g. the OSM-connection, @@ -33,7 +33,10 @@ export default class UserRelatedState extends ElementsState { /** * WHich other themes the user previously visited */ - public installedThemes: UIEventSource<{ layout: LayoutConfig; definition: string }[]>; + public installedThemes: UIEventSource<{ id: string, // The id doubles as the URL + icon: string, + title: any, + shortDescription: any}[]>; constructor(layoutToUse: LayoutConfig, options?:{attemptLogin : true | boolean}) { @@ -69,9 +72,47 @@ export default class UserRelatedState extends ElementsState { }) } - this.installedThemes = new InstalledThemes( - this.osmConnection - ).installedThemes; + this.installedThemes = this.osmConnection.GetLongPreference("installed-themes").map( + str => { + if(str === undefined || str === ""){ + return [] + } + try{ + return JSON.parse(str) + }catch(e){ + console.warn("Could not parse preference with installed themes due to ", e,"\nThe offending string is",str) + return [] + } + }, [],(installed => JSON.stringify(installed)) + ) + + + const self = this; + this.osmConnection.isLoggedIn.addCallbackAndRunD(loggedIn => { + if(!loggedIn){ + return + } + + if(this.layoutToUse.id.startsWith("http")){ + if(!this.installedThemes.data.some(installed => installed.id === this.layoutToUse.id)){ + + this.installedThemes.data.push({ + id: this.layoutToUse.id, + icon: this.layoutToUse.icon, + title: this.layoutToUse.title.translations, + shortDescription: this.layoutToUse.shortDescription.translations + }) + } + this.installedThemes.ping() + console.log("Registered "+this.layoutToUse.id+" as installed themes") + } + + + + + return true; + }) + // Important: the favourite layers are initialized _after_ the installed themes, as these might contain an installedTheme this.favouriteLayers = LocalStorageSource.Get("favouriteLayers") @@ -81,8 +122,7 @@ export default class UserRelatedState extends ElementsState { [], (layers) => Utils.Dedup(layers)?.join(";") ); - - + this.InitializeLanguage(); new SelectedElementTagsUpdater(this) diff --git a/UI/BigComponents/MoreScreen.ts b/UI/BigComponents/MoreScreen.ts index 066f39964..5cde4729f 100644 --- a/UI/BigComponents/MoreScreen.ts +++ b/UI/BigComponents/MoreScreen.ts @@ -53,7 +53,7 @@ export default class MoreScreen extends Combine { icon: string, title: any, shortDescription: any - }, customThemeDefinition: string = undefined + }, isCustom: boolean = false ): BaseUIElement { if (layout === undefined) { @@ -79,14 +79,12 @@ export default class MoreScreen extends Combine { } let linkPrefix = `${path}/${layout.id.toLowerCase()}.html?` - let linkSuffix = "" if (location.hostname === "localhost" || location.hostname === "127.0.0.1") { linkPrefix = `${path}/theme.html?layout=${layout.id}&` } - if (customThemeDefinition) { + if (isCustom) { linkPrefix = `${path}/theme.html?userlayout=${layout.id}&` - linkSuffix = `#${customThemeDefinition}` } const linkText = currentLocation?.map(currentLocation => { @@ -97,8 +95,8 @@ export default class MoreScreen extends Combine { ].filter(part => part[1] !== undefined) .map(part => part[0] + "=" + part[1]) .join("&") - return `${linkPrefix}${params}${linkSuffix}`; - }) ?? new UIEventSource(`${linkPrefix}${linkSuffix}`) + return `${linkPrefix}${params}`; + }) ?? new UIEventSource(`${linkPrefix}`) return new SubtleButton(layout.icon, @@ -117,7 +115,7 @@ export default class MoreScreen extends Combine { if (customThemes.length <= 0) { return undefined; } - const customThemeButtons = customThemes.map(theme => MoreScreen.createLinkButton(state, theme.layout, theme.definition)?.SetClass(buttonClass)) + const customThemeButtons = customThemes.map(theme => MoreScreen.createLinkButton(state, theme, true)?.SetClass(buttonClass)) return new Combine([ Translations.t.general.customThemeIntro.Clone(), new Combine(customThemeButtons).SetClass(themeListClasses) diff --git a/preferences.html b/preferences.html deleted file mode 100644 index 10250978c..000000000 --- a/preferences.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Preferences editor - - - - - - -

Preferences editor - developers only

-Only use if you know what you're doing. To prevent newbies to make mistakes here, editing a mapcomplete-preference is -only available if over 500 changes
-Editing any preference -including non-mapcomplete ones- is available when you have more then 2500 changesets. Until that -point, only editing mapcomplete-preferences is possible. -
'maindiv' not attached
- - - \ No newline at end of file diff --git a/preferences.ts b/preferences.ts deleted file mode 100644 index bef8b6d5d..000000000 --- a/preferences.ts +++ /dev/null @@ -1,154 +0,0 @@ -import {OsmConnection} from "./Logic/Osm/OsmConnection"; -import Combine from "./UI/Base/Combine"; -import {Button} from "./UI/Base/Button"; -import {TextField} from "./UI/Input/TextField"; -import {FixedUiElement} from "./UI/Base/FixedUiElement"; -import {Utils} from "./Utils"; -import {SubtleButton} from "./UI/Base/SubtleButton"; -import LZString from "lz-string"; -import BaseUIElement from "./UI/BaseUIElement"; -import Table from "./UI/Base/Table"; -import {LayoutConfigJson} from "./Models/ThemeConfig/Json/LayoutConfigJson"; -import {Changes} from "./Logic/Osm/Changes"; -import {ElementStorage} from "./Logic/ElementStorage"; - - -const connection = new OsmConnection({ - osmConfiguration: 'osm', - changes: new Changes(), - layoutName: '', - allElements: new ElementStorage() -}); - - -let rendered = false; - -function salvageThemes(preferences: any) { - const knownThemeNames = new Set(); - const correctThemeNames = [] - for (const key in preferences) { - try { - if (!(typeof key === "string")) { - continue; - } - const prefix = "mapcomplete-installed-theme-"; - // mapcomplete-installed-theme-arbres_llefia-combined-11 - //mapcomplete-installed-theme-1roadAlllanes-combined-length - if (!key.startsWith(prefix)) { - continue; - } - const theme = key.substring(prefix.length, key.indexOf("-combined-")) - - if (key.endsWith("-length")) { - correctThemeNames.push(theme) - } else { - knownThemeNames.add(theme); - } - } catch (e) { - console.error(e) - } - } - - for (const correctThemeName of correctThemeNames) { - knownThemeNames.delete(correctThemeName); - } - - const missingValues = Array.from(knownThemeNames).map(failedTheme => { - - let i = 0; - let foundValue = undefined - let combined = "" - do { - const prefix = "mapcomplete-installed-theme-"; - const key = prefix + failedTheme + "-combined-" + i; - foundValue = preferences[key] - console.log(key, "-->", foundValue) - i++; - combined += foundValue ?? "" - } while (foundValue !== undefined); - - if (combined === "") { - return null; - } - - console.log("COmbined value is", combined) - let jsonObject; - try { - jsonObject = JSON.parse(atob(combined)); - } catch (e) { - try { - - // We try to decode with lz-string - jsonObject = JSON.parse(Utils.UnMinify(LZString.decompressFromBase64(combined))) as LayoutConfigJson; - } catch (e0) { - console.log("Could not salvage theme. Initial parsing failed due to:", e, "\nWith LZ failed due ", e0) - } - - } - - return { - themeName: failedTheme, - contents: JSON.stringify(jsonObject, null, " ") - } - }) - return Utils.NoNull(missingValues); -} - -function clearAll(preferences) { - for (const key in preferences) { - const pref = connection.GetPreference(key, ""); - if (key.startsWith("mapcomplete")) { - pref.setData("") - } - } -} - -function SalvageButton(theme: { themeName: string, contents: string }) { - return new SubtleButton("./assets/svg/bug.svg", "Download broken theme " + theme.themeName).onClick( - () => { - Utils.offerContentsAsDownloadableFile(theme.contents, theme.themeName + ".json") - } - ) -} - -function createTable(preferences: any) { - if (rendered) { - return; - } - rendered = true; - const prefs: (BaseUIElement | string)[][] = []; - for (const key in preferences) { - if (!preferences.hasOwnProperty(key)) { - continue; - } - const pref = connection.GetPreference(key, ""); - - let value: BaseUIElement = new FixedUiElement(pref.data); - if (connection.userDetails.data.csCount > 500 && - (key.startsWith("mapcomplete") || connection.userDetails.data.csCount > 2500)) { - value = new TextField({ - value: pref - }); - } - - const row = [ - key, - new Button("delete", () => pref.setData(null)), - value - ]; - prefs.push(row); - } - - new Combine( - [ - ...salvageThemes(preferences).map(theme => SalvageButton(theme)), - new Table( - ["Key", "", "Value"], - prefs - ), - new SubtleButton("./assets/svg/delete_icon.svg", "Delete all mapcomplete preferences (mangrove identies are preserved)").onClick(() => clearAll(preferences))] - ).AttachTo("maindiv"); -} - -connection.preferencesHandler.preferences.addCallback((prefs) => createTable(prefs)) - From 9b1bf96790fbd6c198b43db10be705d5ad615ecd Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 21 Dec 2021 21:15:07 +0100 Subject: [PATCH 06/16] Fix tests --- test/Actors.spec.ts | 2 +- test/Theme.spec.ts | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/test/Actors.spec.ts b/test/Actors.spec.ts index 12b7cfb87..e0540a04a 100644 --- a/test/Actors.spec.ts +++ b/test/Actors.spec.ts @@ -6,7 +6,7 @@ import SelectedFeatureHandler from "../Logic/Actors/SelectedFeatureHandler"; import {UIEventSource} from "../Logic/UIEventSource"; import {ElementStorage} from "../Logic/ElementStorage"; import Loc from "../Models/Loc"; -import * as bookcaseJson from "../assets/themes/bookcases/bookcases.json" +import * as bookcaseJson from "../assets/generated/themes/bookcases.json" import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; export default class ActorsSpec extends T { diff --git a/test/Theme.spec.ts b/test/Theme.spec.ts index 6a3f4b2a6..6372d2ade 100644 --- a/test/Theme.spec.ts +++ b/test/Theme.spec.ts @@ -1,8 +1,13 @@ import T from "./TestHelper"; -import {Utils} from "../Utils"; import * as assert from "assert"; import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; +import * as bookcaseLayer from "../assets/generated/layers/public_bookcase.json" +import {PrepareLayer, PrepareTheme} from "../Models/ThemeConfig/LegacyJsonConvert"; +import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; +import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; +import LayerConfig from "../Models/ThemeConfig/LayerConfig"; +import Constants from "../Models/Constants"; export default class ThemeSpec extends T { constructor() { @@ -10,7 +15,7 @@ export default class ThemeSpec extends T { [ ["Nested overrides work", () => { - const themeConfigJson: LayoutConfigJson = { + let themeConfigJson: LayoutConfigJson = { description: "Descr", icon: "", language: ["en"], @@ -34,7 +39,14 @@ export default class ThemeSpec extends T { version: "", id: "test" } - + // TOtal cheat: disable the default layers: + Constants.added_by_default.splice(0, Constants.added_by_default.length) + const sharedLayers = new Map() + sharedLayers.set("public_bookcase", bookcaseLayer["default"]) + themeConfigJson = new PrepareTheme().convertStrict({ + tagRenderings: new Map(), + sharedLayers: sharedLayers + }, themeConfigJson, "test") const themeConfig = new LayoutConfig(themeConfigJson); assert.equal("xyz", themeConfig.layers[0].source.geojsonSource) From 928d1198166d022a4a44f77bcf191b60769bd7d5 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 22 Dec 2021 01:53:58 +0100 Subject: [PATCH 07/16] Create a build script which splits deployment --- assets/layers/matchpoint/matchpoint.json | 17 +++++++++------ assets/themes/grb_import/grb.json | 4 ++-- package.json | 4 ++-- scripts/build.sh | 22 +++++++++++++++++++ scripts/deployIfChanged.sh | 27 ------------------------ 5 files changed, 37 insertions(+), 37 deletions(-) create mode 100644 scripts/build.sh delete mode 100755 scripts/deployIfChanged.sh diff --git a/assets/layers/matchpoint/matchpoint.json b/assets/layers/matchpoint/matchpoint.json index 983ba8025..0a3d3080f 100644 --- a/assets/layers/matchpoint/matchpoint.json +++ b/assets/layers/matchpoint/matchpoint.json @@ -3,11 +3,16 @@ "description": "The default rendering for a locationInput which snaps onto another object", "source": { "osmTags": { - "and": []} + "and": [] + } }, - "mapRendering": [{ - "location": ["point","centroid"], - "icon": "./assets/svg/crosshair-empty.svg" - }] - + "mapRendering": [ + { + "location": [ + "point", + "centroid" + ], + "icon": "./assets/svg/crosshair-empty.svg" + } + ] } \ No newline at end of file diff --git a/assets/themes/grb_import/grb.json b/assets/themes/grb_import/grb.json index 3133c41e4..2d25f96e6 100644 --- a/assets/themes/grb_import/grb.json +++ b/assets/themes/grb_import/grb.json @@ -486,7 +486,8 @@ "id": "Import-button", "render": "{import_way_button(OSM-buildings,building=$building;man_made=$man_made; source:geometry:date=$_grb_date; source:geometry:ref=$_grb_ref; addr:street=$addr:street; addr:housenumber=$addr:housenumber; building:min_level=$_building:min_level, Upload this building to OpenStreetMap,,_is_part_of_building=true,1,_moveable=true)}", "mappings": [ - {"#": "Hide import button if intersection with other objects are detected", + { + "#": "Hide import button if intersection with other objects are detected", "if": "_intersects_with_other_features~*", "then": "This GRB building intersects with the following features: {_intersects_with_other_features}.
Fix the overlap and try again" }, @@ -533,7 +534,6 @@ "if": "_osm_obj:addr:housenumber~*", "then": "The overlapping building only has a housenumber known: {_osm_obj:addr:housenumber}" }, - { "if": "_osm_obj:id=", "then": "No overlapping OpenStreetMap-building found" diff --git a/package.json b/package.json index c5f078609..7e8b959bc 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,9 @@ "optimize-images": "cd assets/generated/ && find -name '*.png' -exec optipng '{}' \\; && echo 'PNGs are optimized'", "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json", "generate": "mkdir -p ./assets/generated && npm run reset:layeroverview && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run generate:licenses && npm run validate:layeroverview", - "build": "rm -rf dist/ && npm run generate && node --max_old_space_size=12000 $(which parcel) build --public-url ./ *.html assets/** assets/**/** assets/**/**/** vendor/* vendor/*/*", + "build": "npm run generate && ./scripts/build.sh", "generate:charging-stations": "cd ./assets/layers/charging_station && ts-node csvToJson.ts && cd -", - "prepare-deploy": "npm run generate && npm run test && npm run generate:editor-layer-index && npm run generate:layouts && npm run build && rm -rf .cache", + "prepare-deploy": "npm run generate && npm run test && npm run generate:editor-layer-index && npm run generate:layouts && npm run build", "deploy:staging": "npm run prepare-deploy && rm -rf ~/git/pietervdvn.github.io/Staging/* && cp -r dist/* ~/git/pietervdvn.github.io/Staging/ && cd ~/git/pietervdvn.github.io/ && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean", "deploy:pietervdvn": "cd ~/git/pietervdvn.github.io/ && git pull && cd - && npm run prepare-deploy && rm -rf ~/git/pietervdvn.github.io/MapComplete/* && cp -r dist/* ~/git/pietervdvn.github.io/MapComplete/ && cd ~/git/pietervdvn.github.io/ && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean", "deploy:production": "cd ~/git/mapcomplete.github.io/ && git pull && cd - && rm -rf ./assets/generated && npm run prepare-deploy && npm run optimize-images && rm -rf ~/git/mapcomplete.github.io/* && cp -r dist/* ~/git/mapcomplete.github.io/ && cd ~/git/mapcomplete.github.io/ && echo \"mapcomplete.osm.be\" > CNAME && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean && npm run gittag", diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100644 index 000000000..658d9d004 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,22 @@ +#! /bin/bash + +# The build script; we build the application step by step as building everything at once takes too much RAM +# Should be run from the repository root +rm -rf dist/* +rm -rf .cache +mkdir dist 2> /dev/null + +# Copy the layer files, as these might contain assets (e.g. svgs) +cp -r assets/layers/ dist/assets/layers/ +cp -r assets/themes/ dist/assets/themes/ +cp -r assets/svg/ dist/assets/svg/ +parcel build --no-source-maps --public-url ./ "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor + +for file in $(ls index_*.ts) +do + theme=${file:6:-3} + echo $theme + # Builds the necessary files for just one theme, e.g. 'bookcases.html' + 'index_bookcases.ts' + supporting file + # npm run generate && node --max_old_space_size=12000 $(which parcel) build + parcel build --no-source-maps --public-url ./ "$theme.html" +done \ No newline at end of file diff --git a/scripts/deployIfChanged.sh b/scripts/deployIfChanged.sh deleted file mode 100755 index d9d948365..000000000 --- a/scripts/deployIfChanged.sh +++ /dev/null @@ -1,27 +0,0 @@ -#! /bin/bash - - -# To run with crontab: -# */1 * * * * /home/pietervdvn/git/MapComplete/scripts/deployIfChanged.sh >> /home/pietervdvn/auto_deploy_caching.log 2>&1 - -PATH=/home/pietervdvn/.local/bin:/home/pietervdvn/.nvm/versions/node/v16.0.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/pietervdvn/.dotnet/tools - - -cd ~/git/MapComplete - - git fetch - HEADHASH=$(git rev-parse HEAD) - UPSTREAMHASH=$(git rev-parse master@{upstream}) - - if [ "$HEADHASH" != "$UPSTREAMHASH" ] - then - echo Not up to date with origin. Deploying! - git pull - npm run generate:translations - git commit -am "Sync translations" - git push - npm run generate:docs - git commit -am "Autgenerate docs and taginfo files" - - npm run deploy:production - fi \ No newline at end of file From dc2d900b9aaa04349ae10b78ea4312a1e33f1175 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 22 Dec 2021 01:56:39 +0100 Subject: [PATCH 08/16] Add echo --- scripts/build.sh | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 scripts/build.sh diff --git a/scripts/build.sh b/scripts/build.sh old mode 100644 new mode 100755 index 658d9d004..3fca6e61d --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,5 +1,6 @@ #! /bin/bash +echo "Starting build.Should" # The build script; we build the application step by step as building everything at once takes too much RAM # Should be run from the repository root rm -rf dist/* From cfb064f400df092e48b97d501db28dbe90af7ee0 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 22 Dec 2021 02:10:02 +0100 Subject: [PATCH 09/16] Create assets file --- scripts/build.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 3fca6e61d..2656520d6 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -6,18 +6,27 @@ echo "Starting build.Should" rm -rf dist/* rm -rf .cache mkdir dist 2> /dev/null +mkdir dist/assets 2> /dev/null # Copy the layer files, as these might contain assets (e.g. svgs) cp -r assets/layers/ dist/assets/layers/ cp -r assets/themes/ dist/assets/themes/ cp -r assets/svg/ dist/assets/svg/ +echo "\n\n Building non-theme pages" +echo " ==========================\n\n" parcel build --no-source-maps --public-url ./ "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor +echo "\n\n Building theme pages" +echo " ======================\n\n" for file in $(ls index_*.ts) do theme=${file:6:-3} - echo $theme + echo "\n\n $theme" + echo " ------------ \n\n" # Builds the necessary files for just one theme, e.g. 'bookcases.html' + 'index_bookcases.ts' + supporting file # npm run generate && node --max_old_space_size=12000 $(which parcel) build parcel build --no-source-maps --public-url ./ "$theme.html" -done \ No newline at end of file +done + +# Optimize images +cd dist/ && find -name '*.png' -exec optipng '{}' \; && echo 'PNGs are optimized' \ No newline at end of file From 3cc61403b90a6465e9cb706f12df01952fa9300b Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 22 Dec 2021 02:25:25 +0100 Subject: [PATCH 10/16] Update some deps, remove obsolete scripts in package.json, experimenting with build script --- package-lock.json | 6381 +++++++++++++++++++-------------------------- package.json | 18 +- scripts/build.sh | 4 +- 3 files changed, 2700 insertions(+), 3703 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0f21be4e..116016e73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "leaflet-providers": "^1.13.0", "leaflet-simple-map-screenshoter": "^0.4.4", "leaflet.markercluster": "^1.4.1", - "libphonenumber": "0.0.10", + "libphonenumber": "^0.0.9", "libphonenumber-js": "^1.7.55", "lz-string": "^1.4.4", "mangrove-reviews": "^0.1.3", @@ -43,9 +43,9 @@ "npm-run-all": "^4.1.5", "opening_hours": "^3.6.0", "osm-auth": "^1.0.2", - "osmtogeojson": "^3.0.0-beta.4", + "osmtogeojson": "^1.0.0", "parcel": "^1.2.4", - "prompt-sync": "^4.2.0", + "prompt-sync": "^4.1.6", "tailwindcss": "^2.2.15", "togpx": "^0.5.4", "tslint": "^6.1.3", @@ -137,11 +137,14 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { @@ -257,11 +260,14 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { @@ -288,9 +294,12 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", + "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.13.0", @@ -338,9 +347,12 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { "version": "7.12.17", @@ -598,11 +610,14 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", - "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.5.tgz", + "integrity": "sha512-Nrx+7EAJx1BieBQseZa2pavVH2Rp7hADK2xn7coYqVbWRu9C2OFizYcsKo6TrrqJkJl+qF/+Qqzrk/+XDu4GnA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -620,11 +635,14 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.5.tgz", + "integrity": "sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -828,12 +846,15 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz", - "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.5.tgz", + "integrity": "sha512-skE02E/MptkZdBS4HwoRhjWXqeKQj0BWKEAPfPC+8R4/f6bjQqQ9Nftv/+HkxWwnVxh/E2NV9TNfzLN5H/oiBw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-flow": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/plugin-syntax-flow": "^7.16.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -995,15 +1016,18 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.5.tgz", + "integrity": "sha512-+arLIz1d7kmwX0fKxTxbnoeG85ONSnLpvdODa4P3pc1sS7CV1hfmtYWufkW/oYsPnkDrEeQFxhUWcFnrXW7jQQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/plugin-syntax-jsx": "^7.16.5", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1261,12 +1285,15 @@ } }, "node_modules/@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@iarna/toml": { @@ -1274,47 +1301,6 @@ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" }, - "node_modules/@mapbox/geojson-area": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz", - "integrity": "sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=", - "dependencies": { - "wgs84": "0.0.0" - } - }, - "node_modules/@mapbox/geojson-rewind": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.4.0.tgz", - "integrity": "sha512-b+1uPWBERW4Pet/969BNu61ZPDyH2ilIxBjJDFzxyS9TyszF9UrTQyYIl/G38clux3rtpAGGFSGTCSF/qR6UjA==", - "dependencies": { - "@mapbox/geojson-area": "0.2.2", - "concat-stream": "~1.6.0", - "minimist": "1.2.0", - "sharkdown": "^0.1.0" - }, - "bin": { - "geojson-rewind": "geojson-rewind" - } - }, - "node_modules/@mapbox/geojson-rewind/node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/@mapbox/geojson-rewind/node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -1387,6 +1373,102 @@ "node": ">= 6.0.0" } }, + "node_modules/@parcel/logger/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/ora": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "dependencies": { + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@parcel/utils": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz", @@ -1452,17 +1534,6 @@ "node": ">=0.10.0" } }, - "node_modules/@parcel/watcher/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@parcel/watcher/node_modules/chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", @@ -1485,6 +1556,18 @@ "fsevents": "^1.2.7" } }, + "node_modules/@parcel/watcher/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@parcel/watcher/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -1499,17 +1582,6 @@ "node": ">=0.10.0" } }, - "node_modules/@parcel/watcher/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@parcel/watcher/node_modules/fsevents": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", @@ -1548,6 +1620,25 @@ "node": ">=0.10.0" } }, + "node_modules/@parcel/watcher/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@parcel/watcher/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@parcel/watcher/node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -1559,6 +1650,57 @@ "node": ">=0.10.0" } }, + "node_modules/@parcel/watcher/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@parcel/watcher/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@parcel/watcher/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@parcel/watcher/node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@parcel/watcher/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@parcel/watcher/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -1570,7 +1712,7 @@ "node": ">=0.10.0" } }, - "node_modules/@parcel/watcher/node_modules/is-number/node_modules/kind-of": { + "node_modules/@parcel/watcher/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", @@ -1604,6 +1746,26 @@ "node": ">=0.10.0" } }, + "node_modules/@parcel/watcher/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@parcel/watcher/node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@parcel/watcher/node_modules/readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", @@ -3010,9 +3172,9 @@ "integrity": "sha1-utMynv9bQRXjTvRpgjckTUEdRHA=" }, "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" }, "node_modules/@types/raf": { "version": "3.4.0", @@ -3197,11 +3359,12 @@ } }, "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -3216,24 +3379,19 @@ } }, "node_modules/ansi-to-html": { - "version": "0.6.14", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz", - "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==", + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", "dependencies": { - "entities": "^1.1.2" + "entities": "^2.0.0" }, "bin": { "ansi-to-html": "bin/ansi-to-html" }, "engines": { - "node": "*" + "node": ">=8.0.0" } }, - "node_modules/ansicolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", - "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=" - }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -3338,9 +3496,9 @@ } }, "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dependencies": { "safer-buffer": "~2.1.0" } @@ -3376,20 +3534,6 @@ "node": ">=0.8" } }, - "node_modules/assert/node_modules/util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -3643,6 +3787,14 @@ "node": ">=0.10.0" } }, + "node_modules/base/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/base64-arraybuffer": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", @@ -3711,30 +3863,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3910,11 +4038,6 @@ "pako": "~1.0.5" } }, - "node_modules/browserify-zlib/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, "node_modules/browserslist": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz", @@ -3949,13 +4072,27 @@ } }, "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "node_modules/buffer-equal": { @@ -4049,6 +4186,14 @@ "node": ">=4" } }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "engines": { + "node": ">=4" + } + }, "node_modules/caller-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", @@ -4061,11 +4206,11 @@ } }, "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/camelcase": { @@ -4135,18 +4280,6 @@ "node": ">=8.0.0" } }, - "node_modules/cardinal": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz", - "integrity": "sha1-ylu2iltRG5D+k7ms6km97lwyv+I=", - "dependencies": { - "ansicolors": "~0.2.1", - "redeyed": "~0.4.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -4220,34 +4353,28 @@ "node": ">=0.10.0" } }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "dependencies": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-width": { @@ -4270,15 +4397,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -4302,18 +4420,6 @@ "node": ">=8" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -4412,11 +4518,11 @@ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "engines": { - "node": ">= 6" + "node": ">= 12" } }, "node_modules/component-emitter": { @@ -4430,30 +4536,14 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", + "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", "engines": [ - "node >= 6.0" + "node >= 0.8.0" ], "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "bops": "0.0.6" } }, "node_modules/concaveman": { @@ -4572,17 +4662,43 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=4" + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cosmiconfig/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" } }, "node_modules/country-language": { @@ -4702,13 +4818,12 @@ } }, "node_modules/css-declaration-sorter/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -4726,17 +4841,6 @@ "node": ">=0.10.0" } }, - "node_modules/css-declaration-sorter/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/css-line-break": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.1.1.tgz", @@ -4857,15 +4961,6 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, - "node_modules/css-select/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "node_modules/css-selector-tokenizer": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", @@ -4977,13 +5072,12 @@ } }, "node_modules/cssnano-preset-default/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -5001,17 +5095,6 @@ "node": ">=0.10.0" } }, - "node_modules/cssnano-preset-default/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/cssnano-util-get-arguments": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", @@ -5040,13 +5123,12 @@ } }, "node_modules/cssnano-util-raw-cache/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -5064,17 +5146,6 @@ "node": ">=0.10.0" } }, - "node_modules/cssnano-util-raw-cache/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/cssnano-util-same-parent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", @@ -5083,14 +5154,39 @@ "node": ">=6.9.0" } }, - "node_modules/cssnano/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "node_modules/cssnano/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -5100,6 +5196,14 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/cssnano/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, "node_modules/cssnano/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5108,17 +5212,6 @@ "node": ">=0.10.0" } }, - "node_modules/cssnano/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/csso": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", @@ -5236,9 +5329,9 @@ } }, "node_modules/deasync": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.21.tgz", - "integrity": "sha512-kUmM8Y+PZpMpQ+B4AuOW9k2Pfx/mSupJtxOsLzmnHY2WqZUYRFccFn2RhzPAqt3Xb+sorK/badW2D4zNzqZz5w==", + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.24.tgz", + "integrity": "sha512-i98vg42xNfRZCymummMAN0rIcQ1gZFinSe3btvPIvy6JFTaeHcumeKybRo2HTv86nasfmT0nEgAn2ggLZhOCVA==", "hasInstallScript": true, "dependencies": { "bindings": "^1.5.0", @@ -5248,6 +5341,11 @@ "node": ">=0.11.0" } }, + "node_modules/deasync/node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + }, "node_modules/debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -5319,9 +5417,9 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/defaults": { "version": "1.0.3", @@ -5351,47 +5449,11 @@ } }, "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" @@ -5605,18 +5667,6 @@ "node": ">=6" } }, - "node_modules/dependency-cruiser/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/dependency-cruiser/node_modules/safe-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", @@ -5752,14 +5802,6 @@ } ] }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/dom-to-image-more": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/dom-to-image-more/-/dom-to-image-more-2.8.0.tgz", @@ -5788,9 +5830,9 @@ } }, "node_modules/domhandler": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz", - "integrity": "sha1-Wd+dzSJ+gIs2Wuc+H2aErD2Ub8I=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dependencies": { "domelementtype": "1" } @@ -5802,10 +5844,11 @@ "optional": true }, "node_modules/domutils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz", - "integrity": "sha1-mtTVm1r2ymhMYv5tdo7xcOcN8ZI=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dependencies": { + "dom-serializer": "0", "domelementtype": "1" } }, @@ -5941,9 +5984,12 @@ } }, "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/envinfo": { "version": "7.8.1", @@ -5970,26 +6016,30 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "unbox-primitive": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5999,9 +6049,9 @@ } }, "node_modules/es-abstract/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6092,15 +6142,15 @@ } }, "node_modules/esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, "node_modules/estraverse": { @@ -6169,28 +6219,6 @@ "ms": "2.0.0" } }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6211,23 +6239,11 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" @@ -6288,17 +6304,6 @@ "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extglob/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -6334,6 +6339,14 @@ "node": ">=0.10.0" } }, + "node_modules/extglob/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -6659,18 +6672,6 @@ "integrity": "sha1-Lbw2eM0bMbgXnodr2nDNEg3eNcA=", "deprecated": "This module is now under the @mapbox namespace: install @mapbox/geojson-normalize instead" }, - "node_modules/geojson-numeric": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.1.tgz", - "integrity": "sha512-rvItMp3W7pe16o2EQTnRw54v6WHdiE4bYjUsdr3FZskFb6oPC7gjLe4zginP+Wd1B/HLl2acTukfn16Lmwn7lg==", - "dependencies": { - "concat-stream": "2.0.0", - "optimist": "~0.3.5" - }, - "bin": { - "geojson-numeric": "geojson-numeric" - } - }, "node_modules/geojson-random": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/geojson-random/-/geojson-random-0.2.2.tgz", @@ -6746,6 +6747,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -6841,11 +6857,6 @@ "unicode-trie": "^0.3.1" } }, - "node_modules/growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=" - }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -6960,6 +6971,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -7013,17 +7038,6 @@ "node": ">=0.10.0" } }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -7133,13 +7147,34 @@ "uncss": "^0.17.3" } }, + "node_modules/htmlnano/node_modules/acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/htmlnano/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/htmlnano/node_modules/dom-serializer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", - "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dependencies": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" }, "funding": { @@ -7158,9 +7193,9 @@ ] }, "node_modules/htmlnano/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dependencies": { "domelementtype": "^2.2.0" }, @@ -7172,9 +7207,9 @@ } }, "node_modules/htmlnano/node_modules/domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -7184,14 +7219,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/htmlnano/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/htmlnano/node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -7210,6 +7237,23 @@ "entities": "^2.0.0" } }, + "node_modules/htmlnano/node_modules/postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + }, "node_modules/htmlnano/node_modules/posthtml": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.15.2.tgz", @@ -7233,20 +7277,61 @@ "node": ">=10" } }, + "node_modules/htmlnano/node_modules/purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", + "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "bin": { + "purgecss": "bin/purgecss" + } + }, + "node_modules/htmlnano/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/htmlnano/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/htmlnano/node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dependencies": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } } }, "node_modules/htmlnano/node_modules/terser/node_modules/commander": { @@ -7263,47 +7348,46 @@ } }, "node_modules/htmlparser2": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.5.1.tgz", - "integrity": "sha1-b0L3ZX3RnBP31l3pEYQXOUoL5tA=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dependencies": { - "domelementtype": "1", - "domhandler": "2.2", - "domutils": "1.3", - "readable-stream": "1.1" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" } }, - "node_modules/htmlparser2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "node_modules/htmlparser2/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/htmlparser2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", - "setprototypeof": "1.1.1", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" @@ -7419,15 +7503,18 @@ } }, "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-from": { @@ -7520,15 +7607,6 @@ "node": ">=8.0.0" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -7560,30 +7638,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -7620,82 +7674,6 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/inquirer/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -7710,18 +7688,6 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7734,6 +7700,19 @@ "node": ">=8" } }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", @@ -7822,9 +7801,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "engines": { "node": ">= 0.4" }, @@ -8075,12 +8054,12 @@ } }, "node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -8094,10 +8073,21 @@ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -8166,6 +8156,17 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -8205,36 +8206,6 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "node_modules/jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", - "dependencies": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "bin": { - "jade": "bin/jade" - } - }, - "node_modules/jade/node_modules/commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "engines": { - "node": ">= 0.4.x" - } - }, - "node_modules/jade/node_modules/mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "engines": { - "node": "*" - } - }, "node_modules/jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -8257,18 +8228,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -8342,18 +8301,6 @@ "source-map": "~0.6.1" } }, - "node_modules/jsdom/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/jsdom/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8458,31 +8405,6 @@ "node": "*" } }, - "node_modules/jsonparse": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", - "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=", - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.0.tgz", - "integrity": "sha1-78Ri1aW8lOwAf0siVxrNf28q4BM=", - "dependencies": { - "jsonparse": "0.0.5", - "through": "~2.2.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/JSONStream/node_modules/through": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", - "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=" - }, "node_modules/jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -8599,9 +8521,12 @@ } }, "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.0" } @@ -8661,12 +8586,11 @@ } }, "node_modules/libphonenumber": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/libphonenumber/-/libphonenumber-0.0.10.tgz", - "integrity": "sha1-54u/ZgGYnNCfpDUEdkaI1BeUFIw=", + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/libphonenumber/-/libphonenumber-0.0.9.tgz", + "integrity": "sha1-YuCNsuLJszYL2ISS8uhwTvbErII=", "dependencies": { - "closure": "1.0.3", - "mocha": "^2.4.5" + "closure": "1.0.3" }, "engines": { "node": ">= 0.8" @@ -8686,9 +8610,9 @@ } }, "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/load-json-file": { "version": "1.1.0", @@ -8789,14 +8713,89 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "dependencies": { - "chalk": "^2.0.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/loud-rejection": { @@ -8813,9 +8812,16 @@ } }, "node_modules/lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } }, "node_modules/lz-string": { "version": "1.4.4", @@ -8985,30 +8991,31 @@ } }, "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dependencies": { - "mime-db": "1.47.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/mimic-response": { @@ -9073,12 +9080,11 @@ } }, "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { - "minimist": "0.0.8" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" @@ -9090,108 +9096,6 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "node_modules/mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "dependencies": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 0.8.x" - } - }, - "node_modules/mocha/node_modules/commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dependencies": { - "ms": "0.7.1" - } - }, - "node_modules/mocha/node_modules/diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dependencies": { - "inherits": "2", - "minimatch": "0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", - "bin": { - "supports-color": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/modern-normalize": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", @@ -9231,9 +9135,9 @@ "dev": true }, "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, "node_modules/nanocolors": { @@ -9276,6 +9180,84 @@ "node": ">=0.10.0" } }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -9312,9 +9294,10 @@ } }, "node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true }, "node_modules/node-emoji": { "version": "1.11.0", @@ -9371,6 +9354,11 @@ "util": "0.10.3" } }, + "node_modules/node-libs-browser/node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, "node_modules/node-libs-browser/node_modules/assert/node_modules/util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -9379,16 +9367,34 @@ "inherits": "2.0.1" } }, + "node_modules/node-libs-browser/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "node_modules/node-libs-browser/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "node_modules/node-libs-browser/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, + "node_modules/node-libs-browser/node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dependencies": { + "inherits": "2.0.3" + } + }, "node_modules/node-releases": { "version": "1.1.76", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz", @@ -9579,17 +9585,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -9666,13 +9661,13 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.8" @@ -9693,14 +9688,13 @@ } }, "node_modules/object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -9738,14 +9732,18 @@ } }, "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "dependencies": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/opening_hours": { @@ -9797,19 +9795,96 @@ } }, "node_modules/ora": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", - "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, "dependencies": { - "chalk": "^2.3.1", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/os-browserify": { @@ -9840,46 +9915,27 @@ "node": ">=8.10.0" } }, - "node_modules/osm-polygon-features": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz", - "integrity": "sha1-IK5BEwxIbkmjsqPCtYoUGcSYZ3g=" - }, "node_modules/osmtogeojson": { - "version": "3.0.0-beta.4", - "resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-3.0.0-beta.4.tgz", - "integrity": "sha512-GwNy2w5JKOplOBspagcNhCDhBRV6Du2BCvcLkaA7nX12U86Dl2Ciw9zs/VzFFTXfyZlaK+7bGCWN2SNlfn/jOA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-1.0.0.tgz", + "integrity": "sha1-pH9X6k96sg8G6daVzA6W5GsTlOA=", "dependencies": { - "@mapbox/geojson-rewind": "0.4.0", - "concat-stream": "2.0.0", - "geojson-numeric": "0.2.1", - "htmlparser2": "3.5.1", - "JSONStream": "0.8.0", - "optimist": "~0.3.5", - "osm-polygon-features": "^0.9.1", - "tiny-osmpbf": "^0.1.0", - "xmldom": "~0.1.16" - }, - "bin": { - "osmtogeojson": "osmtogeojson" - }, - "engines": { - "node": ">=0.5" - }, - "optionalDependencies": { - "@types/geojson": "^1.0.2" + "lodash": "~2.2.0" } }, - "node_modules/osmtogeojson/node_modules/@types/geojson": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", - "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", - "optional": true + "node_modules/osmtogeojson/node_modules/lodash": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.2.1.tgz", + "integrity": "sha1-ypNf0UqzwMhyq6zxmLnNpQFECGc=", + "engines": [ + "node", + "rhino" + ] }, "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/parcel": { "version": "1.12.4", @@ -9982,22 +10038,23 @@ "node": ">=0.10.0" } }, - "node_modules/parcel/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parcel/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, + "node_modules/parcel/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/parcel/node_modules/fast-glob": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", @@ -10028,17 +10085,6 @@ "node": ">=0.10.0" } }, - "node_modules/parcel/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parcel/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -10059,6 +10105,52 @@ "node": ">=0.10.0" } }, + "node_modules/parcel/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/parcel/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -10081,6 +10173,14 @@ "node": ">=0.10.0" } }, + "node_modules/parcel/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/parcel/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -10104,14 +10204,25 @@ "node": ">=0.10.0" } }, - "node_modules/parcel/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "node_modules/parcel/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10142,17 +10253,6 @@ "node": ">=0.10.0" } }, - "node_modules/parcel/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/parcel/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -10176,14 +10276,6 @@ "node": ">=6" } }, - "node_modules/parent-module/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", @@ -10286,18 +10378,6 @@ "node": ">=0.10.0" } }, - "node_modules/pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", - "dependencies": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -10323,6 +10403,11 @@ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -10421,13 +10506,12 @@ } }, "node_modules/postcss-calc/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10445,17 +10529,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-calc/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-colormin": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", @@ -10472,13 +10545,12 @@ } }, "node_modules/postcss-colormin/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10501,17 +10573,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-colormin/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-convert-values": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", @@ -10525,13 +10586,12 @@ } }, "node_modules/postcss-convert-values/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10554,17 +10614,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-convert-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-discard-comments": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", @@ -10577,13 +10626,12 @@ } }, "node_modules/postcss-discard-comments/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10601,17 +10649,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-discard-comments/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-discard-duplicates": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", @@ -10624,13 +10661,12 @@ } }, "node_modules/postcss-discard-duplicates/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10648,17 +10684,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-discard-duplicates/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-discard-empty": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", @@ -10671,13 +10696,12 @@ } }, "node_modules/postcss-discard-empty/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10695,17 +10719,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-discard-empty/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-discard-overridden": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", @@ -10718,13 +10731,12 @@ } }, "node_modules/postcss-discard-overridden/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10742,17 +10754,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-discard-overridden/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-merge-longhand": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", @@ -10768,13 +10769,12 @@ } }, "node_modules/postcss-merge-longhand/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10797,17 +10797,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-merge-longhand/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-merge-rules": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", @@ -10825,13 +10814,12 @@ } }, "node_modules/postcss-merge-rules/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10862,17 +10850,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-merge-rules/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-minify-font-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", @@ -10886,13 +10863,12 @@ } }, "node_modules/postcss-minify-font-values/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10915,17 +10891,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-minify-font-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-minify-gradients": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", @@ -10941,13 +10906,12 @@ } }, "node_modules/postcss-minify-gradients/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10970,17 +10934,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-minify-gradients/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-minify-params": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", @@ -10998,13 +10951,12 @@ } }, "node_modules/postcss-minify-params/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11027,17 +10979,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-minify-params/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-minify-selectors": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", @@ -11053,13 +10994,12 @@ } }, "node_modules/postcss-minify-selectors/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11090,17 +11030,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-minify-selectors/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-modules-extract-imports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", @@ -11232,13 +11161,12 @@ } }, "node_modules/postcss-normalize-charset/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11256,17 +11184,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-charset/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-display-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", @@ -11281,13 +11198,12 @@ } }, "node_modules/postcss-normalize-display-values/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11310,17 +11226,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-display-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-positions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", @@ -11336,13 +11241,12 @@ } }, "node_modules/postcss-normalize-positions/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11365,17 +11269,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-positions/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-repeat-style": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", @@ -11391,13 +11284,12 @@ } }, "node_modules/postcss-normalize-repeat-style/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11420,17 +11312,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-string": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", @@ -11445,13 +11326,12 @@ } }, "node_modules/postcss-normalize-string/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11474,17 +11354,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-string/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-timing-functions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", @@ -11499,13 +11368,12 @@ } }, "node_modules/postcss-normalize-timing-functions/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11528,17 +11396,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-unicode": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", @@ -11553,13 +11410,12 @@ } }, "node_modules/postcss-normalize-unicode/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11582,17 +11438,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-unicode/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-url": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", @@ -11608,13 +11453,12 @@ } }, "node_modules/postcss-normalize-url/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11637,17 +11481,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-url/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-whitespace": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", @@ -11661,13 +11494,12 @@ } }, "node_modules/postcss-normalize-whitespace/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11690,17 +11522,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-whitespace/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-ordered-values": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", @@ -11715,13 +11536,12 @@ } }, "node_modules/postcss-ordered-values/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11744,17 +11564,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-ordered-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-reduce-initial": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", @@ -11770,13 +11579,12 @@ } }, "node_modules/postcss-reduce-initial/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11794,17 +11602,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-reduce-initial/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-reduce-transforms": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", @@ -11820,13 +11617,12 @@ } }, "node_modules/postcss-reduce-transforms/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11849,17 +11645,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-reduce-transforms/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-selector-parser": { "version": "6.0.6", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", @@ -11886,13 +11671,12 @@ } }, "node_modules/postcss-svgo/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11915,17 +11699,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-svgo/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-unique-selectors": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", @@ -11940,13 +11713,12 @@ } }, "node_modules/postcss-unique-selectors/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11964,21 +11736,10 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-unique-selectors/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/posthtml": { "version": "0.11.6", @@ -12000,53 +11761,10 @@ "htmlparser2": "^3.9.2" } }, - "node_modules/posthtml-parser/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/posthtml-parser/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/posthtml-parser/node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/posthtml-parser/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/posthtml-render": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.3.1.tgz", - "integrity": "sha512-eSToKjNLu0FiF76SSGMHjOFXYzAc/CJqi677Sq6hYvcvFCBtD6de/W5l+0IYPf7ypscqAfjCttxvTdMJt5Gj8Q==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", "engines": { "node": ">=10" } @@ -12108,36 +11826,9 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", - "dependencies": { - "strip-ansi": "^5.0.0" - } - }, - "node_modules/prompt-sync/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/prompt-sync/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/protocol-buffers-schema": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", - "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.1.6.tgz", + "integrity": "sha512-dYjDha0af2vefm6soqnPnFEz2tAzwH/kb+pPoaCohRoPUxFXj+mymkOFgxX7Ylv59TdEr7OzktEizdK7MIMvIw==" }, "node_modules/psl": { "version": "1.8.0", @@ -12176,61 +11867,17 @@ } }, "node_modules/purgecss": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", - "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", + "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", "dependencies": { - "commander": "^5.0.0", - "glob": "^7.0.0", - "postcss": "7.0.32", - "postcss-selector-parser": "^6.0.2" + "commander": "^8.0.0", + "glob": "^7.1.7", + "postcss": "^8.3.5", + "postcss-selector-parser": "^6.0.6" }, "bin": { - "purgecss": "bin/purgecss" - } - }, - "node_modules/purgecss/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/purgecss/node_modules/postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - }, - "node_modules/purgecss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/purgecss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "purgecss": "bin/purgecss.js" } }, "node_modules/q": { @@ -12451,14 +12098,6 @@ "node": ">=0.10.0" } }, - "node_modules/redeyed": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", - "integrity": "sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=", - "dependencies": { - "esprima": "~1.0.4" - } - }, "node_modules/reduce-css-calc": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", @@ -12514,6 +12153,29 @@ "node": ">=0.10.0" } }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regexp-tree": { "version": "0.1.24", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", @@ -12712,21 +12374,13 @@ } }, "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { "node": ">=4" } }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -12734,15 +12388,16 @@ "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "dependencies": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/ret": { @@ -12955,18 +12610,6 @@ "node": "^12||^14||>=16" } }, - "node_modules/semver-try-require/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semver-try-require/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -12983,9 +12626,9 @@ } }, "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", @@ -12994,9 +12637,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -13019,9 +12662,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serialize-to-js": { "version": "3.1.1", @@ -13032,14 +12675,14 @@ } }, "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" }, "engines": { "node": ">= 0.8.0" @@ -13065,26 +12708,15 @@ "node": ">=0.10.0" } }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sha.js": { "version": "2.4.11", @@ -13103,24 +12735,6 @@ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=" }, - "node_modules/sharkdown": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sharkdown/-/sharkdown-0.1.1.tgz", - "integrity": "sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg==", - "dependencies": { - "cardinal": "~0.4.2", - "minimist": "0.0.5", - "split": "~0.2.10" - }, - "bin": { - "sharkdown": "sharkdown" - } - }, - "node_modules/sharkdown/node_modules/minimist": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", - "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=" - }, "node_modules/sharp": { "version": "0.28.3", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz", @@ -13144,24 +12758,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/sharp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, "node_modules/sharp/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -13201,10 +12797,26 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, - "node_modules/sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel/node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/signal-exit": { "version": "3.0.3", @@ -13346,6 +12958,14 @@ "node": ">=0.10.0" } }, + "node_modules/snapdragon-node/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", @@ -13376,28 +12996,6 @@ "ms": "2.0.0" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -13432,9 +13030,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -13481,17 +13079,6 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" }, - "node_modules/split": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", - "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -13503,6 +13090,29 @@ "node": ">=0.10.0" } }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -13586,18 +13196,6 @@ "source-map": "~0.6.1" } }, - "node_modules/static-eval/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/static-eval/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13619,17 +13217,6 @@ "node": ">=0.10.0" } }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/static-module": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", @@ -13799,14 +13386,15 @@ } }, "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -13859,13 +13447,12 @@ } }, "node_modules/stylehacks/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -13896,17 +13483,6 @@ "node": ">=0.10.0" } }, - "node_modules/stylehacks/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/suncalc": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", @@ -13936,6 +13512,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", "dependencies": { "chalk": "^2.4.1", "coa": "^2.0.2", @@ -14072,21 +13649,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/tailwindcss/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/tailwindcss/node_modules/fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -14119,46 +13681,6 @@ "node": ">=8" } }, - "node_modules/tailwindcss/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tailwindcss/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tailwindcss/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, "node_modules/tailwindcss/node_modules/postcss-js": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", @@ -14218,28 +13740,6 @@ "postcss": "^8.2.14" } }, - "node_modules/tailwindcss/node_modules/purgecss": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", - "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", - "dependencies": { - "commander": "^6.0.0", - "glob": "^7.0.0", - "postcss": "^8.2.1", - "postcss-selector-parser": "^6.0.2" - }, - "bin": { - "purgecss": "bin/purgecss.js" - } - }, - "node_modules/tailwindcss/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, "node_modules/tailwindcss/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14340,7 +13840,8 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "node_modules/through2": { "version": "2.0.5", @@ -14372,15 +13873,6 @@ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, - "node_modules/tiny-osmpbf": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tiny-osmpbf/-/tiny-osmpbf-0.1.0.tgz", - "integrity": "sha1-ColXFxE+vmquNjxL5e76js2vuSc=", - "dependencies": { - "pbf": "^3.0.4", - "tiny-inflate": "^1.0.2" - } - }, "node_modules/tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", @@ -14424,12 +13916,6 @@ "node": ">=4" } }, - "node_modules/to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", - "deprecated": "to-iso-string has been deprecated, use @segment/to-iso-string instead." - }, "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -14477,6 +13963,84 @@ "node": ">=8.0" } }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-utf8": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", @@ -14496,21 +14060,10 @@ "togpx": "togpx" } }, - "node_modules/togpx/node_modules/concat-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", - "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", - "engines": [ - "node >= 0.8.0" - ], - "dependencies": { - "bops": "0.0.6" - } - }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } @@ -14633,15 +14186,6 @@ "node": ">=10.0.0" } }, - "node_modules/ts-json-schema-generator/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/ts-json-schema-generator/node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -14761,15 +14305,6 @@ "node": ">=10.17.0" } }, - "node_modules/ts2json-schema/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/tsconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", @@ -14943,17 +14478,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/tslint/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/tslint/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -15680,13 +15204,12 @@ } }, "node_modules/uncss/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -15717,17 +15240,6 @@ "node": ">=0.10.0" } }, - "node_modules/uncss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/underscore": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", @@ -15789,6 +15301,11 @@ "tiny-inflate": "^1.0.0" } }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + }, "node_modules/union-find": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/union-find/-/union-find-1.0.2.tgz", @@ -15921,11 +15438,17 @@ } }, "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, "dependencies": { - "inherits": "2.0.3" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } }, "node_modules/util-deprecate": { @@ -15947,11 +15470,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -16174,15 +15692,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -16239,18 +15748,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -16363,15 +15860,6 @@ "node": ">=10" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -16395,18 +15883,6 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -16474,11 +15950,11 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.16.0" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -16582,11 +16058,11 @@ } }, "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-transforms": { @@ -16613,9 +16089,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", + "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==" }, "@babel/helper-remap-async-to-generator": { "version": "7.13.0", @@ -16663,9 +16139,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" }, "@babel/helper-validator-option": { "version": "7.12.17", @@ -16863,11 +16339,11 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", - "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.5.tgz", + "integrity": "sha512-Nrx+7EAJx1BieBQseZa2pavVH2Rp7hADK2xn7coYqVbWRu9C2OFizYcsKo6TrrqJkJl+qF/+Qqzrk/+XDu4GnA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-syntax-json-strings": { @@ -16879,11 +16355,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.5.tgz", + "integrity": "sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -17033,12 +16509,12 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz", - "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.5.tgz", + "integrity": "sha512-skE02E/MptkZdBS4HwoRhjWXqeKQj0BWKEAPfPC+8R4/f6bjQqQ9Nftv/+HkxWwnVxh/E2NV9TNfzLN5H/oiBw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-flow": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/plugin-syntax-flow": "^7.16.5" } }, "@babel/plugin-transform-for-of": { @@ -17158,15 +16634,15 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.5.tgz", + "integrity": "sha512-+arLIz1d7kmwX0fKxTxbnoeG85ONSnLpvdODa4P3pc1sS7CV1hfmtYWufkW/oYsPnkDrEeQFxhUWcFnrXW7jQQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/plugin-syntax-jsx": "^7.16.5", + "@babel/types": "^7.16.0" } }, "@babel/plugin-transform-regenerator": { @@ -17384,11 +16860,11 @@ } }, "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, @@ -17397,43 +16873,6 @@ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" }, - "@mapbox/geojson-area": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz", - "integrity": "sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=", - "requires": { - "wgs84": "0.0.0" - } - }, - "@mapbox/geojson-rewind": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.4.0.tgz", - "integrity": "sha512-b+1uPWBERW4Pet/969BNu61ZPDyH2ilIxBjJDFzxyS9TyszF9UrTQyYIl/G38clux3rtpAGGFSGTCSF/qR6UjA==", - "requires": { - "@mapbox/geojson-area": "0.2.2", - "concat-stream": "~1.6.0", - "minimist": "1.2.0", - "sharkdown": "^0.1.0" - }, - "dependencies": { - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -17486,6 +16925,77 @@ "grapheme-breaker": "^0.3.2", "ora": "^2.1.0", "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "ora": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "requires": { + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "@parcel/utils": { @@ -17541,16 +17051,6 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "chokidar": { @@ -17572,6 +17072,15 @@ "upath": "^1.1.1" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -17581,16 +17090,6 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "fsevents": { @@ -17622,6 +17121,21 @@ } } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -17630,22 +17144,60 @@ "binary-extensions": "^1.0.0" } }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -17666,6 +17218,22 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } } }, "readdirp": { @@ -19072,9 +18640,9 @@ "integrity": "sha1-utMynv9bQRXjTvRpgjckTUEdRHA=" }, "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" }, "@types/raf": { "version": "3.4.0", @@ -19223,9 +18791,10 @@ } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -19236,18 +18805,13 @@ } }, "ansi-to-html": { - "version": "0.6.14", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz", - "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==", + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", "requires": { - "entities": "^1.1.2" + "entities": "^2.0.0" } }, - "ansicolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", - "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=" - }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -19331,9 +18895,9 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "requires": { "safer-buffer": "~2.1.0" } @@ -19359,22 +18923,6 @@ "is-nan": "^1.2.1", "object-is": "^1.0.1", "util": "^0.12.0" - }, - "dependencies": { - "util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - } } }, "assert-plus": { @@ -19579,6 +19127,11 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -19630,16 +19183,6 @@ "readable-stream": "^3.4.0" }, "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -19806,13 +19349,6 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "requires": { "pako": "~1.0.5" - }, - "dependencies": { - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - } } }, "browserslist": { @@ -19833,13 +19369,13 @@ "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" }, "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "buffer-equal": { @@ -19913,6 +19449,13 @@ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "requires": { "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + } } }, "caller-path": { @@ -19924,9 +19467,9 @@ } }, "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { "version": "2.1.1", @@ -19979,15 +19522,6 @@ "svg-pathdata": "^5.0.5" } }, - "cardinal": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz", - "integrity": "sha1-ylu2iltRG5D+k7ms6km97lwyv+I=", - "requires": { - "ansicolors": "~0.2.1", - "redeyed": "~0.4.0" - } - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -20048,30 +19582,22 @@ "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } } }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true }, "cli-width": { "version": "3.0.0", @@ -20090,12 +19616,6 @@ "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -20112,15 +19632,6 @@ "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, @@ -20204,9 +19715,9 @@ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" }, "component-emitter": { "version": "1.3.0", @@ -20219,26 +19730,11 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", + "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "bops": "0.0.6" } }, "concaveman": { @@ -20346,14 +19842,33 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + } } }, "country-language": { @@ -20457,27 +19972,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -20574,17 +20080,6 @@ "css-what": "^3.2.1", "domutils": "^1.7.0", "nth-check": "^1.0.2" - }, - "dependencies": { - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } } }, "css-select-base-adapter": { @@ -20643,28 +20138,44 @@ "postcss": "^7.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" } }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -20706,27 +20217,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -20749,27 +20251,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -20876,12 +20369,19 @@ } }, "deasync": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.21.tgz", - "integrity": "sha512-kUmM8Y+PZpMpQ+B4AuOW9k2Pfx/mSupJtxOsLzmnHY2WqZUYRFccFn2RhzPAqt3Xb+sorK/badW2D4zNzqZz5w==", + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.24.tgz", + "integrity": "sha512-i98vg42xNfRZCymummMAN0rIcQ1gZFinSe3btvPIvy6JFTaeHcumeKybRo2HTv86nasfmT0nEgAn2ggLZhOCVA==", "requires": { "bindings": "^1.5.0", "node-addon-api": "^1.7.1" + }, + "dependencies": { + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + } } }, "debug": { @@ -20932,9 +20432,9 @@ "dev": true }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "defaults": { "version": "1.0.3", @@ -20960,40 +20460,11 @@ } }, "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-descriptor": "^0.1.0" } }, "defined": { @@ -21144,15 +20615,6 @@ "minimist": "^1.2.5" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "safe-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", @@ -21256,11 +20718,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" } } }, @@ -21288,9 +20745,9 @@ } }, "domhandler": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz", - "integrity": "sha1-Wd+dzSJ+gIs2Wuc+H2aErD2Ub8I=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "requires": { "domelementtype": "1" } @@ -21302,10 +20759,11 @@ "optional": true }, "domutils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz", - "integrity": "sha1-mtTVm1r2ymhMYv5tdo7xcOcN8ZI=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "requires": { + "dom-serializer": "0", "domelementtype": "1" } }, @@ -21426,9 +20884,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "envinfo": { "version": "7.8.1", @@ -21451,32 +20909,36 @@ } }, "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "unbox-primitive": "^1.0.1" }, "dependencies": { "object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" } } }, @@ -21537,9 +20999,9 @@ } }, "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "estraverse": { "version": "4.3.0", @@ -21592,22 +21054,6 @@ "ms": "2.0.0" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -21627,22 +21073,11 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-extendable": "^0.1.0" } }, "external-editor": { @@ -21690,14 +21125,6 @@ "is-descriptor": "^1.0.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -21723,6 +21150,11 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -21990,15 +21422,6 @@ "resolved": "https://registry.npmjs.org/geojson-normalize/-/geojson-normalize-0.0.0.tgz", "integrity": "sha1-Lbw2eM0bMbgXnodr2nDNEg3eNcA=" }, - "geojson-numeric": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.1.tgz", - "integrity": "sha512-rvItMp3W7pe16o2EQTnRw54v6WHdiE4bYjUsdr3FZskFb6oPC7gjLe4zginP+Wd1B/HLl2acTukfn16Lmwn7lg==", - "requires": { - "concat-stream": "2.0.0", - "optimist": "~0.3.5" - } - }, "geojson-random": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/geojson-random/-/geojson-random-0.2.2.tgz", @@ -22053,6 +21476,15 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -22127,11 +21559,6 @@ "unicode-trie": "^0.3.1" } }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=" - }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -22211,6 +21638,14 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -22253,14 +21688,6 @@ } } } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } } } }, @@ -22363,13 +21790,25 @@ "uncss": "^0.17.3" }, "dependencies": { + "acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "optional": true, + "peer": true + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, "dom-serializer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", - "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "requires": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" } }, @@ -22379,28 +21818,23 @@ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "requires": { "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, "htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -22412,6 +21846,16 @@ "entities": "^2.0.0" } }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "posthtml": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.15.2.tgz", @@ -22429,14 +21873,38 @@ "htmlparser2": "^6.0.0" } }, + "purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", + "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "requires": { + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { "commander": { @@ -22454,49 +21922,45 @@ } }, "htmlparser2": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.5.1.tgz", - "integrity": "sha1-b0L3ZX3RnBP31l3pEYQXOUoL5tA=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "requires": { - "domelementtype": "1", - "domhandler": "2.2", - "domutils": "1.3", - "readable-stream": "1.1" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { "depd": "~1.1.2", "inherits": "2.0.4", - "setprototypeof": "1.1.1", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" } }, "http-signature": { @@ -22580,12 +22044,12 @@ } }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, "import-from": { @@ -22668,12 +22132,6 @@ "through": "^2.3.6" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -22693,21 +22151,6 @@ "supports-color": "^7.1.0" } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -22735,58 +22178,6 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -22798,15 +22189,6 @@ "strip-ansi": "^6.0.1" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22818,6 +22200,16 @@ } } }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", @@ -22881,9 +22273,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-color-stop": { "version": "1.1.0", @@ -23050,12 +22442,12 @@ } }, "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-tostringtag": "^1.0.0" } }, "is-resolvable": { @@ -23063,10 +22455,18 @@ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + }, "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-symbol": { "version": "1.0.3", @@ -23111,6 +22511,14 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -23141,27 +22549,6 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=" - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=" - } - } - }, "jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -23179,13 +22566,6 @@ "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } } }, "jsbn": { @@ -23243,11 +22623,6 @@ "source-map": "~0.6.1" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -23331,27 +22706,6 @@ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "jsonparse": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", - "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=" - }, - "JSONStream": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.0.tgz", - "integrity": "sha1-78Ri1aW8lOwAf0siVxrNf28q4BM=", - "requires": { - "jsonparse": "0.0.5", - "through": "~2.2.7" - }, - "dependencies": { - "through": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", - "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=" - } - } - }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -23452,9 +22806,12 @@ } }, "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } }, "latlon2country": { "version": "1.2.6", @@ -23506,12 +22863,11 @@ } }, "libphonenumber": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/libphonenumber/-/libphonenumber-0.0.10.tgz", - "integrity": "sha1-54u/ZgGYnNCfpDUEdkaI1BeUFIw=", + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/libphonenumber/-/libphonenumber-0.0.9.tgz", + "integrity": "sha1-YuCNsuLJszYL2ISS8uhwTvbErII=", "requires": { - "closure": "1.0.3", - "mocha": "^2.4.5" + "closure": "1.0.3" } }, "libphonenumber-js": { @@ -23525,9 +22881,9 @@ "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==" }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "load-json-file": { "version": "1.1.0", @@ -23624,11 +22980,64 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "loud-rejection": { @@ -23642,9 +23051,13 @@ } }, "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, "lz-string": { "version": "1.4.4", @@ -23775,22 +23188,23 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.47.0" + "mime-db": "1.51.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, "mimic-response": { "version": "2.1.0", @@ -23841,18 +23255,11 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "minimist": "^1.2.5" } }, "mkdirp-classic": { @@ -23861,76 +23268,6 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - }, - "dependencies": { - "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=" - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=" - }, - "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=" - }, - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "requires": { - "inherits": "2", - "minimatch": "0.3" - } - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=" - } - } - }, "modern-normalize": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", @@ -23961,9 +23298,9 @@ "dev": true }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, "nanocolors": { @@ -23992,6 +23329,65 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } } }, "napi-build-utils": { @@ -24029,9 +23425,10 @@ } }, "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true }, "node-emoji": { "version": "1.11.0", @@ -24085,6 +23482,11 @@ "util": "0.10.3" }, "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -24095,15 +23497,33 @@ } } }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + } } } }, @@ -24254,14 +23674,6 @@ "kind-of": "^3.0.3" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -24316,13 +23728,13 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" } }, "object.pick": { @@ -24334,14 +23746,13 @@ } }, "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" } }, "ohauth": { @@ -24370,11 +23781,12 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "opening_hours": { @@ -24417,16 +23829,71 @@ } }, "ora": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", - "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, "requires": { - "chalk": "^2.3.1", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "os-browserify": { @@ -24451,40 +23918,25 @@ "xtend": "~4.0.0" } }, - "osm-polygon-features": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz", - "integrity": "sha1-IK5BEwxIbkmjsqPCtYoUGcSYZ3g=" - }, "osmtogeojson": { - "version": "3.0.0-beta.4", - "resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-3.0.0-beta.4.tgz", - "integrity": "sha512-GwNy2w5JKOplOBspagcNhCDhBRV6Du2BCvcLkaA7nX12U86Dl2Ciw9zs/VzFFTXfyZlaK+7bGCWN2SNlfn/jOA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-1.0.0.tgz", + "integrity": "sha1-pH9X6k96sg8G6daVzA6W5GsTlOA=", "requires": { - "@mapbox/geojson-rewind": "0.4.0", - "@types/geojson": "^1.0.2", - "concat-stream": "2.0.0", - "geojson-numeric": "0.2.1", - "htmlparser2": "3.5.1", - "JSONStream": "0.8.0", - "optimist": "~0.3.5", - "osm-polygon-features": "^0.9.1", - "tiny-osmpbf": "^0.1.0", - "xmldom": "~0.1.16" + "lodash": "~2.2.0" }, "dependencies": { - "@types/geojson": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", - "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", - "optional": true + "lodash": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.2.1.tgz", + "integrity": "sha1-ypNf0UqzwMhyq6zxmLnNpQFECGc=" } } }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "parcel": { "version": "1.12.4", @@ -24572,16 +24024,6 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "commander": { @@ -24589,6 +24031,15 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "fast-glob": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", @@ -24611,16 +24062,6 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "glob-parent": { @@ -24642,6 +24083,40 @@ } } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -24660,6 +24135,11 @@ } } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -24678,16 +24158,26 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -24705,14 +24195,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -24730,13 +24212,6 @@ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "requires": { "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - } } }, "parse-asn1": { @@ -24820,15 +24295,6 @@ "pinkie-promise": "^2.0.0" } }, - "pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", - "requires": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - } - }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -24851,6 +24317,11 @@ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -24918,27 +24389,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -24955,13 +24417,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -24973,14 +24434,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -24994,13 +24447,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25012,14 +24464,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25032,27 +24476,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25065,27 +24500,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25098,27 +24524,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25131,27 +24548,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25167,13 +24575,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25185,14 +24592,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25210,13 +24609,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -25233,14 +24631,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25254,13 +24644,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25272,14 +24661,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25295,13 +24676,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25313,14 +24693,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25338,13 +24710,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25356,14 +24727,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25379,13 +24742,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -25402,14 +24764,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25525,27 +24879,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25560,13 +24905,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25578,14 +24922,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25601,13 +24937,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25619,14 +24954,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25642,13 +24969,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25660,14 +24986,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25682,13 +25000,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25700,14 +25017,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25722,13 +25031,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25740,14 +25048,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25762,13 +25062,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25780,14 +25079,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25803,13 +25094,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25821,14 +25111,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25842,13 +25124,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25860,14 +25141,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25882,13 +25155,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25900,14 +25172,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25923,27 +25187,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25959,13 +25214,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25977,14 +25231,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -26008,13 +25254,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -26026,14 +25271,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -26048,34 +25285,25 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "posthtml": { "version": "0.11.6", @@ -26092,54 +25320,12 @@ "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", "requires": { "htmlparser2": "^3.9.2" - }, - "dependencies": { - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "posthtml-render": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.3.1.tgz", - "integrity": "sha512-eSToKjNLu0FiF76SSGMHjOFXYzAc/CJqi677Sq6hYvcvFCBtD6de/W5l+0IYPf7ypscqAfjCttxvTdMJt5Gj8Q==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==" }, "prebuild-install": { "version": "6.1.3", @@ -26183,32 +25369,9 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", - "requires": { - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "protocol-buffers-schema": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", - "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.1.6.tgz", + "integrity": "sha512-dYjDha0af2vefm6soqnPnFEz2tAzwH/kb+pPoaCohRoPUxFXj+mymkOFgxX7Ylv59TdEr7OzktEizdK7MIMvIw==" }, "psl": { "version": "1.8.0", @@ -26244,44 +25407,14 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "purgecss": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", - "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", + "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", "requires": { - "commander": "^5.0.0", - "glob": "^7.0.0", - "postcss": "7.0.32", - "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + "commander": "^8.0.0", + "glob": "^7.1.7", + "postcss": "^8.3.5", + "postcss-selector-parser": "^6.0.6" } }, "q": { @@ -26446,14 +25579,6 @@ "strip-indent": "^1.0.1" } }, - "redeyed": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", - "integrity": "sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=", - "requires": { - "esprima": "~1.0.4" - } - }, "reduce-css-calc": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", @@ -26503,6 +25628,25 @@ "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "regexp-tree": { @@ -26649,17 +25793,9 @@ } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "requires": { - "protocol-buffers-schema": "^3.3.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "resolve-url": { "version": "0.2.1", @@ -26667,11 +25803,12 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -26834,15 +25971,6 @@ "semver": "^7.3.5" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -26855,9 +25983,9 @@ } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -26866,9 +25994,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -26890,9 +26018,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -26902,14 +26030,14 @@ "integrity": "sha512-F+NGU0UHMBO4Q965tjw7rvieNVjlH6Lqi2emq/Lc9LUURYJbiCzmpi4Cy1OOjjVPtxu0c+NE85LU6968Wko5ZA==" }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "set-blocking": { @@ -26927,16 +26055,6 @@ "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "setimmediate": { @@ -26945,9 +26063,9 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sha.js": { "version": "2.4.11", @@ -26963,23 +26081,6 @@ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=" }, - "sharkdown": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sharkdown/-/sharkdown-0.1.1.tgz", - "integrity": "sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg==", - "requires": { - "cardinal": "~0.4.2", - "minimist": "0.0.5", - "split": "~0.2.10" - }, - "dependencies": { - "minimist": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", - "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=" - } - } - }, "sharp": { "version": "0.28.3", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz", @@ -26996,21 +26097,6 @@ "tunnel-agent": "^0.6.0" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -27040,10 +26126,22 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "dependencies": { + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + } + } }, "signal-exit": { "version": "3.0.3", @@ -27117,22 +26215,6 @@ "ms": "2.0.0" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -27183,6 +26265,11 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -27227,9 +26314,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -27275,20 +26362,31 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" }, - "split": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", - "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", - "requires": { - "through": "2" - } - }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "sprintf-js": { @@ -27348,11 +26446,6 @@ "source-map": "~0.6.1" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -27368,16 +26461,6 @@ "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } } }, "static-module": { @@ -27522,11 +26605,12 @@ } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -27564,13 +26648,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -27587,14 +26670,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -27725,18 +26800,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -27760,31 +26823,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, "postcss-js": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", @@ -27812,22 +26850,6 @@ "postcss-selector-parser": "^6.0.6" } }, - "purgecss": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", - "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", - "requires": { - "commander": "^6.0.0", - "glob": "^7.0.0", - "postcss": "^8.2.1", - "postcss-selector-parser": "^6.0.2" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -27913,7 +26935,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "through2": { "version": "2.0.5", @@ -27942,15 +26965,6 @@ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, - "tiny-osmpbf": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tiny-osmpbf/-/tiny-osmpbf-0.1.0.tgz", - "integrity": "sha1-ColXFxE+vmquNjxL5e76js2vuSc=", - "requires": { - "pbf": "^3.0.4", - "tiny-inflate": "^1.0.2" - } - }, "tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", @@ -27984,11 +26998,6 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=" - }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -28016,6 +27025,65 @@ "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } } }, "to-regex-range": { @@ -28040,22 +27108,12 @@ "jxon": "~2.0.0-beta.5", "optimist": "~0.3.5", "xmldom": "~0.1.17" - }, - "dependencies": { - "concat-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", - "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", - "requires": { - "bops": "0.0.6" - } - } } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "topojson": { "version": "3.0.2", @@ -28143,12 +27201,6 @@ "typescript": "~4.3.4" }, "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -28217,14 +27269,6 @@ "commander": "^8.0.0", "ts-json-schema-generator": "^0.95.0", "typescript-json-schema": "^0.50.1" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - } } }, "tsconfig": { @@ -28359,14 +27403,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -29000,13 +28036,12 @@ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" }, "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -29023,14 +28058,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -29076,6 +28103,13 @@ "requires": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + } } }, "union-find": { @@ -29190,18 +28224,17 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } }, "util-deprecate": { @@ -29401,12 +28434,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29447,15 +28474,6 @@ "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, @@ -29543,12 +28561,6 @@ "yargs-parser": "^20.2.2" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -29565,15 +28577,6 @@ "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, diff --git a/package.json b/package.json index 7e8b959bc..c20b1855a 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "start": "npm run start:prepare && npm-run-all --parallel start:parallel:*", "strt": "npm run start:prepare && npm run start:parallel:parcel", "start:prepare": "ts-node scripts/generateLayerOverview.ts --no-fail && npm run increase-memory", - "start:parallel:parcel": "node --max_old_space_size=12000 $(which parcel) serve *.html UI/** Logic/** assets/*.json assets/svg/* assets/generated/* assets/layers/*/*.svg assets/layers/*/*.jpg assets/layers/*/*.png assets/layers/*/*.css assets/tagRenderings/*.json assets/themes/*/*.svg assets/themes/*/*.css assets/themes/*/*.jpg assets/themes/*/*.png vendor/* vendor/*/*", + "start:parallel:parcel": "parcel serve *.html UI/** Logic/** assets/*.json assets/svg/* assets/generated/* assets/layers/*/*.svg assets/layers/*/*.jpg assets/layers/*/*.png assets/layers/*/*.css assets/tagRenderings/*.json assets/themes/*/*.svg assets/themes/*/*.css assets/themes/*/*.jpg assets/themes/*/*.png vendor/* vendor/*/*", "start:parallel:tailwindcli": "tailwindcss -i index.css -o css/index-tailwind-output.css --watch", "generate:css": "tailwindcss -i index.css -o css/index-tailwind-output.css", "test": "ts-node test/TestAll.ts", @@ -33,23 +33,17 @@ "query:licenses": "ts-node scripts/generateLicenseInfo.ts --query", "generate:report": "cd Docs/Tools && ./compileStats.sh && git commit . -m 'New statistics ands graphs' && git push", "generate:contributor-list": "git log --pretty='%aN' | sort | uniq -c | sort -hr | sed 's/ *\\([0-9]*\\) \\(.*\\)$/{\"contributor\":\"\\2\", \"commits\":\\1}/' | tr '\\n' ',' | sed 's/^/{\"contributors\":[/' | sed 's/,$/]}/' | jq > assets/contributors.json", - "validate:layeroverview": "ts-node scripts/generateLayerOverview.ts --report", - "validate:licenses": "ts-node scripts/generateLicenseInfo.ts --report", "generate:schemas": "ts2json-schema -p Models/ThemeConfig/Json/ -o Docs/Schemas/ -t tsconfig.json -R . -m \".*ConfigJson\" && ts-node scripts/fixSchemas.ts ", "optimize-images": "cd assets/generated/ && find -name '*.png' -exec optipng '{}' \\; && echo 'PNGs are optimized'", "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json", - "generate": "mkdir -p ./assets/generated && npm run reset:layeroverview && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run generate:licenses && npm run validate:layeroverview", + "generate": "mkdir -p ./assets/generated && npm run reset:layeroverview && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run generate:licenses", "build": "npm run generate && ./scripts/build.sh", "generate:charging-stations": "cd ./assets/layers/charging_station && ts-node csvToJson.ts && cd -", "prepare-deploy": "npm run generate && npm run test && npm run generate:editor-layer-index && npm run generate:layouts && npm run build", - "deploy:staging": "npm run prepare-deploy && rm -rf ~/git/pietervdvn.github.io/Staging/* && cp -r dist/* ~/git/pietervdvn.github.io/Staging/ && cd ~/git/pietervdvn.github.io/ && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean", - "deploy:pietervdvn": "cd ~/git/pietervdvn.github.io/ && git pull && cd - && npm run prepare-deploy && rm -rf ~/git/pietervdvn.github.io/MapComplete/* && cp -r dist/* ~/git/pietervdvn.github.io/MapComplete/ && cd ~/git/pietervdvn.github.io/ && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean", - "deploy:production": "cd ~/git/mapcomplete.github.io/ && git pull && cd - && rm -rf ./assets/generated && npm run prepare-deploy && npm run optimize-images && rm -rf ~/git/mapcomplete.github.io/* && cp -r dist/* ~/git/mapcomplete.github.io/ && cd ~/git/mapcomplete.github.io/ && echo \"mapcomplete.osm.be\" > CNAME && git add * && git commit -m 'New MapComplete Version' && git push && cd - && npm run clean && npm run gittag", "gittag": "ts-node scripts/printVersion.ts | bash", "lint": "tslint --project . -c tslint.json '**.ts' ", "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(404\\|index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", - "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot", - "genPostal": " ts-node ./scripts/postal_code_tools/createRoutablePoint.ts /home/pietervdvn/Downloads/postal_codes/postal_codes_town_hall_points.geojson /home/pietervdvn/Downloads/31370/Postcodes.geojson\n" + "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot" }, "keywords": [ "OpenStreetMap", @@ -84,7 +78,7 @@ "leaflet-providers": "^1.13.0", "leaflet-simple-map-screenshoter": "^0.4.4", "leaflet.markercluster": "^1.4.1", - "libphonenumber": "0.0.10", + "libphonenumber": "^0.0.9", "libphonenumber-js": "^1.7.55", "lz-string": "^1.4.4", "mangrove-reviews": "^0.1.3", @@ -92,9 +86,9 @@ "npm-run-all": "^4.1.5", "opening_hours": "^3.6.0", "osm-auth": "^1.0.2", - "osmtogeojson": "^3.0.0-beta.4", + "osmtogeojson": "^1.0.0", "parcel": "^1.2.4", - "prompt-sync": "^4.2.0", + "prompt-sync": "^4.1.6", "tailwindcss": "^2.2.15", "togpx": "^0.5.4", "tslint": "^6.1.3", diff --git a/scripts/build.sh b/scripts/build.sh index 2656520d6..6556cac8b 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -14,7 +14,7 @@ cp -r assets/themes/ dist/assets/themes/ cp -r assets/svg/ dist/assets/svg/ echo "\n\n Building non-theme pages" echo " ==========================\n\n" -parcel build --no-source-maps --public-url ./ "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor +parcel build --no-source-maps "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor echo "\n\n Building theme pages" echo " ======================\n\n" @@ -25,7 +25,7 @@ do echo " ------------ \n\n" # Builds the necessary files for just one theme, e.g. 'bookcases.html' + 'index_bookcases.ts' + supporting file # npm run generate && node --max_old_space_size=12000 $(which parcel) build - parcel build --no-source-maps --public-url ./ "$theme.html" + parcel build --no-source-maps "$theme.html" done # Optimize images From 630bcd8dad171967cd5d75ccc14f502fe15d0866 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 22 Dec 2021 02:30:39 +0100 Subject: [PATCH 11/16] Re-add generate:layeroverview to generate --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c20b1855a..426be1c59 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "generate:schemas": "ts2json-schema -p Models/ThemeConfig/Json/ -o Docs/Schemas/ -t tsconfig.json -R . -m \".*ConfigJson\" && ts-node scripts/fixSchemas.ts ", "optimize-images": "cd assets/generated/ && find -name '*.png' -exec optipng '{}' \\; && echo 'PNGs are optimized'", "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json", - "generate": "mkdir -p ./assets/generated && npm run reset:layeroverview && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run generate:licenses", + "generate": "mkdir -p ./assets/generated && npm run reset:layeroverview && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run generate:licenses && npm run generate:layeroverview", "build": "npm run generate && ./scripts/build.sh", "generate:charging-stations": "cd ./assets/layers/charging_station && ts-node csvToJson.ts && cd -", "prepare-deploy": "npm run generate && npm run test && npm run generate:editor-layer-index && npm run generate:layouts && npm run build", From 6517741f705ecbcf698d139305263de64557f91a Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 22 Dec 2021 14:10:44 +0100 Subject: [PATCH 12/16] readd public-url flag --- scripts/build.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 6556cac8b..0be545123 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -14,7 +14,7 @@ cp -r assets/themes/ dist/assets/themes/ cp -r assets/svg/ dist/assets/svg/ echo "\n\n Building non-theme pages" echo " ==========================\n\n" -parcel build --no-source-maps "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor +parcel build --public-url './' --no-source-maps "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor echo "\n\n Building theme pages" echo " ======================\n\n" @@ -25,8 +25,8 @@ do echo " ------------ \n\n" # Builds the necessary files for just one theme, e.g. 'bookcases.html' + 'index_bookcases.ts' + supporting file # npm run generate && node --max_old_space_size=12000 $(which parcel) build - parcel build --no-source-maps "$theme.html" + parcel build --public-url './' --no-source-maps "$theme.html" done # Optimize images -cd dist/ && find -name '*.png' -exec optipng '{}' \; && echo 'PNGs are optimized' \ No newline at end of file +cd dist/ && find -name '*.png' -exec optipng '{}' \; && echo 'PNGs are optimized' From 220d65ef852c805dcbe8b4a24d72d8a188e8705c Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Wed, 22 Dec 2021 23:50:43 +0100 Subject: [PATCH 13/16] Small fixes and cleanup of package scripts --- UI/Professional.ts | 34 ---------------------------------- UI/ProfessionalGui.ts | 2 +- package.json | 3 +-- scripts/build.sh | 24 +++++++++++++----------- 4 files changed, 15 insertions(+), 48 deletions(-) delete mode 100644 UI/Professional.ts diff --git a/UI/Professional.ts b/UI/Professional.ts deleted file mode 100644 index 9d6d6edeb..000000000 --- a/UI/Professional.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {FixedUiElement} from "./Base/FixedUiElement"; -import Combine from "./Base/Combine"; -import MoreScreen from "./BigComponents/MoreScreen"; -import Translations from "./i18n/Translations"; -import Constants from "../Models/Constants"; -import UserRelatedState from "../Logic/State/UserRelatedState"; -import {Utils} from "../Utils"; -import LanguagePicker from "./LanguagePicker"; -import IndexText from "./BigComponents/IndexText"; -import FeaturedMessage from "./BigComponents/FeaturedMessage"; - -export default class Professional { - constructor() { - new FixedUiElement("").AttachTo("centermessage") - - const state = new UserRelatedState(undefined); - const intro = new Combine([ - LanguagePicker.CreateLanguagePicker(Translations.t.index.title.SupportedLanguages()) - .SetClass("absolute top-2 right-3"), - new IndexText() - ]); - new Combine([ - intro, - new FeaturedMessage(), - new MoreScreen(state, true), - Translations.t.general.aboutMapcomplete - .Subs({"osmcha_link": Utils.OsmChaLinkFor(7)}) - .SetClass("link-underline"), - new FixedUiElement("v" + Constants.vNumber) - ]).SetClass("block m-5 lg:w-3/4 lg:ml-40") - .SetStyle("pointer-events: all;") - .AttachTo("topleft-tools"); - } -} \ No newline at end of file diff --git a/UI/ProfessionalGui.ts b/UI/ProfessionalGui.ts index 4e305c524..e6f4476ef 100644 --- a/UI/ProfessionalGui.ts +++ b/UI/ProfessionalGui.ts @@ -97,7 +97,7 @@ export default class ProfessionalGui { Svg.back_svg().SetStyle("height: 1.5rem;"), t.backToMapcomplete, { - url: window.location.host + "/index.html" + url: "./index.html" } )]).SetClass("block") diff --git a/package.json b/package.json index 426be1c59..683c991a6 100644 --- a/package.json +++ b/package.json @@ -37,9 +37,8 @@ "optimize-images": "cd assets/generated/ && find -name '*.png' -exec optipng '{}' \\; && echo 'PNGs are optimized'", "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json", "generate": "mkdir -p ./assets/generated && npm run reset:layeroverview && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run generate:licenses && npm run generate:layeroverview", - "build": "npm run generate && ./scripts/build.sh", "generate:charging-stations": "cd ./assets/layers/charging_station && ts-node csvToJson.ts && cd -", - "prepare-deploy": "npm run generate && npm run test && npm run generate:editor-layer-index && npm run generate:layouts && npm run build", + "prepare-deploy": "./scripts/build.sh", "gittag": "ts-node scripts/printVersion.ts | bash", "lint": "tslint --project . -c tslint.json '**.ts' ", "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(404\\|index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", diff --git a/scripts/build.sh b/scripts/build.sh index 6556cac8b..c6a8f0988 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -8,25 +8,27 @@ rm -rf .cache mkdir dist 2> /dev/null mkdir dist/assets 2> /dev/null +npm run generate +npm run test +npm run generate:editor-layer-index +npm run generate:layouts + # Copy the layer files, as these might contain assets (e.g. svgs) cp -r assets/layers/ dist/assets/layers/ cp -r assets/themes/ dist/assets/themes/ cp -r assets/svg/ dist/assets/svg/ -echo "\n\n Building non-theme pages" -echo " ==========================\n\n" -parcel build --no-source-maps "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor -echo "\n\n Building theme pages" -echo " ======================\n\n" +echo -e "\n\n Building non-theme pages" +echo -e " ==========================\n\n" +parcel build --public-url "./" --no-source-maps "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor +echo -e "\n\n Building theme pages" +echo -e " ======================\n\n" for file in $(ls index_*.ts) do theme=${file:6:-3} - echo "\n\n $theme" - echo " ------------ \n\n" + echo -e "\n\n $theme" + echo -e " ------------ \n\n" # Builds the necessary files for just one theme, e.g. 'bookcases.html' + 'index_bookcases.ts' + supporting file # npm run generate && node --max_old_space_size=12000 $(which parcel) build - parcel build --no-source-maps "$theme.html" + parcel build --public-url "./" --no-source-maps "$theme.html" done - -# Optimize images -cd dist/ && find -name '*.png' -exec optipng '{}' \; && echo 'PNGs are optimized' \ No newline at end of file From a3c6ac05df522ee956746a774a177fd415df5031 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 23 Dec 2021 00:15:09 +0100 Subject: [PATCH 14/16] Fix build script --- scripts/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 661af3b30..605a678ee 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -19,7 +19,7 @@ cp -r assets/themes/ dist/assets/themes/ cp -r assets/svg/ dist/assets/svg/ echo -e "\n\n Building non-theme pages" echo -e " ==========================\n\n" -<<<<<<< HEAD +parcel build --public-url "./" --no-source-maps "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor echo -e "\n\n Building theme pages" echo -e " ======================\n\n" @@ -31,4 +31,4 @@ do # Builds the necessary files for just one theme, e.g. 'bookcases.html' + 'index_bookcases.ts' + supporting file # npm run generate && node --max_old_space_size=12000 $(which parcel) build parcel build --public-url './' --no-source-maps "$theme.html" -done +done \ No newline at end of file From c8ba8a2c362f753186a15e0ae4c7be8183f17825 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 23 Dec 2021 14:37:17 +0100 Subject: [PATCH 15/16] Small fix to build script --- scripts/build.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/scripts/build.sh b/scripts/build.sh index 605a678ee..9d8f67a3f 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,5 +1,5 @@ #! /bin/bash - +: ' echo "Starting build.Should" # The build script; we build the application step by step as building everything at once takes too much RAM # Should be run from the repository root @@ -31,4 +31,13 @@ do # Builds the necessary files for just one theme, e.g. 'bookcases.html' + 'index_bookcases.ts' + supporting file # npm run generate && node --max_old_space_size=12000 $(which parcel) build parcel build --public-url './' --no-source-maps "$theme.html" +done +' +# At last: a workaround; parcel 1.x borks the link to social images; the public-URL (./) is setup incorrectly, so we fix those +cd dist +echo -e "Fixing social images..." +for file in $(ls *.html) +do + sed -i 's!!!' $file + sed -i 's!!!' $file done \ No newline at end of file From 90e60726212901f90c92f50d9e296ba3951b8855 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 23 Dec 2021 15:06:01 +0100 Subject: [PATCH 16/16] Small fix to build script --- scripts/build.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 9d8f67a3f..e3a0ed08d 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,5 +1,4 @@ #! /bin/bash -: ' echo "Starting build.Should" # The build script; we build the application step by step as building everything at once takes too much RAM # Should be run from the repository root @@ -32,7 +31,6 @@ do # npm run generate && node --max_old_space_size=12000 $(which parcel) build parcel build --public-url './' --no-source-maps "$theme.html" done -' # At last: a workaround; parcel 1.x borks the link to social images; the public-URL (./) is setup incorrectly, so we fix those cd dist echo -e "Fixing social images..."