@genome-spy/core 0.69.1 → 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 (44) 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 +8778 -9046
  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/viewUtils.d.ts.map +1 -1
  41. package/dist/src/view/viewUtils.js +4 -5
  42. package/package.json +2 -2
  43. package/dist/bundle/index-ByuE8dvu.js +0 -332
  44. 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":"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.1",
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": "bbbc1860a0730070d0a7c1ca7a9923d4a5d25366"
70
+ "gitHead": "7ab5f3feb1bdcc8df7a437a031dbbaac7cbaffd9"
71
71
  }