@genome-spy/core 0.51.0 → 0.53.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.
- package/dist/bundle/{index-C8lYPtq_.js → index-B5cesONJ.js} +21 -21
- package/dist/bundle/index-BJLu48Hz.js +274 -0
- package/dist/bundle/{index-Sk-Wtwdn.js → index-BywMLhhd.js} +963 -989
- package/dist/bundle/{index-BwFvhduA.js → index-CSayoXbw.js} +7 -9
- package/dist/bundle/{index-CkI3Kd2P.js → index-DAJ8JQLE.js} +6 -5
- package/dist/bundle/{index-BtRKzKhM.js → index-_tI-fMQF.js} +414 -415
- package/dist/bundle/{index-CmBp-spD.js → index-e0oKgZbZ.js} +36 -36
- package/dist/bundle/{index-Z7JiNsFI.js → index-oqw_s02W.js} +10 -11
- package/dist/bundle/{index-mihmTLo-.js → index-uO0O4Uv-.js} +22 -22
- package/dist/bundle/index.es.js +4088 -4006
- package/dist/bundle/index.js +233 -112
- package/dist/bundle/{long-CYrAUkxh.js → long-D4tVjLLz.js} +5 -5
- package/dist/bundle/remoteFile-BkTxwFub.js +90 -0
- package/dist/schema.json +53 -12
- package/dist/src/data/sources/dataUtils.d.ts +5 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +9 -0
- package/dist/src/data/sources/lazy/axisTickSource.js +1 -1
- package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigWigSource.js +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +4 -6
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.js +4 -18
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +12 -7
- package/dist/src/data/transforms/clone.d.ts +1 -2
- package/dist/src/data/transforms/clone.d.ts.map +1 -1
- package/dist/src/data/transforms/clone.js +19 -4
- package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
- package/dist/src/data/transforms/filterScoredLabels.js +1 -4
- package/dist/src/data/transforms/transformFactory.d.ts.map +1 -1
- package/dist/src/encoder/encoder.d.ts +1 -1
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/fonts/bmFontMetrics.d.ts.map +1 -1
- package/dist/src/genome/genome.d.ts +24 -2
- package/dist/src/genome/genome.d.ts.map +1 -1
- package/dist/src/genome/genome.js +66 -28
- package/dist/src/genome/genome.test.js +43 -1
- package/dist/src/genome/genomes.d.ts +8 -0
- package/dist/src/genome/genomes.d.ts.map +1 -0
- package/dist/src/genome/genomes.js +164 -0
- package/dist/src/genome/genomes.test.d.ts +2 -0
- package/dist/src/genome/genomes.test.d.ts.map +1 -0
- package/dist/src/genome/genomes.test.js +8 -0
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/spec/axis.d.ts +0 -2
- package/dist/src/spec/genome.d.ts +19 -6
- package/dist/src/spec/scale.d.ts +1 -1
- package/dist/src/utils/addBaseUrl.d.ts +6 -0
- package/dist/src/utils/addBaseUrl.d.ts.map +1 -1
- package/dist/src/utils/addBaseUrl.js +18 -0
- package/dist/src/utils/addBaseUrl.test.js +9 -1
- package/dist/src/utils/cloner.d.ts +8 -2
- package/dist/src/utils/cloner.d.ts.map +1 -1
- package/dist/src/utils/cloner.js +19 -2
- package/dist/src/utils/cloner.test.js +16 -5
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/ui/tooltip.d.ts +1 -1
- package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
- package/dist/src/view/layerView.d.ts.map +1 -1
- package/dist/src/view/layerView.js +4 -1
- package/dist/src/view/paramMediator.d.ts +8 -3
- package/dist/src/view/paramMediator.d.ts.map +1 -1
- package/dist/src/view/paramMediator.js +3 -1
- package/dist/src/view/scaleResolution.d.ts +9 -0
- package/dist/src/view/scaleResolution.d.ts.map +1 -1
- package/dist/src/view/scaleResolution.js +30 -0
- package/dist/src/view/view.d.ts +20 -3
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +30 -2
- package/dist/src/view/view.test.js +15 -5
- package/dist/src/view/zoom.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/bundle/index-Dixm7K89.js +0 -279
- package/dist/bundle/remoteFile-1_eCK3VV.js +0 -96
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { bisect } from "d3-array";
|
|
2
2
|
import { tsvParseRows } from "d3-dsv";
|
|
3
|
-
import { loader } from "vega-loader";
|
|
4
3
|
import { isObject } from "vega-util";
|
|
5
4
|
import { formatRange } from "./locusFormat.js";
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import { getContigs } from "./genomes.js";
|
|
6
|
+
import { concatUrl } from "../utils/url.js";
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* @typedef {import("../spec/genome.js").GenomeConfig} GenomeConfig
|
|
@@ -33,11 +32,17 @@ export default class Genome {
|
|
|
33
32
|
* @param {GenomeConfig} config
|
|
34
33
|
*/
|
|
35
34
|
constructor(config) {
|
|
36
|
-
this.config = config;
|
|
35
|
+
this.config = { name: "custom", ...config };
|
|
36
|
+
|
|
37
|
+
if ("baseUrl" in config) {
|
|
38
|
+
throw new Error(
|
|
39
|
+
"The `baseUrl` property in genome config has been removed in GenomeSpy v0.52.0. Use `url` instead. See https://genomespy.app/docs/genomic-data/genomic-coordinates/."
|
|
40
|
+
);
|
|
41
|
+
}
|
|
37
42
|
|
|
38
|
-
if (!
|
|
43
|
+
if (!isGenomeConfig(config)) {
|
|
39
44
|
throw new Error(
|
|
40
|
-
"
|
|
45
|
+
"Not a genome configuration: " + JSON.stringify(config)
|
|
41
46
|
);
|
|
42
47
|
}
|
|
43
48
|
|
|
@@ -55,8 +60,19 @@ export default class Genome {
|
|
|
55
60
|
|
|
56
61
|
this.totalSize = 0;
|
|
57
62
|
|
|
58
|
-
if (this.config
|
|
63
|
+
if (isInlineGenomeConfig(this.config)) {
|
|
59
64
|
this.setChromSizes(this.config.contigs);
|
|
65
|
+
} else if (isUrlGenomeConfig(this.config)) {
|
|
66
|
+
// Nop
|
|
67
|
+
} else {
|
|
68
|
+
const contigs = getContigs(this.config.name);
|
|
69
|
+
if (contigs) {
|
|
70
|
+
this.setChromSizes(contigs);
|
|
71
|
+
} else {
|
|
72
|
+
throw new Error(
|
|
73
|
+
`Unknown genome: ${this.config.name}. Please provide contigs or a URL. See https://genomespy.app/docs/genomic-data/genomic-coordinates/.`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
60
76
|
}
|
|
61
77
|
}
|
|
62
78
|
|
|
@@ -68,28 +84,21 @@ export default class Genome {
|
|
|
68
84
|
* @param {string} baseUrl
|
|
69
85
|
*/
|
|
70
86
|
async load(baseUrl) {
|
|
71
|
-
if (this.config
|
|
87
|
+
if (!isUrlGenomeConfig(this.config)) {
|
|
72
88
|
return;
|
|
73
89
|
}
|
|
74
90
|
|
|
75
|
-
if (this.config.baseUrl) {
|
|
76
|
-
this.baseUrl = /^http(s)?/.test(this.config.baseUrl)
|
|
77
|
-
? this.config.baseUrl
|
|
78
|
-
: baseUrl + "/" + this.config.baseUrl;
|
|
79
|
-
} else {
|
|
80
|
-
this.baseUrl = defaultBaseUrl;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
91
|
try {
|
|
84
|
-
this.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
);
|
|
92
|
+
const fullUrl = concatUrl(baseUrl, this.config.url);
|
|
93
|
+
const result = await fetch(fullUrl);
|
|
94
|
+
if (!result.ok) {
|
|
95
|
+
throw new Error(`${result.status} ${result.statusText}`);
|
|
96
|
+
}
|
|
97
|
+
this.setChromSizes(parseChromSizes(await result.text()));
|
|
91
98
|
} catch (e) {
|
|
92
|
-
throw new Error(
|
|
99
|
+
throw new Error(
|
|
100
|
+
`Could not load chrom sizes: ${this.config.url}. Reason: ${e.message}`
|
|
101
|
+
);
|
|
93
102
|
}
|
|
94
103
|
}
|
|
95
104
|
|
|
@@ -354,10 +363,10 @@ export default class Genome {
|
|
|
354
363
|
* @param {string} chromSizesData
|
|
355
364
|
*/
|
|
356
365
|
export function parseChromSizes(chromSizesData) {
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
366
|
+
return tsvParseRows(chromSizesData).map(([name, size]) => ({
|
|
367
|
+
name,
|
|
368
|
+
size: parseInt(size),
|
|
369
|
+
}));
|
|
361
370
|
}
|
|
362
371
|
|
|
363
372
|
/**
|
|
@@ -377,3 +386,32 @@ export function isChromosomalLocus(value) {
|
|
|
377
386
|
export function isChromosomalLocusInterval(value) {
|
|
378
387
|
return value.every(isChromosomalLocus);
|
|
379
388
|
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* @param {any} value
|
|
392
|
+
* @returns {value is GenomeConfig}
|
|
393
|
+
*/
|
|
394
|
+
export function isGenomeConfig(value) {
|
|
395
|
+
return (
|
|
396
|
+
isObject(value) &&
|
|
397
|
+
("name" in value ||
|
|
398
|
+
isUrlGenomeConfig(value) ||
|
|
399
|
+
isInlineGenomeConfig(value))
|
|
400
|
+
);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* @param {any} value
|
|
405
|
+
* @returns {value is import("../spec/genome.js").UrlGenomeConfig }
|
|
406
|
+
*/
|
|
407
|
+
export function isUrlGenomeConfig(value) {
|
|
408
|
+
return isGenomeConfig(value) && "url" in value;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* @param {any} value
|
|
413
|
+
* @returns {value is import("../spec/genome.js").InlineGenomeConfig}
|
|
414
|
+
*/
|
|
415
|
+
export function isInlineGenomeConfig(value) {
|
|
416
|
+
return isGenomeConfig(value) && "contigs" in value;
|
|
417
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, expect, test } from "vitest";
|
|
1
|
+
import { afterAll, describe, expect, test, vi } from "vitest";
|
|
2
2
|
import Genome from "./genome.js";
|
|
3
3
|
|
|
4
4
|
describe("Human genome, chromosome names prefixed with 'chr'", () => {
|
|
@@ -190,6 +190,48 @@ describe("C. elegans genome, chromosome names prefixed with 'chr'", () => {
|
|
|
190
190
|
});
|
|
191
191
|
});
|
|
192
192
|
|
|
193
|
+
describe("Load chrom.sizes file from a URL", () => {
|
|
194
|
+
const fetchSpy = vi.spyOn(global, "fetch");
|
|
195
|
+
fetchSpy.mockImplementation((/** @type {string} */ url) => {
|
|
196
|
+
if (url !== "http://example.com/chrom.sizes") {
|
|
197
|
+
throw new Error(`Unexpected URL: ${url}`);
|
|
198
|
+
}
|
|
199
|
+
return Promise.resolve(
|
|
200
|
+
// @ts-expect-error
|
|
201
|
+
{
|
|
202
|
+
text() {
|
|
203
|
+
return Promise.resolve(
|
|
204
|
+
"chr1\t1000\nchr2\t2000\nchr3\t3000\nchrX\t4000"
|
|
205
|
+
);
|
|
206
|
+
},
|
|
207
|
+
ok: true,
|
|
208
|
+
}
|
|
209
|
+
);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
afterAll(() => {
|
|
213
|
+
fetchSpy.mockRestore();
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test("Throw if the deprecated baseUrl property is provided", () => {
|
|
217
|
+
expect(
|
|
218
|
+
() =>
|
|
219
|
+
new Genome({
|
|
220
|
+
name: "random",
|
|
221
|
+
// @ts-expect-error
|
|
222
|
+
baseUrl: "http://example.com",
|
|
223
|
+
})
|
|
224
|
+
).toThrow(/removed/);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
test("Loads and parses a genome", async () => {
|
|
228
|
+
const g = new Genome({ name: "random", url: "chrom.sizes" });
|
|
229
|
+
await g.load("http://example.com");
|
|
230
|
+
|
|
231
|
+
expect(g.parseInterval("chr2")).toEqual([1000, 3000]);
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
|
|
193
235
|
describe("Parse interval strings", () => {
|
|
194
236
|
const chromosomes = [
|
|
195
237
|
{ name: "chr1", size: 1000 },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genomes.d.ts","sourceRoot":"","sources":["../../../src/genome/genomes.js"],"names":[],"mappings":"AAwJA;;GAEG;AACH,qCAFW,MAAM;;;IAUhB"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Based on chrom.sizes files from UCSC Genome Browser
|
|
3
|
+
* https://hgdownload.cse.ucsc.edu/goldenpath/
|
|
4
|
+
*
|
|
5
|
+
* Alternative loci, patches, and random contigs are not included.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const dm6 = `chr3R 32079331
|
|
9
|
+
chr3L 28110227
|
|
10
|
+
chr2R 25286936
|
|
11
|
+
chrX 23542271
|
|
12
|
+
chr2L 23513712
|
|
13
|
+
chrY 3667352
|
|
14
|
+
chr4 1348131
|
|
15
|
+
chrM 19524`;
|
|
16
|
+
|
|
17
|
+
const hg18 = `chr1 247249719
|
|
18
|
+
chr2 242951149
|
|
19
|
+
chr3 199501827
|
|
20
|
+
chr4 191273063
|
|
21
|
+
chr5 180857866
|
|
22
|
+
chr6 170899992
|
|
23
|
+
chr7 158821424
|
|
24
|
+
chr8 146274826
|
|
25
|
+
chr9 140273252
|
|
26
|
+
chr10 135374737
|
|
27
|
+
chr11 134452384
|
|
28
|
+
chr12 132349534
|
|
29
|
+
chr13 114142980
|
|
30
|
+
chr14 106368585
|
|
31
|
+
chr15 100338915
|
|
32
|
+
chr16 88827254
|
|
33
|
+
chr17 78774742
|
|
34
|
+
chr18 76117153
|
|
35
|
+
chr19 63811651
|
|
36
|
+
chr20 62435964
|
|
37
|
+
chr21 46944323
|
|
38
|
+
chr22 49691432
|
|
39
|
+
chrX 154913754
|
|
40
|
+
chrY 57772954
|
|
41
|
+
chrM 16571`;
|
|
42
|
+
|
|
43
|
+
const hg19 = `chr1 249250621
|
|
44
|
+
chr2 243199373
|
|
45
|
+
chr3 198022430
|
|
46
|
+
chr4 191154276
|
|
47
|
+
chr5 180915260
|
|
48
|
+
chr6 171115067
|
|
49
|
+
chr7 159138663
|
|
50
|
+
chr8 146364022
|
|
51
|
+
chr9 141213431
|
|
52
|
+
chr10 135534747
|
|
53
|
+
chr11 135006516
|
|
54
|
+
chr12 133851895
|
|
55
|
+
chr13 115169878
|
|
56
|
+
chr14 107349540
|
|
57
|
+
chr15 102531392
|
|
58
|
+
chr16 90354753
|
|
59
|
+
chr17 81195210
|
|
60
|
+
chr18 78077248
|
|
61
|
+
chr19 59128983
|
|
62
|
+
chr20 63025520
|
|
63
|
+
chr21 48129895
|
|
64
|
+
chr22 51304566
|
|
65
|
+
chrX 155270560
|
|
66
|
+
chrY 59373566
|
|
67
|
+
chrM 16571`;
|
|
68
|
+
|
|
69
|
+
const hg38 = `chr1 248956422
|
|
70
|
+
chr2 242193529
|
|
71
|
+
chr3 198295559
|
|
72
|
+
chr4 190214555
|
|
73
|
+
chr5 181538259
|
|
74
|
+
chr6 170805979
|
|
75
|
+
chr7 159345973
|
|
76
|
+
chr8 145138636
|
|
77
|
+
chr9 138394717
|
|
78
|
+
chr10 133797422
|
|
79
|
+
chr11 135086622
|
|
80
|
+
chr12 133275309
|
|
81
|
+
chr13 114364328
|
|
82
|
+
chr14 107043718
|
|
83
|
+
chr15 101991189
|
|
84
|
+
chr16 90338345
|
|
85
|
+
chr17 83257441
|
|
86
|
+
chr18 80373285
|
|
87
|
+
chr19 58617616
|
|
88
|
+
chr20 64444167
|
|
89
|
+
chr21 46709983
|
|
90
|
+
chr22 50818468
|
|
91
|
+
chrX 156040895
|
|
92
|
+
chrY 57227415
|
|
93
|
+
chrM 16569`;
|
|
94
|
+
|
|
95
|
+
const mm9 = `chr1 197195432
|
|
96
|
+
chr2 181748087
|
|
97
|
+
chr3 159599783
|
|
98
|
+
chr4 155630120
|
|
99
|
+
chr5 152537259
|
|
100
|
+
chr6 149517037
|
|
101
|
+
chr7 152524553
|
|
102
|
+
chr8 131738871
|
|
103
|
+
chr9 124076172
|
|
104
|
+
chr10 129993255
|
|
105
|
+
chr11 121843856
|
|
106
|
+
chr12 121257530
|
|
107
|
+
chr13 120284312
|
|
108
|
+
chr14 125194864
|
|
109
|
+
chr15 103494974
|
|
110
|
+
chr16 98319150
|
|
111
|
+
chr17 95272651
|
|
112
|
+
chr18 90772031
|
|
113
|
+
chr19 61342430
|
|
114
|
+
chrX 166650296
|
|
115
|
+
chrY 15902555
|
|
116
|
+
chrM 16299`;
|
|
117
|
+
|
|
118
|
+
const mm10 = `chr1 195471971
|
|
119
|
+
chr2 182113224
|
|
120
|
+
chr3 160039680
|
|
121
|
+
chr4 156508116
|
|
122
|
+
chr5 151834684
|
|
123
|
+
chr6 149736546
|
|
124
|
+
chr7 145441459
|
|
125
|
+
chr8 129401213
|
|
126
|
+
chr9 124595110
|
|
127
|
+
chr10 130694993
|
|
128
|
+
chr11 122082543
|
|
129
|
+
chr12 120129022
|
|
130
|
+
chr13 120421639
|
|
131
|
+
chr14 124902244
|
|
132
|
+
chr15 104043685
|
|
133
|
+
chr16 98207768
|
|
134
|
+
chr17 94987271
|
|
135
|
+
chr18 90702639
|
|
136
|
+
chr19 61431566
|
|
137
|
+
chrX 171031299
|
|
138
|
+
chrY 91744698
|
|
139
|
+
chrM 16299`;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @type {Record<string, string>}
|
|
143
|
+
*/
|
|
144
|
+
const assemblies = {
|
|
145
|
+
dm6,
|
|
146
|
+
hg18,
|
|
147
|
+
hg19,
|
|
148
|
+
hg38,
|
|
149
|
+
mm9,
|
|
150
|
+
mm10,
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @param {string} assembly
|
|
155
|
+
*/
|
|
156
|
+
export function getContigs(assembly) {
|
|
157
|
+
if (!(assembly in assemblies))
|
|
158
|
+
throw new Error(`Unknown assembly: ${assembly}`);
|
|
159
|
+
|
|
160
|
+
return assemblies[assembly].split("\n").map((line) => {
|
|
161
|
+
const arr = line.split("\t");
|
|
162
|
+
return { name: arr[0], size: parseInt(arr[1]) };
|
|
163
|
+
});
|
|
164
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genomes.test.d.ts","sourceRoot":"","sources":["../../../src/genome/genomes.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { getContigs } from "./genomes.js";
|
|
3
|
+
|
|
4
|
+
test("getContigs", () => {
|
|
5
|
+
expect(getContigs("mm10")[0]).toEqual({ name: "chr1", size: 195471971 });
|
|
6
|
+
expect(getContigs("mm10")[5]).toEqual({ name: "chr6", size: 149736546 });
|
|
7
|
+
expect(getContigs("hg38")[19]).toEqual({ name: "chr20", size: 64444167 });
|
|
8
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genomeSpy.d.ts","sourceRoot":"","sources":["../../src/genomeSpy.js"],"names":[],"mappings":"AA6CA;IACI;;;;;OAKG;IAEH;;;;;OAKG;IACH,uBAJW,WAAW,qDAEX,OAAO,qBAAqB,EAAE,YAAY,EA6FpD;IA1FG,uBAA0B;IAC1B,oDAAsB;IAItB,6BAA6B;IAC7B,uBADW,CAAC,MAAM,IAAI,CAAC,EAAE,CACM;IAE/B,sCAAsC;IACtC,wCAAgB;IAEhB,yBAAoC;IAEpC,4CAA4C;IAC5C,oBADW,QAAU,MAAM,KAAE,MAAM,EAAE,CAAC,EAAE,CACZ;IAE5B,mBAAoD;IAEpD,0BAA0B;IAC1B,aADW,WAAW,CACM;IAE5B;;;;;OAKG;IACH,qEAF0B,OAAO,CAE8B;IAE/D,2CAA2C;IAC3C,mBADW,4BAA4B,CACL;IAClC,2CAA2C;IAC3C,iBADW,4BAA4B,CACP;IAEhC,oDAAoD;IACpD,6BAAgC;IAEhC;;;OAGG;IACH,eAFU;QAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAEpF;IAE9B,uBAA+C;IAE/C;;;OAGG;IACH,oBAFU,IAAI,MAAM,EAAE,QAAU,aAAa,KAAE,IAAI,CAAC,EAAE,CAAC,CAEpB;IAEnC;;;;;;OAMG;IACH,
|
|
1
|
+
{"version":3,"file":"genomeSpy.d.ts","sourceRoot":"","sources":["../../src/genomeSpy.js"],"names":[],"mappings":"AA6CA;IACI;;;;;OAKG;IAEH;;;;;OAKG;IACH,uBAJW,WAAW,qDAEX,OAAO,qBAAqB,EAAE,YAAY,EA6FpD;IA1FG,uBAA0B;IAC1B,oDAAsB;IAItB,6BAA6B;IAC7B,uBADW,CAAC,MAAM,IAAI,CAAC,EAAE,CACM;IAE/B,sCAAsC;IACtC,wCAAgB;IAEhB,yBAAoC;IAEpC,4CAA4C;IAC5C,oBADW,QAAU,MAAM,KAAE,MAAM,EAAE,CAAC,EAAE,CACZ;IAE5B,mBAAoD;IAEpD,0BAA0B;IAC1B,aADW,WAAW,CACM;IAE5B;;;;;OAKG;IACH,qEAF0B,OAAO,CAE8B;IAE/D,2CAA2C;IAC3C,mBADW,4BAA4B,CACL;IAClC,2CAA2C;IAC3C,iBADW,4BAA4B,CACP;IAEhC,oDAAoD;IACpD,6BAAgC;IAEhC;;;OAGG;IACH,eAFU;QAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAEpF;IAE9B,uBAA+C;IAE/C;;;OAGG;IACH,oBAFU,IAAI,MAAM,EAAE,QAAU,aAAa,KAAE,IAAI,CAAC,EAAE,CAAC,CAEpB;IAEnC;;;;;;OAMG;IACH,iBAFU,IAAI,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAEhB;IAEhC;;;OAGG;IACH,0BAFU,IAAI,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAEP;IAEzC,oFAAoF;IACpF,iBADW,OAAO,MAAM,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC,CAK9E;IAED,mBAAmB;IACnB,2CAAyB;IAEzB;;;;OAIG;IACH;gBAF8B,OAAO,wBAAwB,EAAE,iBAAiB;iBAAW,MAAM;OAEnE;IAE9B;;OAEG;IACH,wBAFU,WAAW,CAEkB;IAEvC,oBAAoB;IACpB,kBADW,KAAK,CACiB;IA2CrC;;;OAGG;IACH,oCAFW,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,QAIjC;IAED;;OAEG;IACH,+BAFW,MAAM,YAShB;IAED;;;;OAIG;IACH,sBAHW,MAAM,QACN,GAAG,EAAE,QAaf;IAED;;;;;OAKG;IACH,gBAHW,kBAAkB,YAClB,GAAG,QAQb;IAED;;;OAGG;IACH,iCAwDC;IA4DG,uBAQC;IAGD,mCAGE;IAOF,sCAEE;IAGF,iBAA0C;IAW9C;;OAEG;IACH,gBAuBC;IAED,sCA6MC;IAED;;;OAGG;IACH,UAFa,QAAQ,OAAO,CAAC,CA6B5B;IAED,4BA8JC;IAvIe,iCAAoC;IAyIpD;;;OAGG;IACH,kBAHW,MAAM,KACN,MAAM,QAqEhB;IAED;;;;;;;OAOG;IACH,oDAHuB,QAAQ,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAYlF;IAED,sBA6CC;IAED,kBAIC;IAED,iCAOC;IAED,iCASC;IAED,qFAWC;;CACJ;;;;iCAt8BY,eAAe,GAAG,YAAY,GAAG,QAAQ,GAAG,gBAAgB;4BAP7B,uBAAuB;qBAZ9C,qBAAqB;wBAIlB,yBAAyB;yCARR,yDAAyD;oBAYvD,oBAAoB;kBAT7C,wBAAwB;wBALlB,qBAAqB;oBATzB,uBAAuB;qBAOtB,oBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataToVertices.d.ts","sourceRoot":"","sources":["../../../src/gl/dataToVertices.js"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH;IACI;;;OAGG;IAEH;;;;;;OAMG;IACH;;qBAJW,MAAM,EAAE;sBACR,MAAM;OAyFhB;IArFG,8FAAwB;IAIxB,sGAQK;IAQL,0BAAoC;IAEpC,8BAAoD;IA2DpD,mBAAmB;IAEnB,yFAAyF;IACzF,UADW,IAAI,GAAG,EAAE,UAAU,CAAC,CACkB;IAGrD;;;;OAIG;IACH,mBAFW,GAAG,QAcb;IAED;;OAEG;IACH,oBAFW,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,QAM5B;IAED;;;OAGG;IACH,cAHW,GAAG,QACH,MAAM,EAAE,kCAYlB;IAED;;;;OAIG;IACH,sBAJW,OAAO,qBAAqB,EAAE,IAAI,OAClC,MAAM,OACN,MAAM,QAgEhB;IAED;;;;;OAKG;IACH,mBAFW,OAAO,qBAAqB,EAAE,KAAK,QAI7C;IAhEO;;;MAAyB;IAkEjC;QAEQ,kJAAkJ;gBAAvI,OAAO,MAAM,EAAE;YAAC,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAE9I,8BAA8B;;QAE9B,8CAA8C;;;MAIrD;CACJ;AAED;IACI;;;;;;OAMG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OA+BhB;IAnBG,qBAkBW;CA8BlB;AAED;IACI;;;;;;;;;OASG;IACH;;oBANW,MAAM,EAAE;gCACR,MAAM;uBAEN,MAAM,EAAE;mBACR,MAAM;OAwBhB;IARG,uBAAgC;IAEhC,8BAA8D;IAE9D,6CAA+D;IAC/D,4CAA6D;CA6CpE;AAED;IACI;;;;;;OAMG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAShB;CACJ;AAED;IACI;;;;;OAKG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAShB;CAYJ;AAED;IACI;;;;;;;;;OASG;IACH;;oBANW,MAAM,EAAE;qBACR,OAAO,2BAA2B,EAAE,aAAa;oBACjD,OAAO,MAAM,EAAE,GAAG,CAAC;wBACnB,MAAM;sBACN,OAAO;OA6CjB;IA9BG,4DAA2B;IAC3B,2DAA0B;IAE1B,gCAA4B;IAO5B,qCAAqC;IACrC,
|
|
1
|
+
{"version":3,"file":"dataToVertices.d.ts","sourceRoot":"","sources":["../../../src/gl/dataToVertices.js"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH;IACI;;;OAGG;IAEH;;;;;;OAMG;IACH;;qBAJW,MAAM,EAAE;sBACR,MAAM;OAyFhB;IArFG,8FAAwB;IAIxB,sGAQK;IAQL,0BAAoC;IAEpC,8BAAoD;IA2DpD,mBAAmB;IAEnB,yFAAyF;IACzF,UADW,IAAI,GAAG,EAAE,UAAU,CAAC,CACkB;IAGrD;;;;OAIG;IACH,mBAFW,GAAG,QAcb;IAED;;OAEG;IACH,oBAFW,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,QAM5B;IAED;;;OAGG;IACH,cAHW,GAAG,QACH,MAAM,EAAE,kCAYlB;IAED;;;;OAIG;IACH,sBAJW,OAAO,qBAAqB,EAAE,IAAI,OAClC,MAAM,OACN,MAAM,QAgEhB;IAED;;;;;OAKG;IACH,mBAFW,OAAO,qBAAqB,EAAE,KAAK,QAI7C;IAhEO;;;MAAyB;IAkEjC;QAEQ,kJAAkJ;gBAAvI,OAAO,MAAM,EAAE;YAAC,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAE9I,8BAA8B;;QAE9B,8CAA8C;;;MAIrD;CACJ;AAED;IACI;;;;;;OAMG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OA+BhB;IAnBG,qBAkBW;CA8BlB;AAED;IACI;;;;;;;;;OASG;IACH;;oBANW,MAAM,EAAE;gCACR,MAAM;uBAEN,MAAM,EAAE;mBACR,MAAM;OAwBhB;IARG,uBAAgC;IAEhC,8BAA8D;IAE9D,6CAA+D;IAC/D,4CAA6D;CA6CpE;AAED;IACI;;;;;;OAMG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAShB;CACJ;AAED;IACI;;;;;OAKG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAShB;CAYJ;AAED;IACI;;;;;;;;;OASG;IACH;;oBANW,MAAM,EAAE;qBACR,OAAO,2BAA2B,EAAE,aAAa;oBACjD,OAAO,MAAM,EAAE,GAAG,CAAC;wBACnB,MAAM;sBACN,OAAO;OA6CjB;IA9BG,4DAA2B;IAC3B,2DAA0B;IAE1B,gCAA4B;IAO5B,qCAAqC;IACrC,cADW,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAMf;IAElB,oDAGC;IACD,qDAGC;IAED,8CAAiE;CAgJxE;;;;;;;;YAnnBS,MAAM;;;;WACN,MAAM;YACN,OAAO,yBAAyB,EAAE,MAAM;;yBAjBzB,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":";AAqDA;;;;;GAKG;AACH,kDAJW,OAAO,mBACP,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,mDALW,OAAO,mBACP,MAAM,SACN,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAClC,aAAa,CA4CzB;AAED;;;;;;;GAOG;AACH,4DAJW,OAAO,mBACP,MAAM,GACJ,aAAa,CAkCzB;AAED;;;;;;GAMG;AACH,0CANW,OAAO,SACP,GAAG,mBACH,MAAM,+BACN,OAAO,EAAE,GACP,aAAa,CA+BzB;AACD;;;;;GAKG;AACH,qDALW,OAAO,SACP,GAAG,mBACH,MAAM,GACJ,aAAa,CAyBzB;AAED;;;;;GAKG;AAEH,2CALW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU;;;;;;EAwQjD;AAED;;;;GAIG;AACH,wDAHW,OAAO,aACP,OAAO,qBAAqB,EAAE,QAAQ,EAAE,UAuClD;AAmED;;GAEG;AACH,qDAFW,OAAO,6BAQjB;AA+CD;;;;GAIG;AACH,iDAHW,OAAO,qBAAqB,EAAE,SAAS,WACvC,OAAO,oBAAoB,EAAE,OAAO;mBAQjB,MAAM;sBAAoB,sBAAsB,GAAG,sBAAsB,GAAG,uBAAuB;;;;;;EAkBhI;AAED;;;;GAIG;AACH,2CAFW,MAAM,WAIhB;AAED;;;;GAIG;AACH,sCAFW,MAAM,EAAE,WAIlB;AAMD;;;GAGG;AACH,sCAHW,MAAM,QACN,MAAM,EAAE,YAYlB;AAED;;;GAGG;AACH,2CAHW,MAAM,QACN,MAAM,EAAE,YAUlB;AAYD;;GAEG;AACH,qDAFW,MAAM,EAAE,YAIlB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+CAFW,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,+DA4BtG;AAED;;GAEG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,GAAG,OAAO,oBAAoB,EAAE,OAAO,EAAE,UAIvF;AAwBD;;;;GAIG;AACH,uCAJW,MAAM,EAAE,cACR,MAAM,EAAE,GACN,MAAM,CAgClB;AAr1BD,uCAAwC;AACxC,uCAAwC;AACxC,oCAAqC;AACrC,mDAAoD;AACpD,6CAA8C;AAC9C,kDAAmD;AACnD,oDAAqD;AACrD,qCAAsC;AAmyB/B,uCAJI,GAAG,WACH,OAAO,GACL,MAAM,EAAE,CAQF;sBAnyBN,OAAO,oBAAoB,EAAE,OAAO;;aA+BvC,OAAO;kBACP,MAAM;0BACN,MAAM;oBACN,MAAM;oBACN,MAAM;kBACN,MAAM;kBACN,MAAM;
|
|
1
|
+
{"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":";AAqDA;;;;;GAKG;AACH,kDAJW,OAAO,mBACP,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,mDALW,OAAO,mBACP,MAAM,SACN,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAClC,aAAa,CA4CzB;AAED;;;;;;;GAOG;AACH,4DAJW,OAAO,mBACP,MAAM,GACJ,aAAa,CAkCzB;AAED;;;;;;GAMG;AACH,0CANW,OAAO,SACP,GAAG,mBACH,MAAM,+BACN,OAAO,EAAE,GACP,aAAa,CA+BzB;AACD;;;;;GAKG;AACH,qDALW,OAAO,SACP,GAAG,mBACH,MAAM,GACJ,aAAa,CAyBzB;AAED;;;;;GAKG;AAEH,2CALW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU;;;;;;EAwQjD;AAED;;;;GAIG;AACH,wDAHW,OAAO,aACP,OAAO,qBAAqB,EAAE,QAAQ,EAAE,UAuClD;AAmED;;GAEG;AACH,qDAFW,OAAO,6BAQjB;AA+CD;;;;GAIG;AACH,iDAHW,OAAO,qBAAqB,EAAE,SAAS,WACvC,OAAO,oBAAoB,EAAE,OAAO;mBAQjB,MAAM;sBAAoB,sBAAsB,GAAG,sBAAsB,GAAG,uBAAuB;;;;;;EAkBhI;AAED;;;;GAIG;AACH,2CAFW,MAAM,WAIhB;AAED;;;;GAIG;AACH,sCAFW,MAAM,EAAE,WAIlB;AAMD;;;GAGG;AACH,sCAHW,MAAM,QACN,MAAM,EAAE,YAYlB;AAED;;;GAGG;AACH,2CAHW,MAAM,QACN,MAAM,EAAE,YAUlB;AAYD;;GAEG;AACH,qDAFW,MAAM,EAAE,YAIlB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+CAFW,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,+DA4BtG;AAED;;GAEG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,GAAG,OAAO,oBAAoB,EAAE,OAAO,EAAE,UAIvF;AAwBD;;;;GAIG;AACH,uCAJW,MAAM,EAAE,cACR,MAAM,EAAE,GACN,MAAM,CAgClB;AAr1BD,uCAAwC;AACxC,uCAAwC;AACxC,oCAAqC;AACrC,mDAAoD;AACpD,6CAA8C;AAC9C,kDAAmD;AACnD,oDAAqD;AACrD,qCAAsC;AAmyB/B,uCAJI,GAAG,WACH,OAAO,GACL,MAAM,EAAE,CAQF;sBAnyBN,OAAO,oBAAoB,EAAE,OAAO;;aA+BvC,OAAO;kBACP,MAAM;0BACN,MAAM;oBACN,MAAM;oBACN,MAAM;kBACN,MAAM;kBACN,MAAM;eACN,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG;;;;;8BA6fZ,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;;;;uBAgMhD,CAAC,MAAM,EAAE,OAAO,CAAC;0BApvBJ,WAAW"}
|
package/dist/src/spec/axis.d.ts
CHANGED
|
@@ -3,25 +3,38 @@ export interface Contig {
|
|
|
3
3
|
size: number;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
export interface
|
|
6
|
+
export interface GenomeConfigBase {
|
|
7
7
|
/**
|
|
8
8
|
* Name of the genome assembly, e.g., `hg19` or `hg38`.
|
|
9
9
|
*/
|
|
10
10
|
name: string;
|
|
11
|
+
}
|
|
11
12
|
|
|
13
|
+
export interface UrlGenomeConfig extends GenomeConfigBase {
|
|
12
14
|
/**
|
|
13
|
-
*
|
|
15
|
+
* A URL to a `chrom.sizes` file, which is a tab-separated file with two
|
|
16
|
+
* columns: the sequence name and its size.
|
|
17
|
+
*
|
|
18
|
+
* You may want to strip alternative loci, haplotypes, and other
|
|
19
|
+
* non-canonical contigs from the file.
|
|
14
20
|
*
|
|
15
|
-
*
|
|
21
|
+
* Example: `"https://genomespy.app/data/genomes/hg19/chrom.sizes"`
|
|
16
22
|
*/
|
|
17
|
-
|
|
23
|
+
url: string;
|
|
24
|
+
}
|
|
18
25
|
|
|
26
|
+
export interface InlineGenomeConfig extends GenomeConfigBase {
|
|
19
27
|
/**
|
|
20
|
-
*
|
|
28
|
+
* An array of contigs/sequences in the genome assembly.
|
|
21
29
|
*/
|
|
22
|
-
contigs
|
|
30
|
+
contigs: Contig[];
|
|
23
31
|
}
|
|
24
32
|
|
|
33
|
+
export type GenomeConfig =
|
|
34
|
+
| UrlGenomeConfig
|
|
35
|
+
| InlineGenomeConfig
|
|
36
|
+
| GenomeConfigBase;
|
|
37
|
+
|
|
25
38
|
export interface ChromosomalLocus {
|
|
26
39
|
/**
|
|
27
40
|
* The name of the chromosome. For example: `"chr1"`, `"CHR1"`, or `"1"`.
|
package/dist/src/spec/scale.d.ts
CHANGED
|
@@ -130,7 +130,7 @@ export interface Scale {
|
|
|
130
130
|
round?: boolean;
|
|
131
131
|
|
|
132
132
|
/**
|
|
133
|
-
* For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed
|
|
133
|
+
* For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the `zero`, `nice`, `domainMin`, and `domainMax` properties.
|
|
134
134
|
*
|
|
135
135
|
* For _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.
|
|
136
136
|
*
|
|
@@ -3,4 +3,10 @@
|
|
|
3
3
|
* @param {string} baseUrl
|
|
4
4
|
*/
|
|
5
5
|
export default function addBaseUrl(url: string, baseUrl: string): string;
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
* @param {string} url
|
|
9
|
+
* @returns {string}
|
|
10
|
+
*/
|
|
11
|
+
export function endWithSlash(url: string): string;
|
|
6
12
|
//# sourceMappingURL=addBaseUrl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addBaseUrl.d.ts","sourceRoot":"","sources":["../../../src/utils/addBaseUrl.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wCAHW,MAAM,WACN,MAAM,UAgBhB"}
|
|
1
|
+
{"version":3,"file":"addBaseUrl.d.ts","sourceRoot":"","sources":["../../../src/utils/addBaseUrl.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wCAHW,MAAM,WACN,MAAM,UAgBhB;AAED;;;;GAIG;AACH,kCAHW,MAAM,GACJ,MAAM,CAalB"}
|
|
@@ -17,3 +17,21 @@ export default function addBaseUrl(url, baseUrl) {
|
|
|
17
17
|
|
|
18
18
|
return url;
|
|
19
19
|
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
* @param {string} url
|
|
24
|
+
* @returns {string}
|
|
25
|
+
*/
|
|
26
|
+
export function endWithSlash(url) {
|
|
27
|
+
if (!url) {
|
|
28
|
+
return url;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (/[?#]/.test(url)) {
|
|
32
|
+
throw new Error(
|
|
33
|
+
`Invalid base URL: ${url} - cannot contain query or hash.`
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
return url.endsWith("/") ? url : url + "/";
|
|
37
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expect, test } from "vitest";
|
|
2
|
-
import addBaseUrl from "./addBaseUrl.js";
|
|
2
|
+
import addBaseUrl, { endWithSlash } from "./addBaseUrl.js";
|
|
3
3
|
|
|
4
4
|
test("addBaseUrl adds baseUrl when needed", () => {
|
|
5
5
|
expect(addBaseUrl("foo.html", "https://site.com/")).toEqual(
|
|
@@ -20,3 +20,11 @@ test("addBaseUrl doesn't add baseUrl when not needed", () => {
|
|
|
20
20
|
expect(addBaseUrl("/foo.html", "https://site.com/")).toEqual("/foo.html");
|
|
21
21
|
expect(addBaseUrl("foo.html", undefined)).toEqual("foo.html");
|
|
22
22
|
});
|
|
23
|
+
|
|
24
|
+
test("endWithSlash adds slash when needed", () => {
|
|
25
|
+
expect(endWithSlash(null)).toBeNull();
|
|
26
|
+
expect(endWithSlash("https://site.com")).toEqual("https://site.com/");
|
|
27
|
+
expect(endWithSlash("https://site.com/")).toEqual("https://site.com/");
|
|
28
|
+
expect(() => endWithSlash("https://site.com/foo?bar")).toThrow();
|
|
29
|
+
expect(() => endWithSlash("https://site.com/foo#bar")).toThrow();
|
|
30
|
+
});
|
|
@@ -8,9 +8,15 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @param {T} template The template object that
|
|
10
10
|
* @returns {(function(T):T) & { properties: string[] }}
|
|
11
|
-
* @template T
|
|
11
|
+
* @template {object} [T=object]
|
|
12
12
|
*/
|
|
13
|
-
export default function createCloner<T>(template: T): ((arg0: T) => T) & {
|
|
13
|
+
export default function createCloner<T extends object = object>(template: T): ((arg0: T) => T) & {
|
|
14
14
|
properties: string[];
|
|
15
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Needed for proxied Apache Arrow tables.
|
|
18
|
+
*
|
|
19
|
+
* @param {object} obj
|
|
20
|
+
*/
|
|
21
|
+
export function getAllProperties(obj: object): string[];
|
|
16
22
|
//# sourceMappingURL=cloner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloner.d.ts","sourceRoot":"","sources":["../../../src/utils/cloner.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH;gBAH6C,MAAM,EAAE;EAwBpD"}
|
|
1
|
+
{"version":3,"file":"cloner.d.ts","sourceRoot":"","sources":["../../../src/utils/cloner.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH;gBAH6C,MAAM,EAAE;EAwBpD;AAED;;;;GAIG;AACH,sCAFW,MAAM,YAYhB"}
|
package/dist/src/utils/cloner.js
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @param {T} template The template object that
|
|
10
10
|
* @returns {(function(T):T) & { properties: string[] }}
|
|
11
|
-
* @template T
|
|
11
|
+
* @template {object} [T=object]
|
|
12
12
|
*/
|
|
13
13
|
export default function createCloner(template) {
|
|
14
14
|
// TODO: Check that only properties, not methods get cloned
|
|
15
15
|
const properties = /** @type {string[]} */ (
|
|
16
|
-
|
|
16
|
+
getAllProperties(template).filter((k) => typeof k == "string")
|
|
17
17
|
);
|
|
18
18
|
|
|
19
19
|
const cloner = /** @type {(function(T):T) & { properties: string[] }} */ (
|
|
@@ -32,3 +32,20 @@ export default function createCloner(template) {
|
|
|
32
32
|
|
|
33
33
|
return cloner;
|
|
34
34
|
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Needed for proxied Apache Arrow tables.
|
|
38
|
+
*
|
|
39
|
+
* @param {object} obj
|
|
40
|
+
*/
|
|
41
|
+
export function getAllProperties(obj) {
|
|
42
|
+
/** @type {string[]} */
|
|
43
|
+
let props = [];
|
|
44
|
+
do {
|
|
45
|
+
props = props.concat(Object.keys(obj));
|
|
46
|
+
obj = Object.getPrototypeOf(obj);
|
|
47
|
+
} while (obj && obj !== Object.prototype); // Traverse until the end of the prototype chain
|
|
48
|
+
|
|
49
|
+
const uniqueProps = Array.from(new Set(props));
|
|
50
|
+
return uniqueProps;
|
|
51
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { expect, test } from "vitest";
|
|
2
|
-
import createCloner from "./cloner.js";
|
|
2
|
+
import createCloner, { getAllProperties } from "./cloner.js";
|
|
3
3
|
|
|
4
4
|
const template = {
|
|
5
|
+
1: "iddqd",
|
|
5
6
|
a: 1,
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
c: "xyzzy",
|
|
8
|
+
b: "idclip",
|
|
8
9
|
};
|
|
9
10
|
|
|
10
11
|
test("Cloner clones object properly", () => {
|
|
@@ -14,11 +15,21 @@ test("Cloner clones object properly", () => {
|
|
|
14
15
|
expect(makeClone(template)).not.toBe(template);
|
|
15
16
|
|
|
16
17
|
const another = {
|
|
18
|
+
1: "hello",
|
|
17
19
|
a: 2,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
c: "idkfa",
|
|
21
|
+
b: "idclip",
|
|
20
22
|
};
|
|
21
23
|
|
|
22
24
|
expect(makeClone(another)).toEqual(another);
|
|
23
25
|
expect(makeClone(another)).not.toBe(another);
|
|
24
26
|
});
|
|
27
|
+
|
|
28
|
+
test("getAllProperties", () => {
|
|
29
|
+
expect(getAllProperties(template)).toEqual(["1", "a", "c", "b"]);
|
|
30
|
+
|
|
31
|
+
const obj = Object.create(template);
|
|
32
|
+
obj.d = 42;
|
|
33
|
+
|
|
34
|
+
expect(getAllProperties(obj)).toEqual(["d", "1", "a", "c", "b"]);
|
|
35
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/utils/expression.js"],"names":[],"mappings":"AA2DA;;;;;;;;;;GAUG;AACH,6CAHW,MAAM,sBACJ,kBAAkB,CAgC9B;;YAvCU,MAAM,EAAE;aACR,MAAM,EAAE;UACR,MAAM;;
|
|
1
|
+
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/utils/expression.js"],"names":[],"mappings":"AA2DA;;;;;;;;;;GAUG;AACH,6CAHW,MAAM,sBACJ,kBAAkB,CAgC9B;;YAvCU,MAAM,EAAE;aACR,MAAM,EAAE;UACR,MAAM;;iCAEH,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,qBAAqB,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,eAAe"}
|