From 6f5f36118fd0414310e8c7df4de9cef152d1d0fd 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 fa31f6d3b..a76ffae86 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 0a30f4a0b..8dace600f 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 8bf31d6da..c6306aade 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({