Skip to content

Commit b4df54b

Browse files
committed
More tests, tweaks
1 parent 9ea5f13 commit b4df54b

14 files changed

+148
-23
lines changed

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ Thumbs.db
1919
/Source/Widgets/
2020
/Source/Cesium.js
2121

22-
types
23-
2422
/Specs/SpecList.js
2523
/Specs/jasmine/**
2624

CHANGES.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ This is an npm-only release to fix a dependency issue published in 1.118
300300

301301
##### Breaking Changes :mega:
302302

303-
- By default, instances of `Cesium3DTileset ` will no longer default to enable collisions for camera collision or for clamping entities. [#11829](https://github.com/CesiumGS/cesium/pull/11829)
303+
- By default, instances of `Cesium3DTileset` will no longer default to enable collisions for camera collision or for clamping entities. [#11829](https://github.com/CesiumGS/cesium/pull/11829)
304304
- This behavior can be enabled by setting `Cesium3DTileset.enableCollision` to true.
305305

306306
##### Additions :tada:
@@ -605,6 +605,7 @@ try {
605605
- `Cesium3DTileset` constructor parameter `options.url`, `Cesium3DTileset.ready`, and `Cesium3DTileset.readyPromise` have been removed. Use `Cesium3DTileset.fromUrl` instead.
606606
- `createOsmBuildings` was removed. Use `createOsmBuildingsAsync` instead.
607607
- `Model.fromGltf`, `Model.readyPromise`, and `Model.texturesLoadedPromise` have been removed. Use `Model.fromGltfAsync`, `Model.readyEvent`, `Model.errorEvent`, and `Model.texturesReadyEvent` instead. For example:
608+
608609
```js
609610
try {
610611
const model = await Cesium.Model.fromGltfAsync({
@@ -618,6 +619,7 @@ try {
618619
console.log(`Failed to load model. ${error}`);
619620
}
620621
```
622+
621623
- `I3SDataProvider` construction parameter `options.url`, `I3SDataProvider.ready`, and `I3SDataProvider.readyPromise` have been removed. Use `I3SDataProvider.fromUrl` instead.
622624
- `TimeDynamicPointCloud.readyPromise` was removed. Use `TimeDynamicPointCloud.frameFailed` to track any errors.
623625
- `VoxelProvider.ready` and `VoxelProvider.readyPromise` have been removed.
@@ -789,6 +791,7 @@ try {
789791
- `Cesium3DTileset` constructor parameter `options.url`, `Cesium3DTileset.ready`, and `Cesium3DTileset.readyPromise` were deprecated in CesiumJS 1.104. They will be removed in 1.107. Use `Cesium3DTileset.fromUrl` instead.
790792
- `createOsmBuildings` was deprecated in CesiumJS 1.104. It will be removed in 1.107. Use `createOsmBuildingsAsync` instead.
791793
- `Model.fromGltf`, `Model.readyPromise`, and `Model.texturesLoadedPromise` were deprecated in CesiumJS 1.104. They will be removed in 1.107. Use `Model.fromGltfAsync`, `Model.readyEvent`, `Model.errorEvent`, and `Model.texturesReadyEvent` instead. For example:
794+
792795
```js
793796
try {
794797
const model = await Cesium.Model.fromGltfAsync({
@@ -802,6 +805,7 @@ try {
802805
console.log(`Failed to load model. ${error}`);
803806
}
804807
```
808+
805809
- `I3SDataProvider` construction parameter `options.url`, `I3SDataProvider.ready`, and `I3SDataProvider.readyPromise` were deprecated in CesiumJS 1.104. They will be removed in 1.107. Use `I3SDataProvider.fromUrl` instead.
806810
- `TimeDynamicPointCloud.readyPromise` was deprecated in CesiumJS 1.104. It will be removed in 1.107. Use `TimeDynamicPointCloud.frameFailed` to track any errors.
807811
- `VoxelProvider.ready` and `VoxelProvider.readyPromise` were deprecated in CesiumJS 1.104. They will be removed in 1.107.
@@ -851,9 +855,11 @@ try {
851855
#### Major Announcements :loudspeaker:
852856

853857
- CesiumJS now defaults to using a WebGL2 context for rendering. WebGL2 is widely supported on all platforms and this results in better feature support across devices, especially mobile.
858+
854859
- WebGL1 is supported. If WebGL2 is not available, CesiumJS will automatically fall back to WebGL1.
855860
- In order to work in a WebGL2 context, any custom materials, custom primitives or custom shaders will need to be upgraded to use GLSL 300.
856861
- Otherwise to request a WebGL 1 context, set `requestWebgl1` to `true` when providing `ContextOptions` as shown below:
862+
857863
```js
858864
const viewer = new Viewer("cesiumContainer", {
859865
contextOptions: {
@@ -880,9 +886,11 @@ try {
880886
#### Major Announcements :loudspeaker:
881887

882888
- Starting with version 1.102, CesiumJS will default to using a WebGL2 context for rendering. WebGL2 is widely supported on all platforms and this change will result in better feature support across devices, especially mobile.
889+
883890
- WebGL1 will still be supported. If WebGL2 is not available, CesiumJS will automatically fall back to WebGL1.
884891
- In order to work in a WebGL2 context, any custom materials, custom primitive or custom shaders will need to be upgraded to use GLSL 300.
885892
- Otherwise to request a WebGL 1 context, set `requestWebgl1` to `true` when providing `ContextOptions` as shown below:
893+
886894
```js
887895
const viewer = new Viewer("cesiumContainer", {
888896
contextOptions: {
@@ -2259,12 +2267,15 @@ _This is an npm-only release to fix a publishing issue_.
22592267
##### Breaking Changes :mega:
22602268

22612269
- Clipping planes on tilesets now use the root tile's transform, or the root tile's bounding sphere if a transform is not defined. [#7034](https://github.com/CesiumGS/cesium/pull/7034)
2270+
22622271
- This is to make clipping planes' coordinates always relative to the object they're attached to. So if you were positioning the clipping planes as in the example below, this is no longer necessary:
2272+
22632273
```javascript
22642274
clippingPlanes.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
22652275
tileset.boundingSphere.center,
22662276
);
22672277
```
2278+
22682279
- This also fixes several issues with clipping planes not using the correct transform for tilesets with children.
22692280

22702281
##### Additions :tada:
@@ -2501,6 +2512,7 @@ _This is an npm-only release to fix a publishing issue_.
25012512
- `BingMapsImageryProvider` is no longer the default base imagery layer. (Bing imagery itself is still the default, however it is provided through Cesium ion)
25022513
- `BingMapsGeocoderService` is no longer the default geocoding service.
25032514
- If you wish to continue to use your own Bing API key for imagery and geocoding, you can go back to the old default behavior by constructing the Viewer as follows:
2515+
25042516
```javascript
25052517
Cesium.BingMapsApi.defaultKey = "yourBingKey";
25062518
var viewer = new Cesium.Viewer("cesiumContainer", {
@@ -3364,11 +3376,13 @@ _This is an npm-only release to fix a publishing issue_.
33643376
- Added `VRButton` which is a simple, single-button widget that toggles VR mode. It is off by default. To enable the button, set the `vrButton` option to `Viewer` to `true`. Only Cardboard for mobile is supported. More VR devices will be supported when the WebVR API is more stable.
33653377
- Added `Scene.useWebVR` to switch the scene to use stereoscopic rendering.
33663378
- Cesium now honors `window.devicePixelRatio` on browsers that support the CSS `imageRendering` attribute. This greatly improves performance on mobile devices and high DPI displays by rendering at the browser-recommended resolution. This also reduces bandwidth usage and increases battery life in these cases. To enable the previous behavior, use the following code:
3379+
33673380
```javascript
33683381
if (Cesium.FeatureDetection.supportsImageRenderingPixelated()) {
33693382
viewer.resolutionScale = window.devicePixelRatio;
33703383
}
33713384
```
3385+
33723386
- `GroundPrimitive` now supports batching geometry for better performance.
33733387
- Improved compatibility with glTF KHR_binary_glTF and KHR_materials_common extensions
33743388
- Added `ImageryLayer.getViewableRectangle` to make it easy to get the effective bounds of an imagery layer.
@@ -4008,14 +4022,17 @@ _This is an npm-only release to fix a publishing issue_.
40084022
- `ImageryLayer` properties `alpha`, `brightness`, `contrast`, `hue`, `saturation`, and `gamma` may no longer be functions. If you need to change these values each frame, consider moving your logic to an event handler for `Scene.preRender`.
40094023
- Removed `closeTop` and `closeBottom` options from `RectangleGeometry`.
40104024
- CZML changes:
4025+
40114026
- CZML is now versioned using the <major>.<minor> scheme. For example, any CZML 1.0 implementation will be able to load any 1.<minor> document (with graceful degradation). Major version number increases will be reserved for breaking changes. We fully expect these major version increases to happen, as CZML is still in development, but we wanted to give developers a stable target to work with.
40124027
- A `"1.0"` version string is required to be on the document packet, which is required to be the first packet in a CZML file. Previously the `document` packet was optional; it is now mandatory. The simplest document packet is:
4028+
40134029
```
40144030
{
40154031
"id":"document",
40164032
"version":"1.0"
40174033
}
40184034
```
4035+
40194036
- The `vertexPositions` property has been removed. There is now a `positions` property directly on objects that use it, currently `polyline`, `polygon`, and `wall`.
40204037
- `cone`, `pyramid`, and `vector` have been removed from the core CZML schema. They are now treated as extensions maintained by Analytical Graphics and have been renamed to `agi_conicSensor`, `agi_customPatternSensor`, and `agi_vector` respectively.
40214038
- The `orientation` property has been changed to match Cesium convention. To update existing CZML documents, conjugate the quaternion values.

Source/Cesium.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./Cesium.js";

Specs/TypeScript/tsconfig.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"isolatedModules": true
77
},
88
"include": [
9-
"index.ts",
10-
"../../types/Cesium.d.ts"
9+
"index.ts"
1110
]
1211
}

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
},
3131
"main": "index.cjs",
3232
"module": "./Source/Cesium.js",
33-
"types": "types/Cesium.d.ts",
33+
"types": "Source/Cesium.d.ts",
3434
"exports": {
3535
"./package.json": "./package.json",
3636
"./Source/*": "./Source/*",
@@ -160,5 +160,8 @@
160160
"workspaces": [
161161
"packages/engine",
162162
"packages/widgets"
163-
]
163+
],
164+
"tsd": {
165+
"directory": "Specs/TypeScript"
166+
}
164167
}

packages/engine/Source/Core/Check.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ declare namespace Check {
6363
* @param {*} test The value to test
6464
* @exception {DeveloperError} test must be typeof 'number'
6565
*/
66-
function number(name: string, test: any): asserts test is string;
66+
function number(name: string, test: any): asserts test is number;
6767
namespace number {
6868
/**
6969
* Throws if test is not typeof 'number' and less than limit

packages/engine/Source/Core/EllipsoidTerrainProvider.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ import GeographicTilingScheme from "./GeographicTilingScheme.js";
66
import HeightmapTerrainData from "./HeightmapTerrainData.js";
77
import TerrainProvider from "./TerrainProvider.js";
88

9+
/**
10+
* @typedef {import("./Request").default} Request
11+
* @typedef {import("./TerrainData").default} TerrainData
12+
*/
13+
914
/**
1015
* A very simple {@link TerrainProvider} that produces geometry by tessellating an ellipsoidal
1116
* surface.

packages/engine/Source/Core/TerrainProvider.js

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,23 @@ import DeveloperError from "./DeveloperError.js";
33
import IndexDatatype from "./IndexDatatype.js";
44
import CesiumMath from "./Math.js";
55

6+
/**
7+
* @typedef {import("./Request").default} Request
8+
* @typedef {import("./TerrainData").default} TerrainData
9+
*/
10+
611
/**
712
* Provides terrain or other geometry for the surface of an ellipsoid. The surface geometry is
813
* organized into a pyramid of tiles according to a {@link TilingScheme}. This type describes an
914
* interface and is not intended to be instantiated directly.
1015
*
1116
* @alias TerrainProvider
1217
* @constructor
18+
* @interface
1319
*
1420
* @see EllipsoidTerrainProvider
1521
* @see CesiumTerrainProvider
22+
* @see ArcGISTiledElevationTerrainProvider
1623
* @see VRTheWorldTerrainProvider
1724
* @see GoogleEarthEnterpriseTerrainProvider
1825
*/
@@ -388,7 +395,9 @@ TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap = function (
388395
* pending and the request will be retried later.
389396
*/
390397
TerrainProvider.prototype.requestTileGeometry =
391-
DeveloperError.throwInstantiationError;
398+
/** @type {(x: number, y: number, level: number, request?: Request) => Promise<TerrainData>|undefined} */ (
399+
DeveloperError.throwInstantiationError
400+
);
392401

393402
/**
394403
* Gets the maximum geometric error allowed in a tile at a given level.
@@ -398,7 +407,9 @@ TerrainProvider.prototype.requestTileGeometry =
398407
* @returns {number} The maximum geometric error.
399408
*/
400409
TerrainProvider.prototype.getLevelMaximumGeometricError =
401-
DeveloperError.throwInstantiationError;
410+
/** @type {(level: number) => number} */ (
411+
DeveloperError.throwInstantiationError
412+
);
402413

403414
/**
404415
* Determines whether data for a tile is available to be loaded.
@@ -410,7 +421,9 @@ TerrainProvider.prototype.getLevelMaximumGeometricError =
410421
* @returns {boolean|undefined} Undefined if not supported by the terrain provider, otherwise true or false.
411422
*/
412423
TerrainProvider.prototype.getTileDataAvailable =
413-
DeveloperError.throwInstantiationError;
424+
/** @type {(x: number, y: number, level: number) => boolean|undefined} */ (
425+
DeveloperError.throwInstantiationError
426+
);
414427

415428
/**
416429
* Makes sure we load availability data for a tile
@@ -422,7 +435,10 @@ TerrainProvider.prototype.getTileDataAvailable =
422435
* @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded
423436
*/
424437
TerrainProvider.prototype.loadTileDataAvailability =
425-
DeveloperError.throwInstantiationError;
438+
/** @type {(x: number, y: number, level: number) => undefined|Promise<void>} */ (
439+
DeveloperError.throwInstantiationError
440+
);
441+
426442
export default TerrainProvider;
427443

428444
/**

packages/engine/Source/Core/VRTheWorldTerrainProvider.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ import RuntimeError from "./RuntimeError.js";
1414
import TerrainProvider from "./TerrainProvider.js";
1515
import TileProviderError from "./TileProviderError.js";
1616

17+
/**
18+
* @typedef {import("./Request").default} Request
19+
* @typedef {import("./TerrainData").default} TerrainData
20+
*/
21+
1722
function DataRectangle(rectangle, maxLevel) {
1823
this.rectangle = rectangle;
1924
this.maxLevel = maxLevel;
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { expectAssignable, expectNotAssignable } from "tsd";
2+
import { Check } from "@cesium/engine";
3+
4+
// Verify Check.* asserts expected type
5+
6+
let myVar: string | undefined;
7+
Check.defined("defined", myVar);
8+
expectNotAssignable<undefined>(myVar);
9+
10+
let myString: string | number | undefined;
11+
Check.typeOf.string("string", myString);
12+
expectAssignable<string>(myString);
13+
14+
let myFunc: undefined | string | (() => any);
15+
Check.typeOf.func("function", myFunc);
16+
expectAssignable<() => any>(myFunc);
17+
18+
let myObject: object | string | undefined;
19+
Check.typeOf.object("object", myObject);
20+
expectAssignable<object>(myObject);
21+
22+
let myBool: boolean | string | undefined;
23+
Check.typeOf.bool("boolean", myBool);
24+
expectAssignable<boolean>(myBool);
25+
26+
let myBigInt: BigInt | string | undefined;
27+
Check.typeOf.number("BigInt", myBigInt);
28+
expectAssignable<BigInt>(myBigInt);
29+
30+
let myNumber: string | number | undefined;
31+
Check.typeOf.number("number", myNumber);
32+
expectAssignable<number>(myNumber);
33+
34+
let myNumberLessThan: string | number | undefined;
35+
Check.typeOf.number.lessThan("lessThan", myNumberLessThan, 100);
36+
expectAssignable<number>(myNumberLessThan);
37+
38+
let myNumberLessThanEquals: string | number | undefined;
39+
Check.typeOf.number.lessThanOrEquals("lessThanEquals", myNumberLessThanEquals, 100);
40+
expectAssignable<number>(myNumberLessThanEquals);
41+
42+
let myNumberGreaterThan: string | number | undefined;
43+
Check.typeOf.number.greaterThan("greaterThan", myNumberGreaterThan, 100);
44+
expectAssignable<number>(myNumberGreaterThan);
45+
46+
let myNumberGreaterThanEquals: string | number | undefined;
47+
Check.typeOf.number.greaterThanOrEquals("greaterThanEquals", myNumberGreaterThanEquals, 100);
48+
expectAssignable<number>(myNumberGreaterThanEquals);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { expectAssignable } from "tsd";
2+
3+
import { ArcGISTiledElevationTerrainProvider, CesiumTerrainProvider, EllipsoidTerrainProvider, GoogleEarthEnterpriseTerrainProvider, Terrain, TerrainProvider, VRTheWorldTerrainProvider } from "@cesium/engine";
4+
5+
// Verify TerrainProvider instances conform to the expected interface
6+
expectAssignable<TerrainProvider>(new ArcGISTiledElevationTerrainProvider());
7+
expectAssignable<TerrainProvider>(new CesiumTerrainProvider());
8+
expectAssignable<TerrainProvider>(new EllipsoidTerrainProvider());
9+
expectAssignable<TerrainProvider>(new VRTheWorldTerrainProvider());
10+
expectAssignable<TerrainProvider>(new GoogleEarthEnterpriseTerrainProvider());
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { expectAssignable } from "tsd";
2+
import { ArcGisMapServerImageryProvider, BingMapsImageryProvider, Color, GoogleEarthEnterpriseImageryProvider, GoogleEarthEnterpriseMapsProvider, GridImageryProvider, ImageryProvider, IonImageryProvider, MapboxImageryProvider, MapboxStyleImageryProvider, OpenStreetMapImageryProvider, SingleTileImageryProvider, TileCoordinatesImageryProvider, TileMapServiceImageryProvider, UrlTemplateImageryProvider, WebMapServiceImageryProvider, WebMapTileServiceImageryProvider } from "@cesium/engine"
3+
4+
// Verify ImageryProvider instances conform to the expected interface
5+
expectAssignable<ImageryProvider>(new WebMapServiceImageryProvider({ url: "", layers: "0" }));
6+
expectAssignable<ImageryProvider>(new ArcGisMapServerImageryProvider());
7+
expectAssignable<ImageryProvider>(new BingMapsImageryProvider({ key: "" }));
8+
expectAssignable<ImageryProvider>(new OpenStreetMapImageryProvider({ url: "" }));
9+
expectAssignable<ImageryProvider>(new TileMapServiceImageryProvider());
10+
expectAssignable<ImageryProvider>(new GridImageryProvider({
11+
tileWidth: 256,
12+
tileHeight: 256,
13+
color: new Color(1.0, 1.0, 1.0, 0.4),
14+
}));
15+
expectAssignable<ImageryProvider>(new IonImageryProvider());
16+
expectAssignable<ImageryProvider>(new MapboxImageryProvider({ mapId: "", accessToken: "" }));
17+
expectAssignable<ImageryProvider>(new MapboxStyleImageryProvider({
18+
styleId: "",
19+
accessToken: "",
20+
}));
21+
expectAssignable<ImageryProvider>(new SingleTileImageryProvider({ url: "" }));
22+
expectAssignable<ImageryProvider>(new TileCoordinatesImageryProvider());
23+
expectAssignable<ImageryProvider>(new UrlTemplateImageryProvider({ url: "" }));
24+
expectAssignable<ImageryProvider>(new WebMapServiceImageryProvider({ url: "", layers: "" }));
25+
expectAssignable<ImageryProvider>(new GoogleEarthEnterpriseImageryProvider());
26+
expectAssignable<ImageryProvider>(new GoogleEarthEnterpriseMapsProvider({
27+
channel: 1,
28+
}));
29+
expectAssignable<ImageryProvider>(new WebMapTileServiceImageryProvider({
30+
url: "",
31+
layer: "",
32+
style: "",
33+
tileMatrixSetID: "",
34+
}));

tsconfig.json

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)