@math.gl/core 5.0.0-alpha.19 → 5.0.0-alpha.20

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.
Files changed (38) hide show
  1. package/APACHE-2.0-LICENSE.txt +55 -0
  2. package/ARROW-NOTICE.txt +18 -0
  3. package/LICENSE +146 -44
  4. package/README.md +5 -0
  5. package/THIRD-PARTY-NOTICES.md +16 -0
  6. package/dist/classes/euler.d.ts.map +1 -1
  7. package/dist/classes/euler.js +2 -0
  8. package/dist/classes/euler.js.map +1 -1
  9. package/dist/expressions/function-registry.d.ts.map +1 -1
  10. package/dist/expressions/function-registry.js +9 -1
  11. package/dist/expressions/function-registry.js.map +1 -1
  12. package/dist/expressions/get.js +1 -1
  13. package/dist/expressions/get.js.map +1 -1
  14. package/dist/expressions/index.cjs +12 -4
  15. package/dist/expressions/index.cjs.map +1 -1
  16. package/dist/expressions/parse-expression-string.js +3 -3
  17. package/dist/expressions/parse-expression-string.js.map +1 -1
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/spheroid.cjs +34 -57
  20. package/dist/spheroid.cjs.map +1 -1
  21. package/dist/spheroid.d.ts +1 -1
  22. package/dist/spheroid.d.ts.map +1 -1
  23. package/dist/spheroid.js +53 -64
  24. package/dist/spheroid.js.map +1 -1
  25. package/dist/types/bigint.d.ts +1 -1
  26. package/dist/types/bigint.d.ts.map +1 -1
  27. package/dist/types/bigint.js +21 -4
  28. package/dist/types/bigint.js.map +1 -1
  29. package/dist/types/bounds-types.js +1 -1
  30. package/dist/types/bounds-types.js.map +1 -1
  31. package/package.json +7 -3
  32. package/src/classes/euler.ts +2 -0
  33. package/src/expressions/function-registry.ts +9 -1
  34. package/src/expressions/get.ts +1 -1
  35. package/src/expressions/parse-expression-string.ts +3 -3
  36. package/src/spheroid.ts +62 -85
  37. package/src/types/bigint.ts +22 -4
  38. package/src/types/bounds-types.ts +1 -1
package/dist/spheroid.cjs CHANGED
@@ -23,10 +23,11 @@ __export(spheroid_exports, {
23
23
  spheroidToCartesian: () => spheroidToCartesian
24
24
  });
25
25
  module.exports = __toCommonJS(spheroid_exports);
26
+ var EPSILON = Number.EPSILON;
26
27
  function spheroidToCartesian(point, geometry, result = point) {
27
28
  const longitude = point.x, latitude = point.y, height = point.z;
28
29
  const { semiMajorAxis: a, semiMinorAxis: b, eccentricitySquared: es } = geometry;
29
- const sin = Math.sin(latitude), cos = Math.cos(latitude);
30
+ const sin = Math.sin(latitude), cos = Math.abs(latitude) === Math.PI / 2 ? 0 : Math.cos(latitude);
30
31
  const ratio = b / a;
31
32
  const radius = es < 0.9 ? a / Math.sqrt(1 - es * sin * sin) : a / Math.hypot(cos, ratio * sin);
32
33
  const x = (radius + height) * cos * Math.cos(longitude);
@@ -37,18 +38,19 @@ function spheroidToCartesian(point, geometry, result = point) {
37
38
  function cartesianToSpheroid(point, geometry, result = point) {
38
39
  const x = point.x, y = point.y, z = point.z;
39
40
  const { semiMajorAxis: a, semiMinorAxis: b, eccentricitySquared: es } = geometry;
41
+ const longitude = Math.atan2(y, x);
40
42
  const p = Math.hypot(x, y), rr = Math.hypot(x, y, z);
41
43
  if (!(rr > 0) || !Number.isFinite(rr))
42
44
  return false;
43
45
  if (es === 0)
44
- return commit(result, p === 0 ? 0 : Math.atan2(y, x), Math.atan2(z, p), rr - a);
46
+ return commit(result, p === 0 ? 0 : longitude, Math.atan2(z, p), rr - a);
45
47
  if (p === 0)
46
48
  return commit(result, 0, Math.sign(z) * Math.PI / 2, Math.abs(z) - b);
47
49
  const horizontal = p / a, vertical = z / b;
48
- if (horizontal * horizontal + vertical * vertical < 1 - 16 * Number.EPSILON)
50
+ if (horizontal * horizontal + vertical * vertical < 1 - 16 * EPSILON)
49
51
  return interiorInverse(x, y, z, p, a, b, result);
50
52
  if (es >= 0.9)
51
- return exteriorInverse(x, y, z, p, a, b, result);
53
+ return interiorInverse(x, y, z, p, a, b, result);
52
54
  const ct = z / rr, st = p / rr;
53
55
  let rx = 1 / Math.sqrt(1 - es * (2 - es) * st * st);
54
56
  let cos = st * (1 - es) * rx, sin = ct * rx;
@@ -59,64 +61,65 @@ function cartesianToSpheroid(point, geometry, result = point) {
59
61
  rx = 1 / Math.sqrt(1 - rk * (2 - rk) * st * st);
60
62
  const nextCos = st * (1 - rk) * rx, nextSin = ct * rx;
61
63
  if (Math.abs(nextSin * cos - nextCos * sin) <= 1e-12) {
62
- if (!Number.isFinite(height) || !Number.isFinite(nextSin) || !Number.isFinite(nextCos))
64
+ if (!Number.isFinite(height))
63
65
  break;
64
- return commit(result, Math.atan2(y, x), Math.atan2(nextSin, Math.abs(nextCos)), height);
66
+ return commit(result, longitude, Math.atan2(nextSin, Math.abs(nextCos)), height);
65
67
  }
66
68
  cos = nextCos;
67
69
  sin = nextSin;
68
70
  }
69
- return exteriorInverse(x, y, z, p, a, b, result);
71
+ return interiorInverse(x, y, z, p, a, b, result);
70
72
  }
71
73
  function interiorInverse(x, y, z, p, a, b, result) {
74
+ const longitude = Math.atan2(y, x);
72
75
  const ratio = b / a, ratio2 = ratio * ratio;
73
76
  const horizontal = p / a, vertical = z / a, delta = 1 - ratio2;
74
77
  if (!(ratio2 > 0) || ratio > 1)
75
78
  return false;
76
- if (z === 0) {
77
- if (horizontal < delta)
78
- return false;
79
- return commit(result, Math.atan2(y, x), 0, p - a);
80
- }
81
79
  const aa = a * a, bb = b * b;
82
80
  const ratioError = Number.isFinite(aa) && aa > 0 ? (bb - ratio2 * aa + productError(b, b, bb) - ratio2 * productError(a, a, aa) - productError(ratio2, aa, ratio2 * aa)) / aa : 0;
83
81
  const pp = p * p, xx = x * x, yy = y * y, sum = xx + yy;
84
82
  const radiusError = Number.isFinite(pp) && pp > 0 ? (sum - pp + sumError(xx, yy, sum) + productError(x, x, xx) + productError(y, y, yy) - productError(p, p, pp)) / (2 * p) : 0;
85
- const shift = a * ratio2, base = p - a + shift;
86
- const correction = radiusError + sumError(p - a, shift, base) + productError(a, ratio2, shift) + a * ratioError;
83
+ const shift = a * ratio2, distance = p - a, base = distance + shift;
84
+ const correction = radiusError + sumError(p, -a, distance) + sumError(distance, shift, base) + productError(a, ratio2, shift) + a * ratioError;
85
+ if (z === 0) {
86
+ if (base + correction < 0)
87
+ return false;
88
+ return commit(result, longitude, 0, distance);
89
+ }
87
90
  const weighted = Math.abs(vertical) * ratio;
88
- if (!(weighted > 0))
91
+ let lower = 0, upper = ratio2 + Math.hypot(horizontal, vertical * ratio);
92
+ if (!Number.isFinite(upper))
89
93
  return false;
90
- let lower = 0, upper = ratio2;
91
94
  let t = Math.max(weighted, horizontal - delta);
92
95
  if (!(t > lower && t < upper))
93
96
  t = upper / 2;
94
- for (let i = 0; i < 128; i++) {
97
+ const gap = -(base + correction) / a;
98
+ const limiting = Math.sqrt(gap * (horizontal + delta)) / delta;
99
+ let latitude = gap > 0 && Math.abs(z) / limiting / a * ratio <= EPSILON * gap ? Math.atan2(Math.sign(z) * limiting / ratio, horizontal / delta) : void 0;
100
+ for (let i = 0; i < 1024 && latitude === void 0; i++) {
95
101
  const equatorial = delta + t;
96
- const u = horizontal / equatorial, v = weighted / t;
102
+ const u = horizontal / equatorial, verticalAt = z / t / a, v = verticalAt * ratio;
97
103
  const at = a * t, difference = base - at;
98
104
  const offset = (difference + (sumError(base, -at, difference) + correction - productError(a, t, at))) / (a * equatorial);
99
105
  const term = offset * (u + 1);
100
106
  const residual = term + v * v;
101
- if (Math.abs(residual) <= 4 * Number.EPSILON * (Math.abs(term) + v * v) || upper - lower <= 4 * Number.EPSILON * t) {
102
- const latitude = Math.atan2(vertical / t, horizontal / equatorial);
103
- const sin = Math.sin(latitude), cos = Math.cos(latitude);
104
- return commit(result, Math.atan2(y, x), latitude, p * cos + z * sin - a * Math.hypot(cos, ratio * sin));
105
- }
107
+ if (!Number.isFinite(residual))
108
+ return false;
106
109
  if (residual > 0)
107
110
  lower = t;
108
111
  else
109
112
  upper = t;
110
113
  const derivative = -2 * (u * u / equatorial + v * v / t);
111
114
  const next = t - residual / derivative;
112
- const candidate = Number.isFinite(next) && next > lower && next < upper ? next : lower + (upper - lower) / 2;
113
- if (candidate === t) {
114
- const latitude = Math.atan2(vertical / t, horizontal / equatorial);
115
- return commit(result, Math.atan2(y, x), latitude, p * Math.cos(latitude) + z * Math.sin(latitude) - a * Math.hypot(Math.cos(latitude), ratio * Math.sin(latitude)));
115
+ const candidate = next > lower && next < upper ? next : lower + (upper - lower) / 2;
116
+ if (Math.abs(residual) <= 4 * EPSILON * (Math.abs(term) + v * v) || upper - lower <= 4 * EPSILON * t) {
117
+ latitude = Math.atan2(verticalAt, u);
118
+ break;
116
119
  }
117
120
  t = candidate;
118
121
  }
119
- return false;
122
+ return latitude !== void 0 && commitNormal(result, longitude, latitude, p, z, a, ratio);
120
123
  }
121
124
  function sumError(x, y, sum) {
122
125
  const part = sum - x;
@@ -129,35 +132,9 @@ function productError(x, y, product) {
129
132
  const hx = sx - (sx - x), hy = sy - (sy - y), lx = x - hx, ly = y - hy;
130
133
  return hx * hy - product + hx * ly + lx * hy + lx * ly;
131
134
  }
132
- function exteriorInverse(x, y, z, p, a, b, result) {
133
- const ratio = b / a, ratio2 = ratio * ratio, horizontal = p / a, vertical = z / a;
134
- const norm = Math.hypot(horizontal, z / b);
135
- if (!Number.isFinite(norm) || norm < 1 - 8 * Number.EPSILON || !(ratio2 > 0))
136
- return false;
137
- let lower = 0, upper = Math.hypot(horizontal, vertical * ratio);
138
- if (!Number.isFinite(upper))
139
- return false;
140
- let multiplier = norm <= 1 + 8 * Number.EPSILON ? 0 : upper / 2;
141
- for (let i = 0; i < 96; i++) {
142
- const equatorial = 1 + multiplier, polar = ratio2 + multiplier;
143
- const u = horizontal / equatorial, v = vertical * ratio / polar;
144
- const length = Math.hypot(u, v);
145
- const residual = length - 1;
146
- if (Math.abs(residual) <= 4 * Number.EPSILON) {
147
- const latitude = Math.atan2(vertical / polar, horizontal / equatorial);
148
- const sin = Math.sin(latitude), cos = Math.cos(latitude);
149
- const height = p * cos + z * sin - a * Math.hypot(cos, ratio * sin);
150
- return commit(result, Math.atan2(y, x), latitude, height);
151
- }
152
- if (residual > 0)
153
- lower = multiplier;
154
- else
155
- upper = multiplier;
156
- const derivative = -(u * u / equatorial + v * v / polar) / length;
157
- const next = multiplier - residual / derivative;
158
- multiplier = Number.isFinite(next) && next > lower && next < upper ? next : (lower + upper) / 2;
159
- }
160
- return false;
135
+ function commitNormal(result, longitude, latitude, p, z, a, ratio) {
136
+ const sin = Math.sin(latitude), cos = Math.cos(latitude);
137
+ return commit(result, longitude, latitude, p * cos + z * sin - a * Math.hypot(cos, ratio * sin));
161
138
  }
162
139
  function commit(result, x, y, z) {
163
140
  if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z))
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/spheroid.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -12,7 +12,7 @@ export type SpheroidPoint = {
12
12
  export declare function spheroidToCartesian(point: SpheroidPoint, geometry: SpheroidGeometry, result?: SpheroidPoint): boolean;
13
13
  /**
14
14
  * Bounded inverse. Sphere is analytic; ordinary spheroids use the retained Hannover
15
- * iteration on exterior points. Interiors use a safeguarded nearest-footpoint solve.
15
+ * iteration on exterior points. Interiors and thin-shape exteriors share a safeguarded nearest-footpoint solve.
16
16
  * Equatorial interiors below the evolute cusp have two nearest normals: reject.
17
17
  * false leaves output untouched, including the center and unresolved binary64 cases.
18
18
  * Only exact poles canonicalize longitude; adapters may retain other conventions.
@@ -1 +1 @@
1
- {"version":3,"file":"spheroid.d.ts","sourceRoot":"","sources":["../src/spheroid.ts"],"names":[],"mappings":"AAMA,kGAAkG;AAClG,OAAO,KAAK,EAAC,kBAAkB,EAAC,mBAAgB;AAChD,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG;IAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;CAAC,CAAC;AAC3F,MAAM,MAAM,aAAa,GAAG;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC;AAE9D,6FAA6F;AAC7F,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,GAAE,aAAqB,GAC5B,OAAO,CAcT;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,GAAE,aAAqB,GAC5B,OAAO,CAmCT"}
1
+ {"version":3,"file":"spheroid.d.ts","sourceRoot":"","sources":["../src/spheroid.ts"],"names":[],"mappings":"AAMA,kGAAkG;AAClG,OAAO,KAAK,EAAC,kBAAkB,EAAC,mBAAgB;AAChD,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG;IAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;CAAC,CAAC;AAC3F,MAAM,MAAM,aAAa,GAAG;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC;AAI9D,6FAA6F;AAC7F,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,GAAE,aAAqB,GAC5B,OAAO,CAcT;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,GAAE,aAAqB,GAC5B,OAAO,CAoCT"}
package/dist/spheroid.js CHANGED
@@ -2,12 +2,13 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // SPDX-FileCopyrightText: 2014 Mike Adair, Richard Greenwood, Didier Richard, Stephen Irons, Olivier Terral and Calvin Metcalf (proj4js)
4
4
  // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
5
- // SPDX-FileComment: Forward geocentric equations and Hannover inverse moved/adapted from math.gl projection's proj4js 2.22.0 datumUtils.js port. See ../PROJ4-LICENSE.md. Safeguarded nearest-footpoint inverse and numeric output commit are original math.gl code.
5
+ // SPDX-FileComment: Forward geocentric equations and Hannover inverse moved/adapted from math.gl projection's proj4js 2.22.0 datumUtils.js port. See ../PROJ4-LICENSE.md. Safeguarded compensated nearest-footpoint inverse, thin-exterior/pole fixes and numeric output commit are original math.gl code, qualified with independent mathematics and offline GeographicLib 2.7 (Charles Karney, MIT).
6
+ const EPSILON = Number.EPSILON;
6
7
  /** Caller supplies validated positive finite axes and eccentricity. No latitude wrapping. */
7
8
  export function spheroidToCartesian(point, geometry, result = point) {
8
9
  const longitude = point.x, latitude = point.y, height = point.z;
9
10
  const { semiMajorAxis: a, semiMinorAxis: b, eccentricitySquared: es } = geometry;
10
- const sin = Math.sin(latitude), cos = Math.cos(latitude);
11
+ const sin = Math.sin(latitude), cos = Math.abs(latitude) === Math.PI / 2 ? 0 : Math.cos(latitude);
11
12
  // Use the axis ratio for very flat shapes: 1 - es*sin² loses polar precision.
12
13
  const ratio = b / a;
13
14
  const radius = es < 0.9 ? a / Math.sqrt(1 - es * sin * sin) : a / Math.hypot(cos, ratio * sin);
@@ -18,7 +19,7 @@ export function spheroidToCartesian(point, geometry, result = point) {
18
19
  }
19
20
  /**
20
21
  * Bounded inverse. Sphere is analytic; ordinary spheroids use the retained Hannover
21
- * iteration on exterior points. Interiors use a safeguarded nearest-footpoint solve.
22
+ * iteration on exterior points. Interiors and thin-shape exteriors share a safeguarded nearest-footpoint solve.
22
23
  * Equatorial interiors below the evolute cusp have two nearest normals: reject.
23
24
  * false leaves output untouched, including the center and unresolved binary64 cases.
24
25
  * Only exact poles canonicalize longitude; adapters may retain other conventions.
@@ -26,18 +27,19 @@ export function spheroidToCartesian(point, geometry, result = point) {
26
27
  export function cartesianToSpheroid(point, geometry, result = point) {
27
28
  const x = point.x, y = point.y, z = point.z;
28
29
  const { semiMajorAxis: a, semiMinorAxis: b, eccentricitySquared: es } = geometry;
30
+ const longitude = Math.atan2(y, x);
29
31
  const p = Math.hypot(x, y), rr = Math.hypot(x, y, z);
30
32
  if (!(rr > 0) || !Number.isFinite(rr))
31
33
  return false;
32
34
  if (es === 0)
33
- return commit(result, p === 0 ? 0 : Math.atan2(y, x), Math.atan2(z, p), rr - a);
35
+ return commit(result, p === 0 ? 0 : longitude, Math.atan2(z, p), rr - a);
34
36
  if (p === 0)
35
37
  return commit(result, 0, (Math.sign(z) * Math.PI) / 2, Math.abs(z) - b);
36
38
  const horizontal = p / a, vertical = z / b;
37
- if (horizontal * horizontal + vertical * vertical < 1 - 16 * Number.EPSILON)
39
+ if (horizontal * horizontal + vertical * vertical < 1 - 16 * EPSILON)
38
40
  return interiorInverse(x, y, z, p, a, b, result);
39
41
  if (es >= 0.9)
40
- return exteriorInverse(x, y, z, p, a, b, result);
42
+ return interiorInverse(x, y, z, p, a, b, result);
41
43
  const ct = z / rr, st = p / rr;
42
44
  let rx = 1 / Math.sqrt(1 - es * (2 - es) * st * st);
43
45
  let cos = st * (1 - es) * rx, sin = ct * rx;
@@ -48,28 +50,24 @@ export function cartesianToSpheroid(point, geometry, result = point) {
48
50
  rx = 1 / Math.sqrt(1 - rk * (2 - rk) * st * st);
49
51
  const nextCos = st * (1 - rk) * rx, nextSin = ct * rx;
50
52
  if (Math.abs(nextSin * cos - nextCos * sin) <= 1e-12) {
51
- if (!Number.isFinite(height) || !Number.isFinite(nextSin) || !Number.isFinite(nextCos))
53
+ if (!Number.isFinite(height))
52
54
  break;
53
- return commit(result, Math.atan2(y, x), Math.atan2(nextSin, Math.abs(nextCos)), height);
55
+ return commit(result, longitude, Math.atan2(nextSin, Math.abs(nextCos)), height);
54
56
  }
55
57
  cos = nextCos;
56
58
  sin = nextSin;
57
59
  }
58
- return exteriorInverse(x, y, z, p, a, b, result);
60
+ return interiorInverse(x, y, z, p, a, b, result);
59
61
  }
60
- /** Original nearest-normal solve in t = (lambda + b²)/a², avoiding interior cancellation.
62
+ /** Original nearest-normal solve in t = (lambda + b²)/a², avoiding interior cancellation and thin-exterior residual loss.
61
63
  * The positive interval selects the globally nearest branch, rather than a stationary normal.
62
64
  */
63
65
  function interiorInverse(x, y, z, p, a, b, result) {
66
+ const longitude = Math.atan2(y, x);
64
67
  const ratio = b / a, ratio2 = ratio * ratio;
65
68
  const horizontal = p / a, vertical = z / a, delta = 1 - ratio2;
66
69
  if (!(ratio2 > 0) || ratio > 1)
67
70
  return false;
68
- if (z === 0) {
69
- if (horizontal < delta)
70
- return false;
71
- return commit(result, Math.atan2(y, x), 0, p - a);
72
- }
73
71
  const aa = a * a, bb = b * b;
74
72
  const ratioError = Number.isFinite(aa) && aa > 0
75
73
  ? (bb -
@@ -89,47 +87,64 @@ function interiorInverse(x, y, z, p, a, b, result) {
89
87
  productError(p, p, pp)) /
90
88
  (2 * p)
91
89
  : 0;
92
- const shift = a * ratio2, base = p - a + shift;
93
- const correction = radiusError + sumError(p - a, shift, base) + productError(a, ratio2, shift) + a * ratioError;
90
+ const shift = a * ratio2, distance = p - a, base = distance + shift;
91
+ const correction = radiusError +
92
+ sumError(p, -a, distance) +
93
+ sumError(distance, shift, base) +
94
+ productError(a, ratio2, shift) +
95
+ a * ratioError;
96
+ if (z === 0) {
97
+ // A rounded hypot can equal the cusp for points just inside it. Include
98
+ // the radius/axis corrections before selecting a unique equatorial normal.
99
+ if (base + correction < 0)
100
+ return false;
101
+ return commit(result, longitude, 0, distance);
102
+ }
94
103
  const weighted = Math.abs(vertical) * ratio;
95
- if (!(weighted > 0))
104
+ let lower = 0, upper = ratio2 + Math.hypot(horizontal, vertical * ratio);
105
+ if (!Number.isFinite(upper))
96
106
  return false;
97
- let lower = 0, upper = ratio2;
98
107
  // A lower bound near the short-axis singularity prevents thousands of bisections
99
108
  // for deep, nearly equatorial interiors. No subtraction of lambda and -b².
100
109
  let t = Math.max(weighted, horizontal - delta);
101
110
  if (!(t > lower && t < upper))
102
111
  t = upper / 2;
103
- for (let i = 0; i < 128; i++) {
112
+ // Below the cusp, a vanishing polar input can make t subnormal. The
113
+ // limiting vertical footpoint remains well conditioned. Use it only when
114
+ // its bound t <= abs(z)*ratio/(a*v) is negligible relative to the cusp gap.
115
+ const gap = -(base + correction) / a;
116
+ const limiting = Math.sqrt(gap * (horizontal + delta)) / delta;
117
+ let latitude = gap > 0 && (Math.abs(z) / limiting / a) * ratio <= EPSILON * gap
118
+ ? Math.atan2((Math.sign(z) * limiting) / ratio, horizontal / delta)
119
+ : undefined;
120
+ for (let i = 0; i < 1024 && latitude === undefined; i++) {
104
121
  const equatorial = delta + t;
105
- const u = horizontal / equatorial, v = weighted / t;
122
+ const u = horizontal / equatorial,
123
+ // Divide by t first: both z/a and a*t can lose precision in the
124
+ // subnormal range although the near-cusp latitude is representable.
125
+ verticalAt = z / t / a, v = verticalAt * ratio;
106
126
  const at = a * t, difference = base - at;
107
127
  const offset = (difference + (sumError(base, -at, difference) + correction - productError(a, t, at))) /
108
128
  (a * equatorial);
109
129
  const term = offset * (u + 1);
110
130
  const residual = term + v * v;
111
- if (Math.abs(residual) <= 4 * Number.EPSILON * (Math.abs(term) + v * v) ||
112
- upper - lower <= 4 * Number.EPSILON * t) {
113
- const latitude = Math.atan2(vertical / t, horizontal / equatorial);
114
- const sin = Math.sin(latitude), cos = Math.cos(latitude);
115
- return commit(result, Math.atan2(y, x), latitude, p * cos + z * sin - a * Math.hypot(cos, ratio * sin));
116
- }
131
+ if (!Number.isFinite(residual))
132
+ return false;
117
133
  if (residual > 0)
118
134
  lower = t;
119
135
  else
120
136
  upper = t;
121
137
  const derivative = -2 * ((u * u) / equatorial + (v * v) / t);
122
138
  const next = t - residual / derivative;
123
- const candidate = Number.isFinite(next) && next > lower && next < upper ? next : lower + (upper - lower) / 2;
124
- if (candidate === t) {
125
- const latitude = Math.atan2(vertical / t, horizontal / equatorial);
126
- return commit(result, Math.atan2(y, x), latitude, p * Math.cos(latitude) +
127
- z * Math.sin(latitude) -
128
- a * Math.hypot(Math.cos(latitude), ratio * Math.sin(latitude)));
139
+ const candidate = next > lower && next < upper ? next : lower + (upper - lower) / 2;
140
+ if (Math.abs(residual) <= 4 * EPSILON * (Math.abs(term) + v * v) ||
141
+ upper - lower <= 4 * EPSILON * t) {
142
+ latitude = Math.atan2(verticalAt, u);
143
+ break;
129
144
  }
130
145
  t = candidate;
131
146
  }
132
- return false;
147
+ return latitude !== undefined && commitNormal(result, longitude, latitude, p, z, a, ratio);
133
148
  }
134
149
  /** Error-free transforms on the finite squared-axis domain used by geometry adapters. */
135
150
  function sumError(x, y, sum) {
@@ -143,36 +158,10 @@ function productError(x, y, product) {
143
158
  const hx = sx - (sx - x), hy = sy - (sy - y), lx = x - hx, ly = y - hy;
144
159
  return hx * hy - product + hx * ly + lx * hy + lx * ly;
145
160
  }
146
- /** Original dimensionless Lagrange-multiplier solve, restricted to surface/exterior. */
147
- function exteriorInverse(x, y, z, p, a, b, result) {
148
- const ratio = b / a, ratio2 = ratio * ratio, horizontal = p / a, vertical = z / a;
149
- const norm = Math.hypot(horizontal, z / b);
150
- if (!Number.isFinite(norm) || norm < 1 - 8 * Number.EPSILON || !(ratio2 > 0))
151
- return false;
152
- let lower = 0, upper = Math.hypot(horizontal, vertical * ratio);
153
- if (!Number.isFinite(upper))
154
- return false;
155
- let multiplier = norm <= 1 + 8 * Number.EPSILON ? 0 : upper / 2;
156
- for (let i = 0; i < 96; i++) {
157
- const equatorial = 1 + multiplier, polar = ratio2 + multiplier;
158
- const u = horizontal / equatorial, v = (vertical * ratio) / polar;
159
- const length = Math.hypot(u, v);
160
- const residual = length - 1;
161
- if (Math.abs(residual) <= 4 * Number.EPSILON) {
162
- const latitude = Math.atan2(vertical / polar, horizontal / equatorial);
163
- const sin = Math.sin(latitude), cos = Math.cos(latitude);
164
- const height = p * cos + z * sin - a * Math.hypot(cos, ratio * sin);
165
- return commit(result, Math.atan2(y, x), latitude, height);
166
- }
167
- if (residual > 0)
168
- lower = multiplier;
169
- else
170
- upper = multiplier;
171
- const derivative = -((u * u) / equatorial + (v * v) / polar) / length;
172
- const next = multiplier - residual / derivative;
173
- multiplier = Number.isFinite(next) && next > lower && next < upper ? next : (lower + upper) / 2;
174
- }
175
- return false;
161
+ /** Shared signed distance along the solved surface normal. */
162
+ function commitNormal(result, longitude, latitude, p, z, a, ratio) {
163
+ const sin = Math.sin(latitude), cos = Math.cos(latitude);
164
+ return commit(result, longitude, latitude, p * cos + z * sin - a * Math.hypot(cos, ratio * sin));
176
165
  }
177
166
  /** Values are captured before invoking application setters; recursive writes are safe. */
178
167
  function commit(result, x, y, z) {
@@ -1 +1 @@
1
- {"version":3,"file":"spheroid.js","sourceRoot":"","sources":["../src/spheroid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spheroid.js","sourceRoot":"","sources":["../src/spheroid.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export declare const BigInt64ArrayAvailable: boolean;
14
14
  export declare const BigUint64ArrayAvailable: boolean;
15
15
  declare const BigIntCtor: typeof BigIntUnavailable | BigIntConstructor;
16
16
  declare const BigInt64ArrayCtor: BigInt64ArrayConstructor | typeof BigInt64ArrayUnavailable;
17
- declare const BigUint64ArrayCtor: BigUint64ArrayConstructor[] | (typeof BigInt64ArrayUnavailable)[];
17
+ declare const BigUint64ArrayCtor: BigUint64ArrayConstructor | typeof BigInt64ArrayUnavailable;
18
18
  export { BigIntCtor as BigInt };
19
19
  export { BigInt64ArrayCtor as BigInt64Array };
20
20
  export { BigUint64ArrayCtor as BigUint64Array };
@@ -1 +1 @@
1
- {"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAYA,iBAAS,iBAAiB,SAEzB;kBAFQ,iBAAiB;;;;AAU1B,cAAM,wBAAwB;IAC5B,MAAM,KAAK,iBAAiB,WAE3B;IACD,MAAM,CAAC,EAAE;IAGT,MAAM,CAAC,IAAI;;CAMZ;AAED,eAAO,MAAM,eAAe,SAAgC,CAAC;AAC7D,eAAO,MAAM,sBAAsB,SAAuC,CAAC;AAC3E,eAAO,MAAM,uBAAuB,SAAwC,CAAC;AAE7E,QAAA,MAAM,UAAU,8CAEZ,CAAC;AAEL,QAAA,MAAM,iBAAiB,4DAEnB,CAAC;AAEL,QAAA,MAAM,kBAAkB,mEAEpB,CAAC;AAEL,OAAO,EAAC,UAAU,IAAI,MAAM,EAAC,CAAC;AAC9B,OAAO,EAAC,iBAAiB,IAAI,aAAa,EAAC,CAAC;AAC5C,OAAO,EAAC,kBAAkB,IAAI,cAAc,EAAC,CAAC"}
1
+ {"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AA8BA,iBAAS,iBAAiB,SAEzB;kBAFQ,iBAAiB;;;;AAU1B,cAAM,wBAAwB;IAC5B,MAAM,KAAK,iBAAiB,WAE3B;IACD,MAAM,CAAC,EAAE;IAGT,MAAM,CAAC,IAAI;;CAMZ;AAED,eAAO,MAAM,eAAe,SAAgC,CAAC;AAC7D,eAAO,MAAM,sBAAsB,SAAuC,CAAC;AAC3E,eAAO,MAAM,uBAAuB,SAAwC,CAAC;AAE7E,QAAA,MAAM,UAAU,8CAEZ,CAAC;AAEL,QAAA,MAAM,iBAAiB,4DAEnB,CAAC;AAEL,QAAA,MAAM,kBAAkB,6DAEpB,CAAC;AAEL,OAAO,EAAC,UAAU,IAAI,MAAM,EAAC,CAAC;AAC9B,OAAO,EAAC,iBAAiB,IAAI,aAAa,EAAC,CAAC;AAC5C,OAAO,EAAC,kBAAkB,IAAI,cAAc,EAAC,CAAC"}
@@ -1,9 +1,26 @@
1
1
  // math.gl
2
- // SPDX-License-Identifier: MIT
2
+ // SPDX-License-Identifier: MIT AND Apache-2.0
3
3
  // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ // SPDX-FileCopyrightText: Copyright 2016-2019 The Apache Software Foundation
5
+ // SPDX-FileComment: BigInt availability/fallback structure adapted from Apache Arrow JS util/compat.ts; compared with apache-arrow-4.0.0. See ../../ARROW-NOTICE.txt and ../../APACHE-2.0-LICENSE.txt. Modified to separate availability flags, share errors and narrow exports.
6
+ // Licensed to the Apache Software Foundation (ASF) under one
7
+ // or more contributor license agreements. See the NOTICE file
8
+ // distributed with this work for additional information
9
+ // regarding copyright ownership. The ASF licenses this file
10
+ // to you under the Apache License, Version 2.0 (the
11
+ // "License"); you may not use this file except in compliance
12
+ // with the License. You may obtain a copy of the License at
13
+ //
14
+ // http://www.apache.org/licenses/LICENSE-2.0
15
+ //
16
+ // Unless required by applicable law or agreed to in writing,
17
+ // software distributed under the License is distributed on an
18
+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19
+ // KIND, either express or implied. See the License for the
20
+ // specific language governing permissions and limitations
21
+ // under the License.
4
22
  // BigInt compatibility layer
5
- // Inspired by ArrowJS (under Apache2 license)
6
- // https://github.com/apache/arrow/blob/master/js/src/util/compat.ts
23
+ // Source comparison: https://github.com/apache/arrow/blob/apache-arrow-4.0.0/js/src/util/compat.ts
7
24
  // Requires tsconfig.json: target=esnext or (lib: esnext.bigint)
8
25
  // Requires eslint: env: {es2020: true}
9
26
  const ERR_BIGINT_UNAVAILABLE = 'BigInt is not available in this environment';
@@ -40,7 +57,7 @@ const BigInt64ArrayCtor = (() => {
40
57
  return BigInt64ArrayAvailable ? BigInt64Array : BigInt64ArrayUnavailable;
41
58
  })();
42
59
  const BigUint64ArrayCtor = (() => {
43
- return BigUint64ArrayAvailable ? [BigUint64Array] : [BigInt64ArrayUnavailable];
60
+ return BigUint64ArrayAvailable ? BigUint64Array : BigInt64ArrayUnavailable;
44
61
  })();
45
62
  export { BigIntCtor as BigInt };
46
63
  export { BigInt64ArrayCtor as BigInt64Array };
@@ -1 +1 @@
1
- {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAE5D,6BAA6B;AAC7B,8CAA8C;AAC9C,oEAAoE;AACpE,gEAAgE;AAChE,uCAAuC;AAEvC,MAAM,sBAAsB,GAAG,6CAA6C,CAAC;AAE7E,SAAS,iBAAiB;IACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC;AACD,iBAAiB,CAAC,MAAM,GAAG,GAAG,EAAE;IAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC,CAAC;AACF,iBAAiB,CAAC,OAAO,GAAG,GAAG,EAAE;IAC/B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,wBAAwB;IAC5B,MAAM,KAAK,iBAAiB;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,CAAC,EAAE;QACP,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,CAAC,IAAI;QACT,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD;QACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,aAAa,KAAK,WAAW,CAAC;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,cAAc,KAAK,WAAW,CAAC;AAE7E,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IACvB,OAAO,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACtD,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE;IAC9B,OAAO,sBAAsB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC;AAC3E,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE;IAC/B,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;AACjF,CAAC,CAAC,EAAE,CAAC;AAEL,OAAO,EAAC,UAAU,IAAI,MAAM,EAAC,CAAC;AAC9B,OAAO,EAAC,iBAAiB,IAAI,aAAa,EAAC,CAAC;AAC5C,OAAO,EAAC,kBAAkB,IAAI,cAAc,EAAC,CAAC"}
1
+ {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,8CAA8C;AAC9C,4DAA4D;AAC5D,6EAA6E;AAC7E,iRAAiR;AAEjR,6DAA6D;AAC7D,+DAA+D;AAC/D,wDAAwD;AACxD,6DAA6D;AAC7D,oDAAoD;AACpD,6DAA6D;AAC7D,6DAA6D;AAC7D,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,6DAA6D;AAC7D,8DAA8D;AAC9D,yDAAyD;AACzD,4DAA4D;AAC5D,0DAA0D;AAC1D,qBAAqB;AAErB,6BAA6B;AAC7B,mGAAmG;AACnG,gEAAgE;AAChE,uCAAuC;AAEvC,MAAM,sBAAsB,GAAG,6CAA6C,CAAC;AAE7E,SAAS,iBAAiB;IACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC;AACD,iBAAiB,CAAC,MAAM,GAAG,GAAG,EAAE;IAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC,CAAC;AACF,iBAAiB,CAAC,OAAO,GAAG,GAAG,EAAE;IAC/B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,wBAAwB;IAC5B,MAAM,KAAK,iBAAiB;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,CAAC,EAAE;QACP,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,CAAC,IAAI;QACT,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD;QACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,aAAa,KAAK,WAAW,CAAC;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,cAAc,KAAK,WAAW,CAAC;AAE7E,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IACvB,OAAO,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACtD,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE;IAC9B,OAAO,sBAAsB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC;AAC3E,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE;IAC/B,OAAO,uBAAuB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,wBAAwB,CAAC;AAC7E,CAAC,CAAC,EAAE,CAAC;AAEL,OAAO,EAAC,UAAU,IAAI,MAAM,EAAC,CAAC;AAC9B,OAAO,EAAC,iBAAiB,IAAI,aAAa,EAAC,CAAC;AAC5C,OAAO,EAAC,kBAAkB,IAAI,cAAc,EAAC,CAAC"}
@@ -3,7 +3,7 @@
3
3
  // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
  /** Checks if a `Bounds` is a `Bounds2D` */
5
5
  export function isBounds2D(bounds) {
6
- return bounds.length === 2;
6
+ return bounds.length === 2 && bounds[0].length === 2 && bounds[1].length === 2;
7
7
  }
8
8
  /** Accepts 2D and 3D bounds and returns a 2D bound, truncating 3D dimension if necessary */
9
9
  export function getBounds2D(bounds) {
@@ -1 +1 @@
1
- {"version":3,"file":"bounds-types.js","sourceRoot":"","sources":["../../src/types/bounds-types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAa5D,2CAA2C;AAC3C,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,UAAU,CAAC,MAAM,CAAC;QACvB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC;YACE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7B,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"bounds-types.js","sourceRoot":"","sources":["../../src/types/bounds-types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAa5D,2CAA2C;AAC3C,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,UAAU,CAAC,MAAM,CAAC;QACvB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC;YACE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7B,CAAC;AACR,CAAC"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
9
- "version": "5.0.0-alpha.19",
9
+ "version": "5.0.0-alpha.20",
10
10
  "keywords": [
11
11
  "webgl",
12
12
  "javascript",
@@ -90,10 +90,14 @@
90
90
  "files": [
91
91
  "dist",
92
92
  "src",
93
- "PROJ4-LICENSE.md"
93
+ "PROJ4-LICENSE.md",
94
+ "LICENSE",
95
+ "THIRD-PARTY-NOTICES.md",
96
+ "ARROW-NOTICE.txt",
97
+ "APACHE-2.0-LICENSE.txt"
94
98
  ],
95
99
  "sideEffects": [
96
100
  "./src/lib/common.js"
97
101
  ],
98
- "gitHead": "f5700027934faf25c37230905c7ffa14d7f677a7"
102
+ "gitHead": "ad8c205a98e5e057d9055300b1a71f422b275c73"
99
103
  }
@@ -2,6 +2,8 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
  // SPDX-FileCopyrightText: Copyright (c) 2017 Uber Technologies, Inc.
5
+ // SPDX-FileCopyrightText: Copyright 2010-2017 three.js authors
6
+ // SPDX-FileComment: Euler conversion methods adapted from three.js; see ../../LICENSE.
5
7
 
6
8
  import {MathArray} from './base/math-array';
7
9
  import {NumericArray} from '../types';
@@ -5,7 +5,15 @@
5
5
  import type {ExpressionFunction, ExpressionFunctionLibrary} from './function-libraries';
6
6
 
7
7
  const FUNCTION_NAME_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
8
- const DISALLOWED_FUNCTION_NAMES = new Set(['__proto__', 'prototype', 'constructor']);
8
+ const DISALLOWED_FUNCTION_NAMES = new Set([
9
+ '__proto__',
10
+ 'prototype',
11
+ 'constructor',
12
+ 'true',
13
+ 'false',
14
+ 'null',
15
+ 'this'
16
+ ]);
9
17
 
10
18
  /**
11
19
  * Options for registering functions with an {@link ExpressionFunctionRegistry}.
@@ -24,7 +24,7 @@ function isObject(value: unknown): value is Record<string, unknown> {
24
24
  return value !== null && typeof value === 'object';
25
25
  }
26
26
 
27
- const keyMap: Record<string, string[]> = {};
27
+ const keyMap: Record<string, string[]> = Object.create(null);
28
28
 
29
29
  /** Returns a cached list of property names for a dot-separated path. */
30
30
  function getKeys(compositeKey: string): string[] {