From eced2feaa8b4324f09fd7e7b4a9c5ad43114eb52 Mon Sep 17 00:00:00 2001 From: Pascal Barth Date: Tue, 14 Nov 2023 11:55:31 +0100 Subject: [PATCH] Remove lib ogc-parser While updating libs, I had issues with ogc-parser as it is using very outdated dependencies. After checking the GitHub repo, I saw it was kind of staled, so I replaced it with OpenLayers function. I had to add some browser API equivalent to NodeJS in order to achieve this (see first lines of the file) as this is then used under the hood by OpenLayers to parse XMLs --- package-lock.json | 30 ---------------------- package.json | 1 - scripts/check-external-layers-providers.js | 21 ++++++++++----- 3 files changed, 15 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa31f6d3bc..a76ffae865 100644 --- a/package-lock.json +++ b/package-lock.json @@ -76,7 +76,6 @@ "jsdom": "^22.1.0", "mime-types": "^2.1.35", "mocha-junit-reporter": "^2.2.1", - "ogc-parser": "^1.5.0", "prettier": "^3.0.3", "prettier-plugin-jsdoc": "^1.1.1", "rimraf": "^5.0.1", @@ -8221,26 +8220,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ogc-parser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/ogc-parser/-/ogc-parser-1.5.0.tgz", - "integrity": "sha512-JsIKCSmCsET6L2WMqytO1jM9r+dbzUYfGIJr4qq9dy+0DVCGzFSztjFEtUiES/hziqfhG1LgrxPjf/XUwUH9RA==", - "dev": true, - "dependencies": { - "xmldom": "^0.1.27", - "xpath": "^0.0.24" - } - }, - "node_modules/ogc-parser/node_modules/xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", - "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", - "dev": true, - "engines": { - "node": ">=0.1" - } - }, "node_modules/ol": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/ol/-/ol-8.1.0.tgz", @@ -11174,15 +11153,6 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "node_modules/xpath": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.24.tgz", - "integrity": "sha512-xUsra70vEDlxu0T90+qkg/8/KvPPm4KQbh25yMZCpBABBkdQLaOLNsgzRAUax7wlWZt7Ka5Q+itg/TPzzHieVQ==", - "dev": true, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 0a30f4a0be..8dace600f6 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,6 @@ "jsdom": "^22.1.0", "mime-types": "^2.1.35", "mocha-junit-reporter": "^2.2.1", - "ogc-parser": "^1.5.0", "prettier": "^3.0.3", "prettier-plugin-jsdoc": "^1.1.1", "rimraf": "^5.0.1", diff --git a/scripts/check-external-layers-providers.js b/scripts/check-external-layers-providers.js index 8bf31d6da2..c6306aadee 100755 --- a/scripts/check-external-layers-providers.js +++ b/scripts/check-external-layers-providers.js @@ -6,9 +6,7 @@ import writeYamlFile from 'write-yaml-file' import axiosRetry from 'axios-retry' import yargs from 'yargs' import { hideBin } from 'yargs/helpers' -import ogcParser from 'ogc-parser' import { exit } from 'process' - import { transformUrl, isWmsGetCap, @@ -16,6 +14,14 @@ import { isKml, isGpx, } from '@/modules/infobox/utils/external-provider' +import { WMSCapabilities } from "ol/format"; +import WMTSCapabilities from "ol/format/WMTSCapabilities"; +import { JSDOM } from 'jsdom' + +// faking browser support, so that OpenLayers has what it requires to parse XMLs +const dom = new JSDOM() +global.DOMParser = dom.window.DOMParser +global.Node = dom.window.Node const options = yargs(hideBin(process.argv)) .usage('Usage: $0 [options]') @@ -130,20 +136,23 @@ function checkProviderResponse(provider, url, response, result) { } } +const wmsCapParser = new WMSCapabilities() +const wmtsCapParser = new WMTSCapabilities() + function checkProviderResponseContent(provider, url, response, result) { const content = response.data let isValid = true if (isWmsGetCap(content)) { - const capabilities = ogcParser.wms(content) - if (!capabilities || !capabilities.layer) { + const capabilities = wmsCapParser.read(content) + if (!capabilities?.Capability?.Layer?.Layer) { isValid = false console.error(`Invalid provider ${provider}, WMS get Cap parsing failed`) result.invalid_wms.push({ provider: provider, url: url, content: content.slice(0, 50) }) } } else if (isWmtsGetCap(content)) { - const capabilities = ogcParser.wmts(content) - if (!capabilities || !capabilities.layer) { + const capabilities = wmtsCapParser.read(content) + if (!capabilities?.Contents?.Layer) { isValid = false console.error(`Invalid provider ${provider}, WMTS get Cap parsing failed`) result.invalid_wmts.push({