@genome-spy/core 0.69.0 → 0.70.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.
Files changed (46) hide show
  1. package/dist/bundle/{AbortablePromiseCache-CcuMrnn7.js → AbortablePromiseCache-Dj0vzLnp.js} +4 -4
  2. package/dist/bundle/{browser-BRemItdO.js → browser-0iNU5Wit.js} +33 -33
  3. package/dist/bundle/index-BYsZN7b0.js +1597 -0
  4. package/dist/bundle/{index-Cq3QFUxX.js → index-C3kClAEN.js} +583 -593
  5. package/dist/bundle/{index-D-w7Mmt9.js → index-C7wOh6y1.js} +138 -140
  6. package/dist/bundle/index-CRaQAuki.js +326 -0
  7. package/dist/bundle/{index-D74H8TTz.js → index-D9v1PCj9.js} +1 -2
  8. package/dist/bundle/{index-BatuyGAI.js → index-GDOuv_D5.js} +75 -80
  9. package/dist/bundle/{index-DbJ0oeYM.js → index-Gt44EOIH.js} +160 -163
  10. package/dist/bundle/index.es.js +8802 -9058
  11. package/dist/bundle/index.js +123 -165
  12. package/dist/bundle/{unzip-NywezaRR.js → unzip-Bac01w6X.js} +1 -1
  13. package/dist/src/gl/colorUtils.d.ts +2 -1
  14. package/dist/src/gl/colorUtils.d.ts.map +1 -1
  15. package/dist/src/gl/colorUtils.js +15 -3
  16. package/dist/src/gl/colorUtils.test.d.ts +2 -0
  17. package/dist/src/gl/colorUtils.test.d.ts.map +1 -0
  18. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  19. package/dist/src/gl/webGLHelper.js +2 -1
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/index.js +2 -5
  22. package/dist/src/marks/mark.d.ts +0 -2
  23. package/dist/src/marks/mark.d.ts.map +1 -1
  24. package/dist/src/marks/mark.js +0 -8
  25. package/dist/src/marks/rect.d.ts.map +1 -1
  26. package/dist/src/marks/rect.js +0 -8
  27. package/dist/src/utils/deepEqual.d.ts +14 -0
  28. package/dist/src/utils/deepEqual.d.ts.map +1 -0
  29. package/dist/src/utils/deepEqual.js +63 -0
  30. package/dist/src/utils/deepEqual.test.d.ts +2 -0
  31. package/dist/src/utils/deepEqual.test.d.ts.map +1 -0
  32. package/dist/src/utils/fetchUtils.d.ts +27 -0
  33. package/dist/src/utils/fetchUtils.d.ts.map +1 -0
  34. package/dist/src/utils/fetchUtils.js +47 -0
  35. package/dist/src/utils/fetchUtils.test.d.ts +2 -0
  36. package/dist/src/utils/fetchUtils.test.d.ts.map +1 -0
  37. package/dist/src/utils/url.d.ts +12 -0
  38. package/dist/src/utils/url.d.ts.map +1 -1
  39. package/dist/src/utils/url.js +45 -0
  40. package/dist/src/view/view.d.ts.map +1 -1
  41. package/dist/src/view/view.js +24 -6
  42. package/dist/src/view/viewUtils.d.ts.map +1 -1
  43. package/dist/src/view/viewUtils.js +4 -5
  44. package/package.json +2 -2
  45. package/dist/bundle/index-ByuE8dvu.js +0 -332
  46. package/dist/bundle/index-D28m8tSW.js +0 -1607
@@ -163,7 +163,7 @@ class qI extends Map {
163
163
  toString() {
164
164
  return `QuickLRU(${this.size}/${this.maxSize})`;
165
165
  }
166
- [Symbol.for("nodejs.util.inspect.custom")]() {
166
+ [/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")]() {
167
167
  return this.toString();
168
168
  }
169
169
  }
@@ -3,8 +3,9 @@
3
3
  * @param {WebGL2RenderingContext} gl
4
4
  * @param {number} [count]
5
5
  * @param {WebGLTexture} [existingTexture]
6
+ * @param {boolean} [reverse]
6
7
  */
7
- export function createSchemeTexture(schemeParams: string | import("../spec/scale.js").SchemeParams, gl: WebGL2RenderingContext, count?: number, existingTexture?: WebGLTexture): WebGLTexture;
8
+ export function createSchemeTexture(schemeParams: string | import("../spec/scale.js").SchemeParams, gl: WebGL2RenderingContext, count?: number, existingTexture?: WebGLTexture, reverse?: boolean): WebGLTexture;
8
9
  /**
9
10
  * @param {string[]} colors
10
11
  * @param {import("../spec/scale.js").ScaleInterpolate | import("../spec/scale.js").ScaleInterpolateParams} interpolateParams
@@ -1 +1 @@
1
- {"version":3,"file":"colorUtils.d.ts","sourceRoot":"","sources":["../../../src/gl/colorUtils.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,kDALW,MAAM,GAAG,OAAO,kBAAkB,EAAE,YAAY,MAChD,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBAqCtB;AAED;;;;;GAKG;AACH,uDALW,MAAM,EAAE,qBACR,OAAO,kBAAkB,EAAE,gBAAgB,GAAG,OAAO,kBAAkB,EAAE,sBAAsB,MAC/F,sBAAsB,oBACtB,YAAY,gBA6BtB;AAED;;;;;;;;GAQG;AACH,6CALW,MAAM,EAAE,MACR,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBAqBtB;AAED;;;;;;;GAOG;AACH,mDALW,MAAM,EAAE,MACR,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBActB;AAyDD;;GAEG;AACH,uCAFW,MAAM,YAKhB"}
1
+ {"version":3,"file":"colorUtils.d.ts","sourceRoot":"","sources":["../../../src/gl/colorUtils.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,kDANW,MAAM,GAAG,OAAO,kBAAkB,EAAE,YAAY,MAChD,sBAAsB,UACtB,MAAM,oBACN,YAAY,YACZ,OAAO,gBAgDjB;AAED;;;;;GAKG;AACH,uDALW,MAAM,EAAE,qBACR,OAAO,kBAAkB,EAAE,gBAAgB,GAAG,OAAO,kBAAkB,EAAE,sBAAsB,MAC/F,sBAAsB,oBACtB,YAAY,gBA6BtB;AAED;;;;;;;;GAQG;AACH,6CALW,MAAM,EAAE,MACR,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBAqBtB;AAED;;;;;;;GAOG;AACH,mDALW,MAAM,EAAE,MACR,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBActB;AAyDD;;GAEG;AACH,uCAFW,MAAM,YAKhB"}
@@ -10,8 +10,15 @@ import { createOrUpdateTexture } from "./webGLHelper.js";
10
10
  * @param {WebGL2RenderingContext} gl
11
11
  * @param {number} [count]
12
12
  * @param {WebGLTexture} [existingTexture]
13
+ * @param {boolean} [reverse]
13
14
  */
14
- export function createSchemeTexture(schemeParams, gl, count, existingTexture) {
15
+ export function createSchemeTexture(
16
+ schemeParams,
17
+ gl,
18
+ count,
19
+ existingTexture,
20
+ reverse = false
21
+ ) {
15
22
  const schemeName = isString(schemeParams)
16
23
  ? schemeParams
17
24
  : schemeParams.name;
@@ -24,10 +31,10 @@ export function createSchemeTexture(schemeParams, gl, count, existingTexture) {
24
31
  if (schemeName) {
25
32
  const scheme = vegaScheme(schemeName);
26
33
  if (isFunction(scheme)) {
27
- // TODO: Reverse
28
34
  const textureData = interpolatorToTextureData(scheme, {
29
35
  extent,
30
36
  count,
37
+ reverse,
31
38
  });
32
39
  return createOrUpdateTexture(
33
40
  gl,
@@ -41,7 +48,12 @@ export function createSchemeTexture(schemeParams, gl, count, existingTexture) {
41
48
  existingTexture
42
49
  );
43
50
  } else if (isArray(scheme)) {
44
- return createDiscreteColorTexture(scheme, gl);
51
+ return createDiscreteColorTexture(
52
+ reverse ? Array.from(scheme).reverse() : scheme,
53
+ gl,
54
+ count,
55
+ existingTexture
56
+ );
45
57
  } else {
46
58
  throw new Error("Unknown scheme: " + schemeName);
47
59
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=colorUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorUtils.test.d.ts","sourceRoot":"","sources":["../../../src/gl/colorUtils.test.js"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AAwZA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AAjfD;IACI;;;;;;;OAOG;IACH,uBANW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,EAsFhC;IAnFG,wBAA2B;IAC3B;;;MAKO;IAEP,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAML,uBAGC;IAFG;;;MAAmC;IAIvC;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,iBAcC;IAED,iBAEC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAS3C;IAED;;;OAGG;IACH;;;MAuBC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,8BAA8B,EAAE,OAAO,WAC9C,OAAO,QA0GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BA+BlE;CACJ"}
1
+ {"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AAyZA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AAlfD;IACI;;;;;;;OAOG;IACH,uBANW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,EAsFhC;IAnFG,wBAA2B;IAC3B;;;MAKO;IAEP,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAML,uBAGC;IAFG;;;MAAmC;IAIvC;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,iBAcC;IAED,iBAEC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAS3C;IAED;;;OAGG;IACH;;;MAuBC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,8BAA8B,EAAE,OAAO,WAC9C,OAAO,QA2GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BA+BlE;CACJ"}
@@ -291,7 +291,8 @@ export default class WebGLHelper {
291
291
  props.scheme,
292
292
  this.gl,
293
293
  count,
294
- existingTexture
294
+ existingTexture,
295
+ !!props.reverse
295
296
  );
296
297
  }
297
298
  } else if (
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";AA+FA;;;;;GAKG;AACH,8BAFW,MAAM,gBAuBhB;sBAvHqB,gBAAgB;qBAFjB,KAAK;iBAGT,kBAAkB;oBACf,6BAA6B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";AAgGA;;;;;GAKG;AACH,8BAFW,MAAM,gBAmBhB;sBApHqB,gBAAgB;qBAFjB,KAAK;iBAGT,kBAAkB;oBACf,6BAA6B"}
package/dist/src/index.js CHANGED
@@ -4,6 +4,7 @@ import { html } from "lit";
4
4
  import GenomeSpy from "./genomeSpy.js";
5
5
  import icon from "./img/bowtie.svg";
6
6
  import favIcon from "./img/genomespy-favicon.svg";
7
+ import { fetchJson } from "./utils/fetchUtils.js";
7
8
 
8
9
  export { GenomeSpy, html, icon, favIcon };
9
10
 
@@ -103,11 +104,7 @@ export async function loadSpec(url) {
103
104
  let spec;
104
105
 
105
106
  try {
106
- const response = await fetch(url);
107
- if (!response.ok) {
108
- throw new Error(`${response.status} ${response.statusText}`);
109
- }
110
- spec = await response.json();
107
+ spec = /** @type {any} */ (await fetchJson(url));
111
108
  } catch (e) {
112
109
  throw new Error(
113
110
  `Could not load or parse configuration: ${url}, reason: ${e.message}`
@@ -210,8 +210,6 @@ export default class Mark<P extends import("../spec/mark.js").MarkProps = import
210
210
  get glHelper(): import("../gl/webGLHelper.js").default;
211
211
  /** Convenience method */
212
212
  get gl(): WebGL2RenderingContext;
213
- onBeforeSampleAnimation(): void;
214
- onAfterSampleAnimation(): void;
215
213
  isReady(): import("twgl.js").ProgramInfo;
216
214
  /**
217
215
  * Returns true if this mark instance participates in picking.
@@ -1 +1 @@
1
- {"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"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"}
@@ -1151,14 +1151,6 @@ export default class Mark {
1151
1151
  return this.glHelper.gl;
1152
1152
  }
1153
1153
 
1154
- onBeforeSampleAnimation() {
1155
- // override
1156
- }
1157
-
1158
- onAfterSampleAnimation() {
1159
- // override
1160
- }
1161
-
1162
1154
  isReady() {
1163
1155
  return this.bufferInfo && this.programInfo;
1164
1156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/marks/rect.js"],"names":[],"mappings":"AA2BA;;GAEG;AACH;IACI;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EAkB/C;IAkOD;;;;;;;;;;OAUG;IACH,8BALW,GAAG,KACH,OAAO,oBAAoB,EAAE,MAAM,GACjC,GAAG,CAyBf;;CACJ;iBAhTgB,WAAW"}
1
+ {"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/marks/rect.js"],"names":[],"mappings":"AA2BA;;GAEG;AACH;IACI;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EAkB/C;IA0ND;;;;;;;;;;OAUG;IACH,8BALW,GAAG,KACH,OAAO,oBAAoB,EAAE,MAAM,GACjC,GAAG,CAyBf;;CACJ;iBAxSgB,WAAW"}
@@ -120,14 +120,6 @@ export default class RectMark extends Mark {
120
120
  return encoding;
121
121
  }
122
122
 
123
- onBeforeSampleAnimation() {
124
- // TODO: Tessellate rects inside the viewport
125
- }
126
-
127
- onAfterSampleAnimation() {
128
- // TODO: Pop the previous buffers
129
- }
130
-
131
123
  #isRoundedCorners() {
132
124
  const p = this.properties;
133
125
  return (
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Deep equality for JSON-like values (primitives, arrays, plain objects).
3
+ *
4
+ * Notes:
5
+ * - Non-plain objects (Date, Map, Set, class instances, etc.) are compared by
6
+ * reference (`Object.is`), not by value.
7
+ * - Circular references are not supported.
8
+ *
9
+ * @param {unknown} a
10
+ * @param {unknown} b
11
+ * @returns {boolean}
12
+ */
13
+ export default function deepEqual(a: unknown, b: unknown): boolean;
14
+ //# sourceMappingURL=deepEqual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepEqual.d.ts","sourceRoot":"","sources":["../../../src/utils/deepEqual.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,qCAJW,OAAO,KACP,OAAO,GACL,OAAO,CAuCnB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Deep equality for JSON-like values (primitives, arrays, plain objects).
3
+ *
4
+ * Notes:
5
+ * - Non-plain objects (Date, Map, Set, class instances, etc.) are compared by
6
+ * reference (`Object.is`), not by value.
7
+ * - Circular references are not supported.
8
+ *
9
+ * @param {unknown} a
10
+ * @param {unknown} b
11
+ * @returns {boolean}
12
+ */
13
+ export default function deepEqual(a, b) {
14
+ if (Object.is(a, b)) {
15
+ return true;
16
+ }
17
+
18
+ if (Array.isArray(a) || Array.isArray(b)) {
19
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {
20
+ return false;
21
+ }
22
+ for (let i = 0; i < a.length; i++) {
23
+ if (!deepEqual(a[i], b[i])) {
24
+ return false;
25
+ }
26
+ }
27
+ return true;
28
+ }
29
+
30
+ if (!isPlainObject(a) || !isPlainObject(b)) {
31
+ return false;
32
+ }
33
+
34
+ const keysA = Object.keys(a);
35
+ const keysB = Object.keys(b);
36
+ if (keysA.length !== keysB.length) {
37
+ return false;
38
+ }
39
+
40
+ for (const key of keysA) {
41
+ if (
42
+ !Object.prototype.hasOwnProperty.call(b, key) ||
43
+ !deepEqual(a[key], b[key])
44
+ ) {
45
+ return false;
46
+ }
47
+ }
48
+
49
+ return true;
50
+ }
51
+
52
+ /**
53
+ * @param {unknown} value
54
+ * @returns {value is Record<string, any>}
55
+ */
56
+ function isPlainObject(value) {
57
+ if (value == null || typeof value !== "object" || Array.isArray(value)) {
58
+ return false;
59
+ }
60
+
61
+ const proto = Object.getPrototypeOf(value);
62
+ return proto === Object.prototype || proto === null;
63
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deepEqual.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepEqual.test.d.ts","sourceRoot":"","sources":["../../../src/utils/deepEqual.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Fetches JSON from a URL and throws explicit errors for HTTP status and
3
+ * JSON parsing failures.
4
+ *
5
+ * @param {string} url
6
+ * @param {{ signal?: AbortSignal }} [options]
7
+ * @returns {Promise<unknown>}
8
+ */
9
+ export function fetchJson(url: string, options?: {
10
+ signal?: AbortSignal;
11
+ }): Promise<unknown>;
12
+ /**
13
+ * @typedef {"network" | "http" | "json"} FetchJsonErrorKind
14
+ */
15
+ /**
16
+ * @extends {Error}
17
+ */
18
+ export class FetchJsonError extends Error {
19
+ /**
20
+ * @param {FetchJsonErrorKind} kind
21
+ * @param {string} message
22
+ */
23
+ constructor(kind: FetchJsonErrorKind, message: string);
24
+ kind: FetchJsonErrorKind;
25
+ }
26
+ export type FetchJsonErrorKind = "network" | "http" | "json";
27
+ //# sourceMappingURL=fetchUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/fetchUtils.js"],"names":[],"mappings":"AAkBA;;;;;;;GAOG;AACH,+BAJW,MAAM,YACN;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACtB,OAAO,CAAC,OAAO,CAAC,CAsB5B;AA9CD;;GAEG;AAEH;;GAEG;AACH;IACI;;;OAGG;IACH,kBAHW,kBAAkB,WAClB,MAAM,EAKhB;IADG,yBAAgB;CAEvB;iCAfY,SAAS,GAAG,MAAM,GAAG,MAAM"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @typedef {"network" | "http" | "json"} FetchJsonErrorKind
3
+ */
4
+
5
+ /**
6
+ * @extends {Error}
7
+ */
8
+ export class FetchJsonError extends Error {
9
+ /**
10
+ * @param {FetchJsonErrorKind} kind
11
+ * @param {string} message
12
+ */
13
+ constructor(kind, message) {
14
+ super(message);
15
+ this.kind = kind;
16
+ }
17
+ }
18
+
19
+ /**
20
+ * Fetches JSON from a URL and throws explicit errors for HTTP status and
21
+ * JSON parsing failures.
22
+ *
23
+ * @param {string} url
24
+ * @param {{ signal?: AbortSignal }} [options]
25
+ * @returns {Promise<unknown>}
26
+ */
27
+ export async function fetchJson(url, options = {}) {
28
+ let response;
29
+ try {
30
+ response = await fetch(url, { signal: options.signal });
31
+ } catch (error) {
32
+ throw new FetchJsonError("network", String(error));
33
+ }
34
+
35
+ if (!response.ok) {
36
+ throw new FetchJsonError(
37
+ "http",
38
+ String(response.status) + " " + response.statusText
39
+ );
40
+ }
41
+
42
+ try {
43
+ return await response.json();
44
+ } catch (error) {
45
+ throw new FetchJsonError("json", String(error));
46
+ }
47
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fetchUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchUtils.test.d.ts","sourceRoot":"","sources":["../../../src/utils/fetchUtils.test.js"],"names":[],"mappings":""}
@@ -9,6 +9,18 @@
9
9
  * @param {string} append
10
10
  */
11
11
  export function concatUrl(base: string | (() => string), append: string): string;
12
+ /**
13
+ * Resolves a URL against a possibly relative base URL and runtime location.
14
+ *
15
+ * Unlike concatUrl, this function can normalize path segments ("..", ".")
16
+ * when enough context exists (absolute base or runtime base URI).
17
+ *
18
+ * @param {string | (() => string)} base
19
+ * @param {string} append
20
+ * @param {string | null} [runtimeBase]
21
+ * @returns {string}
22
+ */
23
+ export function resolveUrl(base: string | (() => string), append: string, runtimeBase?: string | null): string;
12
24
  /**
13
25
  * @param {string} url
14
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,gCAHW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,UAsBhB;AAED;;GAEG;AACH,kCAFW,MAAM,UAShB"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,gCAHW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,UAsBhB;AAED;;;;;;;;;;GAUG;AACH,iCALW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,gBACN,MAAM,GAAG,IAAI,GACX,MAAM,CAsBlB;AAED;;GAEG;AACH,kCAFW,MAAM,UAShB"}
@@ -32,6 +32,39 @@ export function concatUrl(base, append) {
32
32
  return getDirectory(baseString) + append;
33
33
  }
34
34
 
35
+ /**
36
+ * Resolves a URL against a possibly relative base URL and runtime location.
37
+ *
38
+ * Unlike concatUrl, this function can normalize path segments ("..", ".")
39
+ * when enough context exists (absolute base or runtime base URI).
40
+ *
41
+ * @param {string | (() => string)} base
42
+ * @param {string} append
43
+ * @param {string | null} [runtimeBase]
44
+ * @returns {string}
45
+ */
46
+ export function resolveUrl(base, append, runtimeBase = getRuntimeBase()) {
47
+ const baseString = typeof base == "function" ? base() : base;
48
+ if (!append) {
49
+ return baseString;
50
+ }
51
+
52
+ try {
53
+ if (baseString) {
54
+ const absoluteBase = runtimeBase
55
+ ? new URL(baseString, runtimeBase).href
56
+ : new URL(baseString).href;
57
+ return new URL(append, absoluteBase).href;
58
+ } else if (runtimeBase) {
59
+ return new URL(append, runtimeBase).href;
60
+ }
61
+ } catch (_error) {
62
+ // Fall back to simple concatenation below.
63
+ }
64
+
65
+ return concatUrl(baseString, append);
66
+ }
67
+
35
68
  /**
36
69
  * @param {string} url
37
70
  */
@@ -43,3 +76,15 @@ export function getDirectory(url) {
43
76
  ? url + "/"
44
77
  : directory;
45
78
  }
79
+
80
+ /**
81
+ * @returns {string | undefined}
82
+ */
83
+ function getRuntimeBase() {
84
+ if (typeof document !== "undefined" && document.baseURI) {
85
+ return document.baseURI;
86
+ }
87
+ if (typeof window !== "undefined" && window.location?.href) {
88
+ return window.location.href;
89
+ }
90
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
@@ -1009,17 +1009,21 @@ function createViewOpacityFunction(view) {
1009
1009
  let stopReaders = [];
1010
1010
 
1011
1011
  const updateInterpolator = () => {
1012
- const unitsPerPixel = asFiniteNumberArray(
1012
+ const rawUnitsPerPixel = asFiniteNumberArray(
1013
1013
  stopReaders.map((readStop) => readStop()),
1014
1014
  "opacity.unitsPerPixel",
1015
1015
  view
1016
1016
  );
1017
1017
 
1018
- validateDynamicOpacityStops(unitsPerPixel, opacityValues, view);
1018
+ const normalizedStops = normalizeDynamicOpacityStops(
1019
+ rawUnitsPerPixel,
1020
+ opacityValues,
1021
+ view
1022
+ );
1019
1023
 
1020
1024
  const scale = scaleLog()
1021
- .domain(unitsPerPixel)
1022
- .range(opacityValues)
1025
+ .domain(normalizedStops.unitsPerPixel)
1026
+ .range(normalizedStops.values)
1023
1027
  .clamp(true);
1024
1028
 
1025
1029
  interpolate = (value) => scale(value);
@@ -1105,7 +1109,7 @@ function createViewOpacityFunction(view) {
1105
1109
  * @param {number[]} values
1106
1110
  * @param {View} view
1107
1111
  */
1108
- function validateDynamicOpacityStops(unitsPerPixel, values, view) {
1112
+ function normalizeDynamicOpacityStops(unitsPerPixel, values, view) {
1109
1113
  if (!unitsPerPixel.length) {
1110
1114
  throw new ViewError(
1111
1115
  '"opacity.unitsPerPixel" must contain at least one stop.',
@@ -1131,14 +1135,28 @@ function validateDynamicOpacityStops(unitsPerPixel, values, view) {
1131
1135
  }
1132
1136
  });
1133
1137
 
1138
+ const pairs = unitsPerPixel.map((stop, index) => ({
1139
+ stop,
1140
+ value: values[index],
1141
+ }));
1142
+ pairs.sort((a, b) => b.stop - a.stop);
1143
+
1144
+ const sortedUnits = pairs.map((pair) => pair.stop);
1145
+ const sortedValues = pairs.map((pair) => pair.value);
1146
+
1134
1147
  for (let i = 1; i < unitsPerPixel.length; i++) {
1135
- if (unitsPerPixel[i - 1] <= unitsPerPixel[i]) {
1148
+ if (sortedUnits[i - 1] <= sortedUnits[i]) {
1136
1149
  throw new ViewError(
1137
1150
  '"opacity.unitsPerPixel" must be strictly decreasing.',
1138
1151
  view
1139
1152
  );
1140
1153
  }
1141
1154
  }
1155
+
1156
+ return {
1157
+ unitsPerPixel: sortedUnits,
1158
+ values: sortedValues,
1159
+ };
1142
1160
  }
1143
1161
 
1144
1162
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"viewUtils.d.ts","sourceRoot":"","sources":["../../../src/view/viewUtils.js"],"names":[],"mappings":"AASA;;;;GAIG;AACH,qCAHW,OAAO,oBAAoB,EAAE,UAAU,GAAG,OAAO,iBAAiB,EAAE,YAAY,GAC9E,IAAI,IAAI,aAAa,CAIjC;AAED;;;;GAIG;AACH,oCAHW,OAAO,oBAAoB,EAAE,aAAa,GAAG,OAAO,iBAAiB,EAAE,YAAY,GACjF,IAAI,IAAI,YAAY,CAOhC;AAED;;;GAGG;AACH,+BAFW,IAAI,6EAMd;AAED;;;;GAIG;AACH,wCAFW,IAAI,UASd;AAED;;GAEG;AACH,kDAFW,IAAI,QAiBd;AAED;;;;;;;GAOG;AACH,4CAFW,IAAI,QAUd;AAED;;;;GAIG;AACH,0DAJW,OAAO,CAAC,OAAO,kBAAkB,EAAE,OAAO,CAAC,EAAE,mBAC7C,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,CAAC,CAmBzB;AAED;;;GAGG;AACH,wCAFW,IAAI;UAGO,QAAQ;aAAW,OAAO,oBAAoB,EAAE,OAAO;WAAS,OAAO,oBAAoB,EAAE,KAAK;UAAQ,OAAO,oBAAoB,EAAE,IAAI;IAqBhK;AAED;;;;;GAKG;AACH,2CALW,OAAO,iBAAiB,EAAE,UAAU,WACpC,MAAM,eACN,OAAO,yBAAyB,EAAE,OAAO,GACvC,OAAO,CAAC,OAAO,iBAAiB,EAAE,QAAQ,CAAC,CAsCvD;AAED;;GAEG;AACH,yCAFW,CAAS,IAAI,EAAJ,IAAI,EAAE,IAAM,EAAN,IAAI,EAAE,KAAE,IAAI,+BAkBrC;AAED;;;GAGG;AACH,0CAFW,IAAI,eAqBd;AAED;;GAEG;AACH,8CAFW,OAAO,WAAW,EAAE,OAAO;;;EAoBrC;iBA3P4C,WAAW;qBAFnC,eAAe"}
1
+ {"version":3,"file":"viewUtils.d.ts","sourceRoot":"","sources":["../../../src/view/viewUtils.js"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,qCAHW,OAAO,oBAAoB,EAAE,UAAU,GAAG,OAAO,iBAAiB,EAAE,YAAY,GAC9E,IAAI,IAAI,aAAa,CAIjC;AAED;;;;GAIG;AACH,oCAHW,OAAO,oBAAoB,EAAE,aAAa,GAAG,OAAO,iBAAiB,EAAE,YAAY,GACjF,IAAI,IAAI,YAAY,CAOhC;AAED;;;GAGG;AACH,+BAFW,IAAI,6EAMd;AAED;;;;GAIG;AACH,wCAFW,IAAI,UASd;AAED;;GAEG;AACH,kDAFW,IAAI,QAiBd;AAED;;;;;;;GAOG;AACH,4CAFW,IAAI,QAUd;AAED;;;;GAIG;AACH,0DAJW,OAAO,CAAC,OAAO,kBAAkB,EAAE,OAAO,CAAC,EAAE,mBAC7C,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,CAAC,CAmBzB;AAED;;;GAGG;AACH,wCAFW,IAAI;UAGO,QAAQ;aAAW,OAAO,oBAAoB,EAAE,OAAO;WAAS,OAAO,oBAAoB,EAAE,KAAK;UAAQ,OAAO,oBAAoB,EAAE,IAAI;IAqBhK;AAED;;;;;GAKG;AACH,2CALW,OAAO,iBAAiB,EAAE,UAAU,WACpC,MAAM,eACN,OAAO,yBAAyB,EAAE,OAAO,GACvC,OAAO,CAAC,OAAO,iBAAiB,EAAE,QAAQ,CAAC,CAoCvD;AAED;;GAEG;AACH,yCAFW,CAAS,IAAI,EAAJ,IAAI,EAAE,IAAM,EAAN,IAAI,EAAE,KAAE,IAAI,+BAkBrC;AAED;;;GAGG;AACH,0CAFW,IAAI,eAqBd;AAED;;GAEG;AACH,8CAFW,OAAO,WAAW,EAAE,OAAO;;;EAoBrC;iBA1P4C,WAAW;qBAFnC,eAAe"}
@@ -6,6 +6,7 @@ import View, { VISIT_SKIP, VISIT_STOP } from "./view.js";
6
6
  import { isFieldDef, primaryPositionalChannels } from "../encoder/encoder.js";
7
7
  import { rollup } from "d3-array";
8
8
  import { concatUrl, getDirectory } from "../utils/url.js";
9
+ import { fetchJson } from "../utils/fetchUtils.js";
9
10
 
10
11
  /**
11
12
  *
@@ -160,11 +161,9 @@ export async function loadExternalViewSpec(spec, baseUrl, viewContext) {
160
161
  let importedSpec;
161
162
 
162
163
  try {
163
- const result = await fetch(url);
164
- if (!result.ok) {
165
- throw new Error(`${result.status} ${result.statusText}`);
166
- }
167
- importedSpec = await result.json();
164
+ importedSpec = /** @type {import("../spec/view.js").ViewSpec} */ (
165
+ await fetchJson(url)
166
+ );
168
167
  } catch (e) {
169
168
  throw new Error(
170
169
  `Could not load imported view spec: ${url}. Reason: ${e.message}`
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "contributors": [],
9
9
  "license": "MIT",
10
- "version": "0.69.0",
10
+ "version": "0.70.0",
11
11
  "jsdelivr": "dist/bundle/index.js",
12
12
  "unpkg": "dist/bundle/index.js",
13
13
  "browser": "dist/bundle/index.js",
@@ -67,5 +67,5 @@
67
67
  "devDependencies": {
68
68
  "@types/long": "^4.0.1"
69
69
  },
70
- "gitHead": "bfb9bd98ceb875f90a458b876208b15b6c12c9f3"
70
+ "gitHead": "7ab5f3feb1bdcc8df7a437a031dbbaac7cbaffd9"
71
71
  }