1.11.0 Change Notes

TypeScript 3.7.4

iModel.js now compiles with TypeScript 3.7.2. Aside from keeping current, the primary motivations for the upgrade include uncalled function checks and assertion functions.

assert is now an assertion function. This assures the compiler that code following a call to assert will never execute unless the asserted condition is true. Bear in mind that because calls to assert are stripped out of production builds, this assurance is only true in development builds - so reserve use of assert for conditions that are truly never expected to occur, and use ordinary validation and exception handling for other conditions.

api-extractor 7.7.3

Upgrading to TypeScript 3.7.2 necessitated an upgrade to a new version of api-extractor, primarily due to changes to the JavaScript emitted by tsc for property getters and setters. api-extractor now requires that documentation and release tags are applied only to the getter, never the setter. This imposes some constraints which were temporarily relaxed in api-extractor 3.6:

  • Write-only properties (having only a setter, no getter) are rejected.
  • A setter cannot have a different release tag than the corresponding getter.

Module documentation

Upgrading to TypeScript 3.7.2 necessitated an upgrade to typedoc 0.15.1 and v2.1.0 of the typedoc plugin used to support external module declarations. This changes the format of @module comments.

Previous syntax for @module comments:

/** @module ModuleName */

New syntax for @module comments:

/** @packageDocumentation
 * @module ModuleName
 */

Without the @packageDocumentation, the documentation generator will fail to recognize that the source file should be mapped to the ModuleName external module.

Geometry

  • new public methods in RegionOps:
    • RegionOps.sortOuterAndHoleLoopsXY
    • apply parity logic to determine containment of holes in parents (or holes in islands)
    • RegionOps.constructAllXYRegionLoops
      • Compute intersections among unstructured input curves
      • Construct areas bounded by those inputs.
    • RegionOps.curveArrayRange
      • construct range of unstructured array of curves.
    • RegionOps.expandLineStrings
      • In an array of curve primitives, replace each LineString3d with expansion to LineSegment3d
  • (new method) CurveCurve.allIntersectionsAmongPrimitivesXY
    • Supporting changes in CurveCurveIntersectionXY context class.
  • CurveLocationDetail
    • new method to ask if fraction1 is present (i.e. this is an interval rather than single point.
  • Make implementations of CurvePrimitive and CurveCollection methods to collect leaf primitives and strokes more consistent:
    • collectCurvePrimitives method
      • new optional args for (a) preallocated collector, (b) controlling expansion of CurveChainWithDistanceIndex
      • public entry RegionOps.collectCurvePrimitives
      • internal entries in CurveCollection, CurvePrimitive
      • internal "Go" methods in: CurveChainWithDistanceIndex,
    • CurveChain.cloneStroked is abstract (implemented by Path, Loop, CurveChainWithDistanceIndex
  • CurveFactory
    • New method to create xy rectangles with optional fillets.

Last Updated: 02 February, 2022