@maptiler/sdk 1.0.11 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/demos/maptiler-sdk.css +1 -1
- package/demos/maptiler-sdk.umd.js +238 -120
- package/demos/mountain.html +67 -0
- package/demos/transform-request.html +81 -0
- package/dist/maptiler-sdk.css +1 -1
- package/dist/maptiler-sdk.d.ts +20 -4
- package/dist/maptiler-sdk.min.mjs +1 -1
- package/dist/maptiler-sdk.mjs +97 -36
- package/dist/maptiler-sdk.mjs.map +1 -1
- package/dist/maptiler-sdk.umd.js +238 -120
- package/dist/maptiler-sdk.umd.js.map +1 -1
- package/dist/maptiler-sdk.umd.min.js +131 -130
- package/package.json +3 -3
- package/readme.md +3 -2
- package/src/Map.ts +41 -40
- package/src/MaptilerGeolocateControl.ts +2 -1
- package/src/MaptilerLogoControl.ts +3 -6
- package/src/config.ts +3 -0
- package/src/index.ts +2 -2
- package/src/language.ts +7 -0
- package/src/tools.ts +74 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maptiler/sdk",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "The Javascript & TypeScript map SDK tailored for MapTiler Cloud",
|
|
5
5
|
"module": "dist/maptiler-sdk.mjs",
|
|
6
6
|
"types": "dist/maptiler-sdk.d.ts",
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
"typescript": "^5.0.4"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@maptiler/client": "^1.
|
|
63
|
+
"@maptiler/client": "^1.5.0",
|
|
64
64
|
"events": "^3.3.0",
|
|
65
65
|
"js-base64": "^3.7.4",
|
|
66
|
-
"maplibre-gl": "3.0.
|
|
66
|
+
"maplibre-gl": "3.0.1",
|
|
67
67
|
"uuid": "^9.0.0"
|
|
68
68
|
}
|
|
69
69
|
}
|
package/readme.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
1
|
<p align="center">
|
|
2
|
+
<a href="https://docs.maptiler.com/sdk-js/">official page →</a><br>
|
|
3
3
|
<img src="images/maptiler-sdk-logo.svg" width="400px">
|
|
4
4
|
</p>
|
|
5
5
|
|
|
@@ -372,11 +372,12 @@ Again, it will only apply `ENGLISH` as the language of this specific map instanc
|
|
|
372
372
|
|
|
373
373
|
The list of supported languages is built-in and can be found [here](src/language.ts). In addition, there are spacial language *flags*:
|
|
374
374
|
- `Language.AUTO` **[DEFAULT]** uses the language defined in the web browser
|
|
375
|
+
- `Language.STYLE_LOCK` to strictly use the language defined in the style. Prevents any further language update
|
|
375
376
|
- `Language.LOCAL` uses the language local to each country
|
|
376
377
|
- `Language.LATIN` uses a default with latin characters
|
|
377
378
|
- `Language.NON_LATIN` uses a default with non-latin characters
|
|
378
379
|
|
|
379
|
-
Whenever a label is not supported in the defined language, it falls back to `Language.
|
|
380
|
+
Whenever a label is not supported in the defined language, it falls back to `Language.LOCAL`.
|
|
380
381
|
|
|
381
382
|
Here is a sample of some compatible languages:
|
|
382
383
|

|
package/src/Map.ts
CHANGED
|
@@ -8,15 +8,13 @@ import type {
|
|
|
8
8
|
MapDataEvent,
|
|
9
9
|
Tile,
|
|
10
10
|
RasterDEMSourceSpecification,
|
|
11
|
-
|
|
12
|
-
MapTerrainEvent,
|
|
11
|
+
RequestTransformFunction,
|
|
13
12
|
} from "maplibre-gl";
|
|
14
|
-
import { v4 as uuidv4 } from "uuid";
|
|
15
13
|
import { ReferenceMapStyle, MapStyleVariant } from "@maptiler/client";
|
|
16
|
-
import { config, SdkConfig } from "./config";
|
|
14
|
+
import { config, MAPTILER_SESSION_ID, SdkConfig } from "./config";
|
|
17
15
|
import { defaults } from "./defaults";
|
|
18
16
|
import { MaptilerLogoControl } from "./MaptilerLogoControl";
|
|
19
|
-
import { enableRTL } from "./tools";
|
|
17
|
+
import { combineTransformRequest, enableRTL } from "./tools";
|
|
20
18
|
import {
|
|
21
19
|
getBrowserLanguage,
|
|
22
20
|
isLanguageSupported,
|
|
@@ -56,8 +54,6 @@ export type StyleSwapOptions = {
|
|
|
56
54
|
transformStyle?: TransformStyleFunction;
|
|
57
55
|
};
|
|
58
56
|
|
|
59
|
-
const MAPTILER_SESSION_ID = uuidv4();
|
|
60
|
-
|
|
61
57
|
export const GeolocationType: {
|
|
62
58
|
POINT: "POINT";
|
|
63
59
|
COUNTRY: "COUNTRY";
|
|
@@ -197,37 +193,7 @@ export class Map extends maplibregl.Map {
|
|
|
197
193
|
...options,
|
|
198
194
|
style,
|
|
199
195
|
maplibreLogo: false,
|
|
200
|
-
|
|
201
|
-
transformRequest: (url: string) => {
|
|
202
|
-
let reqUrl = null;
|
|
203
|
-
|
|
204
|
-
try {
|
|
205
|
-
// The URL is expected to be absolute.
|
|
206
|
-
// Yet, if it's local we just return it without assuming a 'base' url (in the URL constructor)
|
|
207
|
-
// and we let the URL be locally resolved with a potential base path.
|
|
208
|
-
reqUrl = new URL(url);
|
|
209
|
-
} catch (e) {
|
|
210
|
-
return {
|
|
211
|
-
url,
|
|
212
|
-
headers: {},
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
if (reqUrl.host === defaults.maptilerApiHost) {
|
|
217
|
-
if (!reqUrl.searchParams.has("key")) {
|
|
218
|
-
reqUrl.searchParams.append("key", config.apiKey);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
if (config.session) {
|
|
222
|
-
reqUrl.searchParams.append("mtsid", MAPTILER_SESSION_ID);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
return {
|
|
227
|
-
url: reqUrl.href,
|
|
228
|
-
headers: {},
|
|
229
|
-
};
|
|
230
|
-
},
|
|
196
|
+
transformRequest: combineTransformRequest(options.transformRequest),
|
|
231
197
|
});
|
|
232
198
|
|
|
233
199
|
this.primaryLanguage = options.language ?? config.primaryLanguage;
|
|
@@ -384,7 +350,11 @@ export class Map extends maplibregl.Map {
|
|
|
384
350
|
|
|
385
351
|
// if attribution in option is `false` but the the logo shows up in the tileJson, then the attribution must show anyways
|
|
386
352
|
if (options.attributionControl === false) {
|
|
387
|
-
this.addControl(
|
|
353
|
+
this.addControl(
|
|
354
|
+
new AttributionControl({
|
|
355
|
+
customAttribution: options.customAttribution,
|
|
356
|
+
})
|
|
357
|
+
);
|
|
388
358
|
}
|
|
389
359
|
} else if (options.maptilerLogo) {
|
|
390
360
|
this.addControl(new MaptilerLogoControl(), options.logoPosition);
|
|
@@ -586,6 +556,13 @@ export class Map extends maplibregl.Map {
|
|
|
586
556
|
* @param language
|
|
587
557
|
*/
|
|
588
558
|
setPrimaryLanguage(language: LanguageString = defaults.primaryLanguage) {
|
|
559
|
+
if (this.primaryLanguage === Language.STYLE_LOCK) {
|
|
560
|
+
console.warn(
|
|
561
|
+
"The language cannot be changed because this map has been instantiated with the STYLE_LOCK language flag."
|
|
562
|
+
);
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
|
|
589
566
|
if (!isLanguageSupported(language as string)) {
|
|
590
567
|
return;
|
|
591
568
|
}
|
|
@@ -617,7 +594,7 @@ export class Map extends maplibregl.Map {
|
|
|
617
594
|
"case",
|
|
618
595
|
["has", langStr],
|
|
619
596
|
["get", langStr],
|
|
620
|
-
["get", "name
|
|
597
|
+
["get", "name"],
|
|
621
598
|
];
|
|
622
599
|
|
|
623
600
|
for (let i = 0; i < layers.length; i += 1) {
|
|
@@ -751,6 +728,14 @@ export class Map extends maplibregl.Map {
|
|
|
751
728
|
* @param language
|
|
752
729
|
*/
|
|
753
730
|
setSecondaryLanguage(language: LanguageString = defaults.secondaryLanguage) {
|
|
731
|
+
// Using the lock flag as a primaty language also applies to the secondary
|
|
732
|
+
if (this.primaryLanguage === Language.STYLE_LOCK) {
|
|
733
|
+
console.warn(
|
|
734
|
+
"The language cannot be changed because this map has been instantiated with the STYLE_LOCK language flag."
|
|
735
|
+
);
|
|
736
|
+
return;
|
|
737
|
+
}
|
|
738
|
+
|
|
754
739
|
if (!isLanguageSupported(language as string)) {
|
|
755
740
|
return;
|
|
756
741
|
}
|
|
@@ -1192,4 +1177,20 @@ export class Map extends maplibregl.Map {
|
|
|
1192
1177
|
getMaptilerSessionId(): string {
|
|
1193
1178
|
return MAPTILER_SESSION_ID;
|
|
1194
1179
|
}
|
|
1180
|
+
|
|
1181
|
+
/**
|
|
1182
|
+
* Updates the requestManager's transform request with a new function.
|
|
1183
|
+
*
|
|
1184
|
+
* @param transformRequest A callback run before the Map makes a request for an external URL. The callback can be used to modify the url, set headers, or set the credentials property for cross-origin requests.
|
|
1185
|
+
* Expected to return an object with a `url` property and optionally `headers` and `credentials` properties
|
|
1186
|
+
*
|
|
1187
|
+
* @returns {Map} `this`
|
|
1188
|
+
*
|
|
1189
|
+
* @example
|
|
1190
|
+
* map.setTransformRequest((url: string, resourceType: string) => {});
|
|
1191
|
+
*/
|
|
1192
|
+
setTransformRequest(transformRequest: RequestTransformFunction) {
|
|
1193
|
+
super.setTransformRequest(combineTransformRequest(transformRequest));
|
|
1194
|
+
return this;
|
|
1195
|
+
}
|
|
1195
1196
|
}
|
|
@@ -5,6 +5,7 @@ import { DOMcreate } from "./tools";
|
|
|
5
5
|
|
|
6
6
|
const Marker = maplibregl.Marker;
|
|
7
7
|
const LngLat = maplibregl.LngLat;
|
|
8
|
+
const LngLatBounds = maplibregl.LngLatBounds;
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* The MaptilerGeolocateControl is an extension of the original GeolocateControl
|
|
@@ -40,7 +41,7 @@ export class MaptilerGeolocateControl extends GeolocateControl {
|
|
|
40
41
|
options.zoom = currentMapZoom;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
this._map.fitBounds(
|
|
44
|
+
this._map.fitBounds(LngLatBounds.fromLngLat(center, radius), options, {
|
|
44
45
|
geolocateSource: true, // tag this camera change so it won't cause the control to change to background state
|
|
45
46
|
});
|
|
46
47
|
|
|
@@ -43,13 +43,10 @@ export class MaptilerLogoControl extends LogoControl {
|
|
|
43
43
|
anchor.style.height = "30px";
|
|
44
44
|
|
|
45
45
|
anchor.target = "_blank";
|
|
46
|
-
anchor.rel = "noopener
|
|
46
|
+
anchor.rel = "noopener";
|
|
47
47
|
anchor.href = this.linkURL;
|
|
48
|
-
anchor.setAttribute(
|
|
49
|
-
|
|
50
|
-
this._map._getUIString("LogoControl.Title")
|
|
51
|
-
);
|
|
52
|
-
anchor.setAttribute("rel", "noopener nofollow");
|
|
48
|
+
anchor.setAttribute("aria-label", "MapTiler logo");
|
|
49
|
+
anchor.setAttribute("rel", "noopener");
|
|
53
50
|
this._container.appendChild(anchor);
|
|
54
51
|
this._container.style.display = "block";
|
|
55
52
|
|
package/src/config.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import EventEmitter from "events";
|
|
2
2
|
import { Language, LanguageString } from "./language";
|
|
3
3
|
import { config as clientConfig, FetchFunction } from "@maptiler/client";
|
|
4
|
+
import { v4 as uuidv4 } from "uuid";
|
|
4
5
|
import { Unit } from "./unit";
|
|
5
6
|
|
|
7
|
+
export const MAPTILER_SESSION_ID = uuidv4();
|
|
8
|
+
|
|
6
9
|
/**
|
|
7
10
|
* Configuration class for the SDK
|
|
8
11
|
*/
|
package/src/index.ts
CHANGED
|
@@ -11,7 +11,7 @@ export * from "maplibre-gl";
|
|
|
11
11
|
import maplibregl from "maplibre-gl";
|
|
12
12
|
|
|
13
13
|
const {
|
|
14
|
-
supported,
|
|
14
|
+
// supported,
|
|
15
15
|
setRTLTextPlugin,
|
|
16
16
|
getRTLTextPluginStatus,
|
|
17
17
|
LngLat,
|
|
@@ -50,7 +50,7 @@ const FullscreenControlMLGL = maplibregl.FullscreenControl;
|
|
|
50
50
|
const TerrainControlMLGL = maplibregl.TerrainControl;
|
|
51
51
|
|
|
52
52
|
export {
|
|
53
|
-
supported,
|
|
53
|
+
// supported,
|
|
54
54
|
setRTLTextPlugin,
|
|
55
55
|
getRTLTextPluginStatus,
|
|
56
56
|
PopupMLGL,
|
package/src/language.ts
CHANGED
|
@@ -7,6 +7,13 @@ const Language = {
|
|
|
7
7
|
*/
|
|
8
8
|
AUTO: "auto",
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* STYLE is a custom flag to keep the language of the map as defined into the style.
|
|
12
|
+
* If STYLE is set in the constructor, then further modification of the language
|
|
13
|
+
* with `.setLanguage()` is not possible.
|
|
14
|
+
*/
|
|
15
|
+
STYLE_LOCK: "style_lock",
|
|
16
|
+
|
|
10
17
|
/**
|
|
11
18
|
* Default fallback languages that uses latin charaters
|
|
12
19
|
*/
|
package/src/tools.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import maplibregl from "maplibre-gl";
|
|
2
|
+
import type {
|
|
3
|
+
RequestParameters,
|
|
4
|
+
ResourceType,
|
|
5
|
+
RequestTransformFunction,
|
|
6
|
+
} from "maplibre-gl";
|
|
2
7
|
import { defaults } from "./defaults";
|
|
8
|
+
import { config } from "./config";
|
|
9
|
+
import { MAPTILER_SESSION_ID } from "./config";
|
|
3
10
|
|
|
4
11
|
export function enableRTL() {
|
|
5
12
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -43,3 +50,70 @@ export function DOMremove(node: HTMLElement) {
|
|
|
43
50
|
node.parentNode.removeChild(node);
|
|
44
51
|
}
|
|
45
52
|
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* This function is meant to be used as transformRequest by any Map instance created.
|
|
56
|
+
* It adds the session ID as well as the MapTiler Cloud key from the config to all the requests
|
|
57
|
+
* performed on MapTiler Cloud servers.
|
|
58
|
+
* @param url
|
|
59
|
+
* @param resourceType
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
export function maptilerCloudTransformRequest(
|
|
63
|
+
url: string,
|
|
64
|
+
resourceType?: ResourceType
|
|
65
|
+
): RequestParameters {
|
|
66
|
+
let reqUrl = null;
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
// The URL is expected to be absolute.
|
|
70
|
+
// Yet, if it's local we just return it without assuming a 'base' url (in the URL constructor)
|
|
71
|
+
// and we let the URL be locally resolved with a potential base path.
|
|
72
|
+
reqUrl = new URL(url);
|
|
73
|
+
} catch (e) {
|
|
74
|
+
return {
|
|
75
|
+
url,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (reqUrl.host === defaults.maptilerApiHost) {
|
|
80
|
+
if (!reqUrl.searchParams.has("key")) {
|
|
81
|
+
reqUrl.searchParams.append("key", config.apiKey);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (config.session) {
|
|
85
|
+
reqUrl.searchParams.append("mtsid", MAPTILER_SESSION_ID);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return {
|
|
90
|
+
url: reqUrl.href,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* This combines a user-defined tranformRequest function (optionnal)
|
|
96
|
+
* with the MapTiler Cloud-specific one: maptilerCloudTransformRequest
|
|
97
|
+
* @param userDefinedRTF
|
|
98
|
+
* @returns
|
|
99
|
+
*/
|
|
100
|
+
export function combineTransformRequest(
|
|
101
|
+
userDefinedRTF: RequestTransformFunction = null
|
|
102
|
+
): RequestTransformFunction {
|
|
103
|
+
return function (
|
|
104
|
+
url: string,
|
|
105
|
+
resourceType?: ResourceType
|
|
106
|
+
): RequestParameters {
|
|
107
|
+
if (userDefinedRTF) {
|
|
108
|
+
const rp = userDefinedRTF(url, resourceType);
|
|
109
|
+
const rp2 = maptilerCloudTransformRequest(rp.url);
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
...rp,
|
|
113
|
+
...rp2,
|
|
114
|
+
};
|
|
115
|
+
} else {
|
|
116
|
+
return maptilerCloudTransformRequest(url);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|