From a9094e8dcca7ce1428c75d0f0cd40f689ff72613 Mon Sep 17 00:00:00 2001 From: Nanda Date: Fri, 26 Apr 2024 13:29:07 +1000 Subject: [PATCH] More type changes. --- lib/Core/loadArrayBuffer.ts | 2 -- lib/Core/{loadXML.js => loadXML.ts} | 20 ++++++++++--------- lib/Map/Vector/EarthGravityModel1996.js | 2 +- lib/Map/Vector/Reproject.ts | 20 +++++++++++-------- lib/ModelMixins/XmlRequestMixin.ts | 5 ++--- .../Esri/ArcGisMapServerCatalogItem.ts | 2 +- .../Catalog/Ows/WebMapServiceCapabilities.ts | 2 +- .../Ows/WebMapTileServiceCapabilities.ts | 2 +- .../Ows/WebProcessingServiceCapabilities.ts | 4 ++-- ...tureInfo.js => ImageryLayerFeatureInfo.ts} | 14 +++++-------- lib/Models/GlobeOrMap.ts | 2 +- lib/Models/ItemSearchProviders/TextIndex.ts | 5 ++--- lib/Models/{getToken.js => getToken.ts} | 15 +++++++------- package.json | 1 + yarn.lock | 5 +++++ 15 files changed, 53 insertions(+), 48 deletions(-) rename lib/Core/{loadXML.js => loadXML.ts} (51%) rename lib/Models/Feature/{ImageryLayerFeatureInfo.js => ImageryLayerFeatureInfo.ts} (75%) rename lib/Models/{getToken.js => getToken.ts} (75%) diff --git a/lib/Core/loadArrayBuffer.ts b/lib/Core/loadArrayBuffer.ts index 575ef970e8f..b1ca292fffa 100644 --- a/lib/Core/loadArrayBuffer.ts +++ b/lib/Core/loadArrayBuffer.ts @@ -6,5 +6,3 @@ export default function loadArrayBuffer( ): Promise { return Resource.fetchArrayBuffer({ url: urlOrResource, headers: headers })!; } - -module.exports = loadArrayBuffer; diff --git a/lib/Core/loadXML.js b/lib/Core/loadXML.ts similarity index 51% rename from lib/Core/loadXML.js rename to lib/Core/loadXML.ts index 6987ba8f0d5..69a2e8f4383 100644 --- a/lib/Core/loadXML.js +++ b/lib/Core/loadXML.ts @@ -1,8 +1,10 @@ -const Resource = require("terriajs-cesium/Source/Core/Resource").default; +import Resource from "terriajs-cesium/Source/Core/Resource"; -async function loadXML(urlOrResource) { - var resource = Resource.createIfNeeded(urlOrResource); - const respone = await resource.fetchXML(); +async function loadXML( + urlOrResource: string | Resource +): Promise { + var resource = (Resource as any).createIfNeeded(urlOrResource) as Resource; + const response = await resource.fetchXML(); /** * Sometimes Cesium's Resource.fetchXML will return an Array Buffer (usually in Node.js env) @@ -13,17 +15,17 @@ async function loadXML(urlOrResource) { * See full license here https://github.com/fengyuanchen/is-array-buffer/blob/main/LICENSE */ if ( - respone instanceof ArrayBuffer || - toString.call(respone) === "[object ArrayBuffer]" + response instanceof ArrayBuffer || + toString.call(response) === "[object ArrayBuffer]" ) { const enc = new TextDecoder("utf-8"); - const xmlString = enc.decode(respone); + const xmlString = enc.decode(response as any); const parser = new DOMParser(); return parser.parseFromString(xmlString, "text/xml"); } - return respone; + return response; } -module.exports = loadXML; +export default loadXML; diff --git a/lib/Map/Vector/EarthGravityModel1996.js b/lib/Map/Vector/EarthGravityModel1996.js index 01d75defd56..cd301cff88b 100644 --- a/lib/Map/Vector/EarthGravityModel1996.js +++ b/lib/Map/Vector/EarthGravityModel1996.js @@ -2,7 +2,7 @@ var CesiumMath = require("terriajs-cesium/Source/Core/Math").default; var defined = require("terriajs-cesium/Source/Core/defined").default; -var loadArrayBuffer = require("../../Core/loadArrayBuffer"); +var loadArrayBuffer = require("../../Core/loadArrayBuffer").default; /** * The Earth Gravity Model 1996 (EGM96) geoid. diff --git a/lib/Map/Vector/Reproject.ts b/lib/Map/Vector/Reproject.ts index b883042f591..51e505fd528 100644 --- a/lib/Map/Vector/Reproject.ts +++ b/lib/Map/Vector/Reproject.ts @@ -1,9 +1,8 @@ +import proj4 from "proj4"; import defined from "terriajs-cesium/Source/Core/defined"; -import Proj4Definitions from "./Proj4Definitions"; import urijs from "urijs"; - -const proj4 = require("proj4").default; -const loadText = require("../../Core/loadText"); +import loadText from "../../Core/loadText"; +import Proj4Definitions from "./Proj4Definitions"; export default { TERRIA_CRS: "EPSG:4326", @@ -60,16 +59,21 @@ export default { ): [number, number] | undefined { const source = sourceCode in Proj4Definitions - ? new proj4.Proj(Proj4Definitions[sourceCode]) + ? proj4.Proj(Proj4Definitions[sourceCode]) : undefined; const dest = destCode in Proj4Definitions - ? new proj4.Proj(Proj4Definitions[destCode]) + ? proj4.Proj(Proj4Definitions[destCode]) : undefined; - if (!sourceCode || !destCode) { + if (!source || !dest) { return; } - return proj4(source, dest, coordinates); + const result = proj4.transform(source, dest, coordinates) ?? {}; + if (result) { + const { x, y } = result; + return [x, y]; + } + return undefined; }, /** diff --git a/lib/ModelMixins/XmlRequestMixin.ts b/lib/ModelMixins/XmlRequestMixin.ts index 6bd29d3c32a..5f64e01a919 100644 --- a/lib/ModelMixins/XmlRequestMixin.ts +++ b/lib/ModelMixins/XmlRequestMixin.ts @@ -1,9 +1,8 @@ import URI from "urijs"; import AbstractConstructor from "../Core/AbstractConstructor"; import isDefined from "../Core/isDefined"; - -const loadXML = require("../Core/loadXML"); -const loadWithXhr = require("../Core/loadWithXhr"); +import loadWithXhr from "../Core/loadWithXhr"; +import loadXML from "../Core/loadXML"; export default function XmlRequestMixin>( Base: T diff --git a/lib/Models/Catalog/Esri/ArcGisMapServerCatalogItem.ts b/lib/Models/Catalog/Esri/ArcGisMapServerCatalogItem.ts index b91a6c9003f..ff0e1880a8b 100644 --- a/lib/Models/Catalog/Esri/ArcGisMapServerCatalogItem.ts +++ b/lib/Models/Catalog/Esri/ArcGisMapServerCatalogItem.ts @@ -88,7 +88,7 @@ class MapServerStratum extends LoadableStratum( } static async load(item: ArcGisMapServerCatalogItem) { - if (!isDefined(item.uri)) { + if (!isDefined(item.uri) || !isDefined(item.url)) { throw new TerriaError({ title: i18next.t("models.arcGisMapServerCatalogItem.invalidUrlTitle"), message: i18next.t( diff --git a/lib/Models/Catalog/Ows/WebMapServiceCapabilities.ts b/lib/Models/Catalog/Ows/WebMapServiceCapabilities.ts index 205245d6d2e..6ed4896837e 100644 --- a/lib/Models/Catalog/Ows/WebMapServiceCapabilities.ts +++ b/lib/Models/Catalog/Ows/WebMapServiceCapabilities.ts @@ -163,7 +163,7 @@ export default class WebMapServiceCapabilities { createTransformer((url: string) => { return Promise.resolve(loadXML(url)).then(function (capabilitiesXml) { const json = xml2json(capabilitiesXml); - if (!defined(json.Capability)) { + if (!capabilitiesXml || !defined(json.Capability)) { throw networkRequestError({ title: "Invalid GetCapabilities", message: diff --git a/lib/Models/Catalog/Ows/WebMapTileServiceCapabilities.ts b/lib/Models/Catalog/Ows/WebMapTileServiceCapabilities.ts index 4c494292f84..18cb04ff5aa 100644 --- a/lib/Models/Catalog/Ows/WebMapTileServiceCapabilities.ts +++ b/lib/Models/Catalog/Ows/WebMapTileServiceCapabilities.ts @@ -131,7 +131,7 @@ export default class WebMapTileServiceCapabilities { createTransformer((url: string) => { return Promise.resolve(loadXML(url)).then(function (capabilitiesXml) { const json = xml2json(capabilitiesXml); - if (!defined(json.ServiceIdentification)) { + if (!capabilitiesXml || !defined(json.ServiceIdentification)) { throw networkRequestError({ title: i18next.t( "models.webMapTileServiceCatalogGroup.invalidCapabilitiesTitle" diff --git a/lib/Models/Catalog/Ows/WebProcessingServiceCapabilities.ts b/lib/Models/Catalog/Ows/WebProcessingServiceCapabilities.ts index f3c3e3d6d78..bdd8a5fdd05 100644 --- a/lib/Models/Catalog/Ows/WebProcessingServiceCapabilities.ts +++ b/lib/Models/Catalog/Ows/WebProcessingServiceCapabilities.ts @@ -54,7 +54,7 @@ export interface ServiceProvider { export default class WebProcessingServiceCapabilities { constructor( - readonly capabilitiesXml: string, + readonly capabilitiesXml: XMLDocument, readonly capabilities: Capabilities ) {} @@ -62,7 +62,7 @@ export default class WebProcessingServiceCapabilities { return Promise.resolve(loadXML(url)).then(function (capabilitiesXml) { const capabilities = parseCapabilities(xml2json(capabilitiesXml)); - if (capabilities === undefined) { + if (capabilitiesXml === undefined || capabilities === undefined) { throw networkRequestError({ title: i18next.t( "models.webProcessingServiceCatalogGroup.invalidCapabilitiesTitle" diff --git a/lib/Models/Feature/ImageryLayerFeatureInfo.js b/lib/Models/Feature/ImageryLayerFeatureInfo.ts similarity index 75% rename from lib/Models/Feature/ImageryLayerFeatureInfo.js rename to lib/Models/Feature/ImageryLayerFeatureInfo.ts index e9a9b84d4fe..31f6da877bb 100644 --- a/lib/Models/Feature/ImageryLayerFeatureInfo.js +++ b/lib/Models/Feature/ImageryLayerFeatureInfo.ts @@ -1,10 +1,6 @@ -"use strict"; - -var ImageryLayerFeatureInfo = - require("terriajs-cesium/Source/Scene/ImageryLayerFeatureInfo").default; -var defined = require("terriajs-cesium/Source/Core/defined").default; - -var formatPropertyValue = require("../../Core/formatPropertyValue"); +import defined from "terriajs-cesium/Source/Core/defined"; +import ImageryLayerFeatureInfo from "terriajs-cesium/Source/Scene/ImageryLayerFeatureInfo"; +import formatPropertyValue from "../../Core/formatPropertyValue"; /** * Configures the description of this feature by creating an HTML table of properties and their values. @@ -12,8 +8,8 @@ var formatPropertyValue = require("../../Core/formatPropertyValue"); * @param {Object} properties An object literal containing the properties of the feature. */ ImageryLayerFeatureInfo.prototype.configureDescriptionFromProperties = - function (properties) { - function describe(properties) { + function (properties: any) { + function describe(properties: any) { var html = ''; for (var key in properties) { if (Object.prototype.hasOwnProperty.call(properties, key)) { diff --git a/lib/Models/GlobeOrMap.ts b/lib/Models/GlobeOrMap.ts index a50b43e2874..0cf40450d13 100644 --- a/lib/Models/GlobeOrMap.ts +++ b/lib/Models/GlobeOrMap.ts @@ -33,7 +33,7 @@ import createStratumInstance from "./Definition/createStratumInstance"; import TerriaFeature from "./Feature/Feature"; import Terria from "./Terria"; -require("./Feature/ImageryLayerFeatureInfo"); // overrides Cesium's prototype.configureDescriptionFromProperties +import "./Feature/ImageryLayerFeatureInfo"; // overrides Cesium's prototype.configureDescriptionFromProperties export default abstract class GlobeOrMap { abstract readonly type: string; diff --git a/lib/Models/ItemSearchProviders/TextIndex.ts b/lib/Models/ItemSearchProviders/TextIndex.ts index 39dead55b13..88895e3c317 100644 --- a/lib/Models/ItemSearchProviders/TextIndex.ts +++ b/lib/Models/ItemSearchProviders/TextIndex.ts @@ -1,8 +1,7 @@ import MiniSearch, { Options as MiniSearchOptions } from "minisearch"; -import joinUrl from "./joinUrl"; +import loadText from "../../Core/loadText"; import { IndexBase, IndexType } from "./Types"; - -const loadText = require("../../Core/loadText"); +import joinUrl from "./joinUrl"; // Text search query type TextSearchQuery = string; diff --git a/lib/Models/getToken.js b/lib/Models/getToken.ts similarity index 75% rename from lib/Models/getToken.js rename to lib/Models/getToken.ts index 41c0539cf55..7f792bb51a7 100644 --- a/lib/Models/getToken.js +++ b/lib/Models/getToken.ts @@ -1,12 +1,13 @@ -const defined = require("terriajs-cesium/Source/Core/defined").default; -const loadWithXhr = require("../Core/loadWithXhr"); -const TerriaError = require("../Core/TerriaError").default; -var i18next = require("i18next").default; +import defined from "terriajs-cesium/Source/Core/defined"; +import loadWithXhr from "../Core/loadWithXhr"; +import TerriaError from "../Core/TerriaError"; +import i18next from "i18next"; +import Terria from "./Terria"; -function getToken(terria, tokenUrl, url) { +function getToken(terria: Terria, tokenUrl: string, url: string) { const options = { url: tokenUrl, - method: "POST", + method: "POST" as const, headers: { "Content-Type": "application/json" }, data: JSON.stringify({ url: url @@ -48,4 +49,4 @@ function getToken(terria, tokenUrl, url) { }); } -module.exports = getToken; +export default getToken; diff --git a/package.json b/package.json index e5c3d88dac9..9357b0e5570 100644 --- a/package.json +++ b/package.json @@ -199,6 +199,7 @@ "@types/linkify-it": "^3.0.5", "@types/markdown-it": "^14.0.1", "@types/node": "^18.15.11", + "@types/proj4": "^2.5.5", "@types/webpack": "4.41.33", "@typescript-eslint/eslint-plugin": "^6.12.0", "@typescript-eslint/parser": "^6.12.0", diff --git a/yarn.lock b/yarn.lock index 4a85f68382b..6b84bf7eaf5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1867,6 +1867,11 @@ resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.2.tgz#8d291ad68b4b8c533e96c174a2e3e6399a59ed61" integrity sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ== +"@types/proj4@^2.5.5": + version "2.5.5" + resolved "https://registry.yarnpkg.com/@types/proj4/-/proj4-2.5.5.tgz#044d53782dc75f20335577ca3af2643962a56980" + integrity sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA== + "@types/prop-types@*": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"