@genome-spy/core 0.42.2 → 0.43.1
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-d7k3kkin.js → index-noY1e-G6.js} +365 -361
- package/dist/bundle/index.es.js +3348 -3223
- package/dist/bundle/index.js +89 -84
- package/dist/schema.json +251 -1
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +28 -2
- package/dist/src/data/sources/dataSourceFactory.d.ts +7 -7
- package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -1
- package/dist/src/data/sources/dataSourceFactory.js +9 -9
- package/dist/src/data/sources/{dynamic → lazy}/README.md +2 -2
- package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -0
- package/dist/src/data/sources/{dynamic → lazy}/bigBedSource.d.ts +6 -0
- package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/bigBedSource.js +206 -0
- package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -0
- package/dist/src/data/sources/{dynamic → lazy}/singleAxisLazySource.js +3 -3
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -0
- package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
- package/dist/src/data/transforms/regexFold.js +6 -8
- package/dist/src/encoder/encoder.d.ts +1 -1
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/gl/arrayBuilder.d.ts +11 -5
- package/dist/src/gl/arrayBuilder.d.ts.map +1 -1
- package/dist/src/gl/arrayBuilder.js +77 -40
- package/dist/src/gl/dataToVertices.d.ts +3 -2
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +52 -17
- package/dist/src/gl/glslScaleGenerator.d.ts +12 -0
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +38 -4
- package/dist/src/gl/includes/scales.glsl.js +1 -1
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.js +2 -1
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +9 -1
- package/dist/src/spec/channel.d.ts +14 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +11 -4
- package/dist/src/view/unitView.d.ts +1 -1
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/src/data/sources/dynamic/axisGenomeSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/axisTickSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/bamSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/bigBedSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/bigBedSource.js +0 -84
- package/dist/src/data/sources/dynamic/bigWigSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/gff3Source.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/singleAxisWindowedSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/tabixSource.d.ts.map +0 -1
- /package/dist/src/data/sources/{dynamic → lazy}/axisGenomeSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/axisGenomeSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/axisTickSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/axisTickSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bamSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bamSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bigWigSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bigWigSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/gff3Source.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/gff3Source.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/indexedFastaSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/indexedFastaSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/singleAxisLazySource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/singleAxisWindowedSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/singleAxisWindowedSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/tabixSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/tabixSource.js +0 -0
package/dist/schema.json
CHANGED
|
@@ -1113,7 +1113,257 @@
|
|
|
1113
1113
|
"description": "For internal use"
|
|
1114
1114
|
},
|
|
1115
1115
|
"x": {
|
|
1116
|
-
"
|
|
1116
|
+
"anyOf": [
|
|
1117
|
+
{
|
|
1118
|
+
"additionalProperties": false,
|
|
1119
|
+
"properties": {
|
|
1120
|
+
"axis": {
|
|
1121
|
+
"anyOf": [
|
|
1122
|
+
{
|
|
1123
|
+
"$ref": "#/definitions/GenomeAxis"
|
|
1124
|
+
},
|
|
1125
|
+
{
|
|
1126
|
+
"type": "null"
|
|
1127
|
+
}
|
|
1128
|
+
],
|
|
1129
|
+
"description": "An object defining properties of axis's gridlines, ticks and labels. If `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
|
|
1130
|
+
},
|
|
1131
|
+
"band": {
|
|
1132
|
+
"description": "Relative position on band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
|
|
1133
|
+
"maximum": 1,
|
|
1134
|
+
"minimum": 0,
|
|
1135
|
+
"type": "number"
|
|
1136
|
+
},
|
|
1137
|
+
"buildIndex": {
|
|
1138
|
+
"description": "Builds and index for efficient rendering of subsets of the data. This setting is useful when rendering large amounts of data and often only a small subset of the data is visible. An example of such a situation is a scatter plot spanning the whole genome.\n\nThis setting implicitly sorts the data by the field assigned on the `x` channel.",
|
|
1139
|
+
"type": "boolean"
|
|
1140
|
+
},
|
|
1141
|
+
"field": {
|
|
1142
|
+
"description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`.",
|
|
1143
|
+
"type": "string"
|
|
1144
|
+
},
|
|
1145
|
+
"resolutionChannel": {
|
|
1146
|
+
"$ref": "#/definitions/ChannelWithScale",
|
|
1147
|
+
"description": "An alternative channel for scale resolution.\n\nThis is mainly for internal use and allows using `color` channel to resolve `fill` and `stroke` channels under certain circumstances."
|
|
1148
|
+
},
|
|
1149
|
+
"scale": {
|
|
1150
|
+
"anyOf": [
|
|
1151
|
+
{
|
|
1152
|
+
"$ref": "#/definitions/Scale"
|
|
1153
|
+
},
|
|
1154
|
+
{
|
|
1155
|
+
"type": "null"
|
|
1156
|
+
}
|
|
1157
|
+
],
|
|
1158
|
+
"description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
|
|
1159
|
+
},
|
|
1160
|
+
"title": {
|
|
1161
|
+
"description": "A title for the field. If `null`, the title will be removed.",
|
|
1162
|
+
"type": [
|
|
1163
|
+
"string",
|
|
1164
|
+
"null"
|
|
1165
|
+
]
|
|
1166
|
+
},
|
|
1167
|
+
"type": {
|
|
1168
|
+
"$ref": "#/definitions/Type"
|
|
1169
|
+
}
|
|
1170
|
+
},
|
|
1171
|
+
"required": [
|
|
1172
|
+
"type"
|
|
1173
|
+
],
|
|
1174
|
+
"type": "object"
|
|
1175
|
+
},
|
|
1176
|
+
{
|
|
1177
|
+
"additionalProperties": false,
|
|
1178
|
+
"properties": {
|
|
1179
|
+
"axis": {
|
|
1180
|
+
"anyOf": [
|
|
1181
|
+
{
|
|
1182
|
+
"$ref": "#/definitions/GenomeAxis"
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"type": "null"
|
|
1186
|
+
}
|
|
1187
|
+
],
|
|
1188
|
+
"description": "An object defining properties of axis's gridlines, ticks and labels. If `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
|
|
1189
|
+
},
|
|
1190
|
+
"band": {
|
|
1191
|
+
"description": "Relative position on band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
|
|
1192
|
+
"maximum": 1,
|
|
1193
|
+
"minimum": 0,
|
|
1194
|
+
"type": "number"
|
|
1195
|
+
},
|
|
1196
|
+
"buildIndex": {
|
|
1197
|
+
"description": "Builds and index for efficient rendering of subsets of the data. This setting is useful when rendering large amounts of data and often only a small subset of the data is visible. An example of such a situation is a scatter plot spanning the whole genome.\n\nThis setting implicitly sorts the data by the field assigned on the `x` channel.",
|
|
1198
|
+
"type": "boolean"
|
|
1199
|
+
},
|
|
1200
|
+
"chrom": {
|
|
1201
|
+
"$ref": "#/definitions/FieldName",
|
|
1202
|
+
"description": "The field having the chromosome or contig."
|
|
1203
|
+
},
|
|
1204
|
+
"offset": {
|
|
1205
|
+
"description": "An offset or offsets that allow for adjusting the numbering base. The offset is subtracted from the positions.\n\nGenomeSpy uses internally zero-based indexing with half-open intervals. UCSC-based formats (BED, etc.) generally use this scheme. However, for example, VCF files use one-based indexing and must be adjusted by setting the offset to `1`.\n\n**Default:** `0`",
|
|
1206
|
+
"type": "number"
|
|
1207
|
+
},
|
|
1208
|
+
"pos": {
|
|
1209
|
+
"$ref": "#/definitions/FieldName",
|
|
1210
|
+
"description": "The field having an intra-chromosomal position."
|
|
1211
|
+
},
|
|
1212
|
+
"resolutionChannel": {
|
|
1213
|
+
"$ref": "#/definitions/ChannelWithScale",
|
|
1214
|
+
"description": "An alternative channel for scale resolution.\n\nThis is mainly for internal use and allows using `color` channel to resolve `fill` and `stroke` channels under certain circumstances."
|
|
1215
|
+
},
|
|
1216
|
+
"scale": {
|
|
1217
|
+
"anyOf": [
|
|
1218
|
+
{
|
|
1219
|
+
"$ref": "#/definitions/Scale"
|
|
1220
|
+
},
|
|
1221
|
+
{
|
|
1222
|
+
"type": "null"
|
|
1223
|
+
}
|
|
1224
|
+
],
|
|
1225
|
+
"description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
|
|
1226
|
+
},
|
|
1227
|
+
"title": {
|
|
1228
|
+
"description": "A title for the field. If `null`, the title will be removed.",
|
|
1229
|
+
"type": [
|
|
1230
|
+
"string",
|
|
1231
|
+
"null"
|
|
1232
|
+
]
|
|
1233
|
+
},
|
|
1234
|
+
"type": {
|
|
1235
|
+
"const": "locus",
|
|
1236
|
+
"type": "string"
|
|
1237
|
+
}
|
|
1238
|
+
},
|
|
1239
|
+
"required": [
|
|
1240
|
+
"chrom",
|
|
1241
|
+
"type"
|
|
1242
|
+
],
|
|
1243
|
+
"type": "object"
|
|
1244
|
+
},
|
|
1245
|
+
{
|
|
1246
|
+
"additionalProperties": false,
|
|
1247
|
+
"properties": {
|
|
1248
|
+
"axis": {
|
|
1249
|
+
"anyOf": [
|
|
1250
|
+
{
|
|
1251
|
+
"$ref": "#/definitions/GenomeAxis"
|
|
1252
|
+
},
|
|
1253
|
+
{
|
|
1254
|
+
"type": "null"
|
|
1255
|
+
}
|
|
1256
|
+
],
|
|
1257
|
+
"description": "An object defining properties of axis's gridlines, ticks and labels. If `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
|
|
1258
|
+
},
|
|
1259
|
+
"band": {
|
|
1260
|
+
"description": "Relative position on band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
|
|
1261
|
+
"maximum": 1,
|
|
1262
|
+
"minimum": 0,
|
|
1263
|
+
"type": "number"
|
|
1264
|
+
},
|
|
1265
|
+
"buildIndex": {
|
|
1266
|
+
"description": "Builds and index for efficient rendering of subsets of the data. This setting is useful when rendering large amounts of data and often only a small subset of the data is visible. An example of such a situation is a scatter plot spanning the whole genome.\n\nThis setting implicitly sorts the data by the field assigned on the `x` channel.",
|
|
1267
|
+
"type": "boolean"
|
|
1268
|
+
},
|
|
1269
|
+
"datum": {
|
|
1270
|
+
"$ref": "#/definitions/Scalar",
|
|
1271
|
+
"description": "A constant value in data domain."
|
|
1272
|
+
},
|
|
1273
|
+
"resolutionChannel": {
|
|
1274
|
+
"$ref": "#/definitions/ChannelWithScale",
|
|
1275
|
+
"description": "An alternative channel for scale resolution.\n\nThis is mainly for internal use and allows using `color` channel to resolve `fill` and `stroke` channels under certain circumstances."
|
|
1276
|
+
},
|
|
1277
|
+
"scale": {
|
|
1278
|
+
"anyOf": [
|
|
1279
|
+
{
|
|
1280
|
+
"$ref": "#/definitions/Scale"
|
|
1281
|
+
},
|
|
1282
|
+
{
|
|
1283
|
+
"type": "null"
|
|
1284
|
+
}
|
|
1285
|
+
],
|
|
1286
|
+
"description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
|
|
1287
|
+
},
|
|
1288
|
+
"title": {
|
|
1289
|
+
"description": "A title for the field. If `null`, the title will be removed.",
|
|
1290
|
+
"type": [
|
|
1291
|
+
"string",
|
|
1292
|
+
"null"
|
|
1293
|
+
]
|
|
1294
|
+
},
|
|
1295
|
+
"type": {
|
|
1296
|
+
"$ref": "#/definitions/Type"
|
|
1297
|
+
}
|
|
1298
|
+
},
|
|
1299
|
+
"required": [
|
|
1300
|
+
"type"
|
|
1301
|
+
],
|
|
1302
|
+
"type": "object"
|
|
1303
|
+
},
|
|
1304
|
+
{
|
|
1305
|
+
"additionalProperties": false,
|
|
1306
|
+
"properties": {
|
|
1307
|
+
"axis": {
|
|
1308
|
+
"anyOf": [
|
|
1309
|
+
{
|
|
1310
|
+
"$ref": "#/definitions/GenomeAxis"
|
|
1311
|
+
},
|
|
1312
|
+
{
|
|
1313
|
+
"type": "null"
|
|
1314
|
+
}
|
|
1315
|
+
],
|
|
1316
|
+
"description": "An object defining properties of axis's gridlines, ticks and labels. If `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
|
|
1317
|
+
},
|
|
1318
|
+
"band": {
|
|
1319
|
+
"description": "Relative position on band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
|
|
1320
|
+
"maximum": 1,
|
|
1321
|
+
"minimum": 0,
|
|
1322
|
+
"type": "number"
|
|
1323
|
+
},
|
|
1324
|
+
"buildIndex": {
|
|
1325
|
+
"description": "Builds and index for efficient rendering of subsets of the data. This setting is useful when rendering large amounts of data and often only a small subset of the data is visible. An example of such a situation is a scatter plot spanning the whole genome.\n\nThis setting implicitly sorts the data by the field assigned on the `x` channel.",
|
|
1326
|
+
"type": "boolean"
|
|
1327
|
+
},
|
|
1328
|
+
"expr": {
|
|
1329
|
+
"description": "An expression. Properties of the data can be accessed through the `datum` object.",
|
|
1330
|
+
"type": "string"
|
|
1331
|
+
},
|
|
1332
|
+
"type": {
|
|
1333
|
+
"$ref": "#/definitions/Type"
|
|
1334
|
+
}
|
|
1335
|
+
},
|
|
1336
|
+
"required": [
|
|
1337
|
+
"expr",
|
|
1338
|
+
"type"
|
|
1339
|
+
],
|
|
1340
|
+
"type": "object"
|
|
1341
|
+
},
|
|
1342
|
+
{
|
|
1343
|
+
"additionalProperties": false,
|
|
1344
|
+
"properties": {
|
|
1345
|
+
"buildIndex": {
|
|
1346
|
+
"description": "Builds and index for efficient rendering of subsets of the data. This setting is useful when rendering large amounts of data and often only a small subset of the data is visible. An example of such a situation is a scatter plot spanning the whole genome.\n\nThis setting implicitly sorts the data by the field assigned on the `x` channel.",
|
|
1347
|
+
"type": "boolean"
|
|
1348
|
+
},
|
|
1349
|
+
"title": {
|
|
1350
|
+
"description": "A title for the field. If `null`, the title will be removed.",
|
|
1351
|
+
"type": [
|
|
1352
|
+
"string",
|
|
1353
|
+
"null"
|
|
1354
|
+
]
|
|
1355
|
+
},
|
|
1356
|
+
"value": {
|
|
1357
|
+
"description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"`, values between `0` to `1` for opacity).",
|
|
1358
|
+
"type": "number"
|
|
1359
|
+
}
|
|
1360
|
+
},
|
|
1361
|
+
"required": [
|
|
1362
|
+
"value"
|
|
1363
|
+
],
|
|
1364
|
+
"type": "object"
|
|
1365
|
+
}
|
|
1366
|
+
],
|
|
1117
1367
|
"description": "X coordinates of the marks.\n\nThe `value` of this channel can be a number between zero and one."
|
|
1118
1368
|
},
|
|
1119
1369
|
"x2": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/data/collector.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH;IAKI;;OAEG;IACH,qBAFW,OAAO,sBAAsB,EAAE,aAAa,EActD;IATG,qDAA2C;IAE3C,2CAA2C;IAC3C,WADW,QAAU,SAAS,KAAE,IAAI,CAAC,EAAE,CACpB;IAEnB,uFAAuF;IACvF,cADW,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,OAAO,eAAe,EAAE,IAAI,CAAC,CAC5B;IAKjC,cAOC;IANG,2CAA2C;IAC3C,OADW,OAAO,eAAe,EAAE,IAAI,CACxB;
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/data/collector.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH;IAKI;;OAEG;IACH,qBAFW,OAAO,sBAAsB,EAAE,aAAa,EActD;IATG,qDAA2C;IAE3C,2CAA2C;IAC3C,WADW,QAAU,SAAS,KAAE,IAAI,CAAC,EAAE,CACpB;IAEnB,uFAAuF;IACvF,cADW,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,OAAO,eAAe,EAAE,IAAI,CAAC,CAC5B;IAKjC,cAOC;IANG,2CAA2C;IAC3C,OADW,OAAO,eAAe,EAAE,IAAI,CACxB;IA2FnB;;OAEG;IACH,WAFa,SAAS,OAAO,eAAe,EAAE,KAAK,CAAC,CAuBnD;IAED;;;OAGG;IACH,2BAFmB,OAAO,eAAe,EAAE,KAAK,KAAK,IAAI,QAUxD;IAED;;OAEG;IACH,uBAMC;IAED,qBAMC;CACJ;qBAvLyD,eAAe"}
|
|
@@ -87,8 +87,12 @@ export default class Collector extends FlowNode {
|
|
|
87
87
|
const accessors = this.params.groupby.map((fieldName) =>
|
|
88
88
|
field(fieldName)
|
|
89
89
|
);
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
const groups =
|
|
91
|
+
accessors.length > 1
|
|
92
|
+
? // @ts-ignore
|
|
93
|
+
group(this._data, ...accessors)
|
|
94
|
+
: // D3's group is SLOW!
|
|
95
|
+
groupBy(this._data, accessors[0]);
|
|
92
96
|
|
|
93
97
|
this.facetBatches.clear();
|
|
94
98
|
for (const [key, data] of iterateNestedMaps(groups)) {
|
|
@@ -182,3 +186,25 @@ export default class Collector extends FlowNode {
|
|
|
182
186
|
}
|
|
183
187
|
}
|
|
184
188
|
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Like D3's group but without InternMap, which is slow.
|
|
192
|
+
* TODO: Implement multi-level grouping
|
|
193
|
+
*
|
|
194
|
+
* @param {import("./flowNode.js").Datum[]} data
|
|
195
|
+
* @param {(data: import("./flowNode.js").Datum) => import("../spec/channel.js").Scalar} accessor
|
|
196
|
+
*/
|
|
197
|
+
function groupBy(data, accessor) {
|
|
198
|
+
const groups = new Map();
|
|
199
|
+
for (let i = 0, n = data.length; i < n; i++) {
|
|
200
|
+
const datum = data[i];
|
|
201
|
+
const key = accessor(datum);
|
|
202
|
+
let group = groups.get(key);
|
|
203
|
+
if (!group) {
|
|
204
|
+
group = [];
|
|
205
|
+
groups.set(key, group);
|
|
206
|
+
}
|
|
207
|
+
group.push(datum);
|
|
208
|
+
}
|
|
209
|
+
return groups;
|
|
210
|
+
}
|
|
@@ -6,11 +6,11 @@ export default function createDataSource(params: Partial<import("../../spec/data
|
|
|
6
6
|
import InlineSource from "./inlineSource.js";
|
|
7
7
|
import UrlSource from "./urlSource.js";
|
|
8
8
|
import SequenceSource from "./sequenceSource.js";
|
|
9
|
-
import AxisTickSource from "./
|
|
10
|
-
import AxisGenomeSource from "./
|
|
11
|
-
import IndexedFastaSource from "./
|
|
12
|
-
import BigWigSource from "./
|
|
13
|
-
import BigBedSource from "./
|
|
14
|
-
import BamSource from "./
|
|
15
|
-
import Gff3Source from "./
|
|
9
|
+
import AxisTickSource from "./lazy/axisTickSource.js";
|
|
10
|
+
import AxisGenomeSource from "./lazy/axisGenomeSource.js";
|
|
11
|
+
import IndexedFastaSource from "./lazy/indexedFastaSource.js";
|
|
12
|
+
import BigWigSource from "./lazy/bigWigSource.js";
|
|
13
|
+
import BigBedSource from "./lazy/bigBedSource.js";
|
|
14
|
+
import BamSource from "./lazy/bamSource.js";
|
|
15
|
+
import Gff3Source from "./lazy/gff3Source.js";
|
|
16
16
|
//# sourceMappingURL=dataSourceFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataSourceFactory.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataSourceFactory.js"],"names":[],"mappings":"AAWA;;;GAGG;AACH,iDAHW,QAAQ,OAAO,oBAAoB,EAAE,IAAI,CAAC,QAC1C,OAAO,oBAAoB,EAAE,OAAO,6JAgB9C;yBA7B0C,mBAAmB;sBACzB,gBAAgB;2BACD,qBAAqB;2BAC9C,
|
|
1
|
+
{"version":3,"file":"dataSourceFactory.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataSourceFactory.js"],"names":[],"mappings":"AAWA;;;GAGG;AACH,iDAHW,QAAQ,OAAO,oBAAoB,EAAE,IAAI,CAAC,QAC1C,OAAO,oBAAoB,EAAE,OAAO,6JAgB9C;yBA7B0C,mBAAmB;sBACzB,gBAAgB;2BACD,qBAAqB;2BAC9C,0BAA0B;6BACxB,4BAA4B;+BAC1B,8BAA8B;yBACpC,wBAAwB;yBACxB,wBAAwB;sBAC3B,qBAAqB;uBACpB,sBAAsB"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import InlineSource, { isInlineData } from "./inlineSource.js";
|
|
2
2
|
import UrlSource, { isUrlData } from "./urlSource.js";
|
|
3
3
|
import SequenceSource, { isSequenceGenerator } from "./sequenceSource.js";
|
|
4
|
-
import AxisTickSource from "./
|
|
5
|
-
import AxisGenomeSource from "./
|
|
6
|
-
import IndexedFastaSource from "./
|
|
7
|
-
import BigWigSource from "./
|
|
8
|
-
import BigBedSource from "./
|
|
9
|
-
import BamSource from "./
|
|
10
|
-
import Gff3Source from "./
|
|
4
|
+
import AxisTickSource from "./lazy/axisTickSource.js";
|
|
5
|
+
import AxisGenomeSource from "./lazy/axisGenomeSource.js";
|
|
6
|
+
import IndexedFastaSource from "./lazy/indexedFastaSource.js";
|
|
7
|
+
import BigWigSource from "./lazy/bigWigSource.js";
|
|
8
|
+
import BigBedSource from "./lazy/bigBedSource.js";
|
|
9
|
+
import BamSource from "./lazy/bamSource.js";
|
|
10
|
+
import Gff3Source from "./lazy/gff3Source.js";
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* @param {Partial<import("../../spec/data.js").Data>} params
|
|
@@ -21,7 +21,7 @@ export default function createDataSource(params, view) {
|
|
|
21
21
|
} else if (isSequenceGenerator(params)) {
|
|
22
22
|
return new SequenceSource(params, view);
|
|
23
23
|
} else if (isLazyData(params)) {
|
|
24
|
-
return
|
|
24
|
+
return createLazyDataSource(params.lazy, view);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
throw new Error(
|
|
@@ -104,7 +104,7 @@ function isGff3Source(params) {
|
|
|
104
104
|
* @param {import("../../spec/data.js").LazyDataParams} params
|
|
105
105
|
* @param {import("../../view/view.js").default} view
|
|
106
106
|
*/
|
|
107
|
-
function
|
|
107
|
+
function createLazyDataSource(params, view) {
|
|
108
108
|
if (isAxisTickSource(params)) {
|
|
109
109
|
return new AxisTickSource(params, view);
|
|
110
110
|
} else if (isAxisGenomeSource(params)) {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Lazy data sources
|
|
2
2
|
|
|
3
|
-
... that listen to changes in scale domains and propagates data
|
|
3
|
+
... that listen to changes in scale domains and propagates data lazily.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axisGenomeSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/axisGenomeSource.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH;IACI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,cAAc,QAC9C,OAAO,uBAAuB,EAAE,OAAO,EAIjD;CAKJ;iCAlBgC,2BAA2B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axisTickSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/axisTickSource.js"],"names":[],"mappings":"AAYA;;GAEG;AACH;IAMI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,aAAa,QAC7C,OAAO,uBAAuB,EAAE,OAAO,EAYjD;IAnBD;;OAEG;IACH,OAFU,OAAO,0BAA0B,EAAE,MAAM,EAAE,CAE1C;IAeP,sDAAoB;IAGxB,iCAkCC;CACJ;iCA9DgC,2BAA2B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bamSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bamSource.js"],"names":[],"mappings":"AAGA;IAeI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,OAAO,QACvC,OAAO,uBAAuB,EAAE,OAAO,EAmDjD;IAhED;;;;;;;;OAQG;IACH,sBAFgB,MAAM,KAAK,MAAM,CAEH;IAkB1B,gDAAgC;IAQhC,iCA4BE;;CAmCT;qCAxGoC,+BAA+B"}
|
|
@@ -8,6 +8,12 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
8
8
|
parser: import("@gmod/bed").default;
|
|
9
9
|
/** @type {import("@gmod/bbi").BigBed} */
|
|
10
10
|
bbi: import("@gmod/bbi").BigBed;
|
|
11
|
+
/** @type {(chrom: string, fields: { start: number, end: number, rest?: string }) => Record<string, any>} */
|
|
12
|
+
parseLine: (chrom: string, fields: {
|
|
13
|
+
start: number;
|
|
14
|
+
end: number;
|
|
15
|
+
rest?: string;
|
|
16
|
+
}) => Record<string, any>;
|
|
11
17
|
params: import("../../../spec/data.js").BigBedData;
|
|
12
18
|
initializedPromise: Promise<any>;
|
|
13
19
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigBedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigBedSource.js"],"names":[],"mappings":"AAGA;IAUI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAsDjD;IAjED,0CAA0C;IAC1C,QADW,OAAO,WAAW,EAAE,OAAO,CAC/B;IAEP,yCAAyC;IACzC,KADW,OAAO,WAAW,EAAE,MAAM,CACjC;IAEJ,4GAA4G;IAC5G,mBADmB,MAAM,UAAU;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,MAAM,EAAE,GAAG,CAAC,CAC9F;IAkBN,mDAAgC;IAQhC,iCA+BE;CAuBT;qCA1FoC,+BAA+B"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import addBaseUrl from "../../../utils/addBaseUrl.js";
|
|
2
|
+
import SingleAxisWindowedSource from "./singleAxisWindowedSource.js";
|
|
3
|
+
|
|
4
|
+
export default class BigBedSource extends SingleAxisWindowedSource {
|
|
5
|
+
/** @type {import("@gmod/bed").default} */
|
|
6
|
+
parser;
|
|
7
|
+
|
|
8
|
+
/** @type {import("@gmod/bbi").BigBed} */
|
|
9
|
+
bbi;
|
|
10
|
+
|
|
11
|
+
/** @type {(chrom: string, fields: { start: number, end: number, rest?: string }) => Record<string, any>} */
|
|
12
|
+
parseLine;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @param {import("../../../spec/data.js").BigBedData} params
|
|
16
|
+
* @param {import("../../../view/view.js").default} view
|
|
17
|
+
*/
|
|
18
|
+
constructor(params, view) {
|
|
19
|
+
/** @type {import("../../../spec/data.js").BigBedData} */
|
|
20
|
+
const paramsWithDefaults = {
|
|
21
|
+
channel: "x",
|
|
22
|
+
windowSize: 1000000,
|
|
23
|
+
debounce: 200,
|
|
24
|
+
debounceMode: "window",
|
|
25
|
+
...params,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
super(view, paramsWithDefaults.channel);
|
|
29
|
+
|
|
30
|
+
this.params = paramsWithDefaults;
|
|
31
|
+
|
|
32
|
+
if (!this.params.url) {
|
|
33
|
+
throw new Error("No URL provided for BigBedSource");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
this.setupDebouncing(this.params);
|
|
37
|
+
|
|
38
|
+
this.initializedPromise = new Promise((resolve) => {
|
|
39
|
+
Promise.all([
|
|
40
|
+
import("@gmod/bed"),
|
|
41
|
+
import("@gmod/bbi"),
|
|
42
|
+
import("generic-filehandle"),
|
|
43
|
+
]).then(([bed, { BigBed }, { RemoteFile }]) => {
|
|
44
|
+
const BED = bed.default;
|
|
45
|
+
|
|
46
|
+
this.bbi = new BigBed({
|
|
47
|
+
filehandle: new RemoteFile(
|
|
48
|
+
addBaseUrl(this.params.url, this.view.getBaseUrl())
|
|
49
|
+
),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
this.bbi.getHeader().then(async (header) => {
|
|
53
|
+
// @ts-ignore TODO: Fix
|
|
54
|
+
this.parser = new BED({ autoSql: header.autoSql });
|
|
55
|
+
try {
|
|
56
|
+
const fastParser = makeFastParser(this.parser);
|
|
57
|
+
this.parseLine = (chrom, f) =>
|
|
58
|
+
fastParser(chrom, f.start, f.end, f.rest);
|
|
59
|
+
} catch (e) {
|
|
60
|
+
this.parseLine = (chrom, f) =>
|
|
61
|
+
this.parser.parseLine(
|
|
62
|
+
`${chrom}\t${f.start}\t${f.end}\t${f.rest}`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
resolve();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @param {number[]} interval linearized domain
|
|
74
|
+
*/
|
|
75
|
+
async loadInterval(interval) {
|
|
76
|
+
const features = await this.discretizeAndLoad(
|
|
77
|
+
interval,
|
|
78
|
+
async (d, signal) =>
|
|
79
|
+
this.bbi
|
|
80
|
+
.getFeatures(d.chrom, d.startPos, d.endPos, {
|
|
81
|
+
signal,
|
|
82
|
+
})
|
|
83
|
+
.then((features) =>
|
|
84
|
+
features.map((f) => this.parseLine(d.chrom, f))
|
|
85
|
+
)
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
if (features) {
|
|
89
|
+
this.publishData(features);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* A specific optimization for Hautaniemi Lab's Methylation project, where
|
|
96
|
+
* we have hundreds of columns having small integers (0-100).
|
|
97
|
+
* This parser avoids generating piles of garbage to be collected by the GC.
|
|
98
|
+
* We don't split the line into an array of strings, but instead parse the
|
|
99
|
+
* integer fields directly from the original string.
|
|
100
|
+
* This parser doesn't support arrays, etc. at the moment.
|
|
101
|
+
*
|
|
102
|
+
* @param {import("@gmod/bed").default} bed
|
|
103
|
+
*/
|
|
104
|
+
function makeFastParser(bed) {
|
|
105
|
+
// Skip the first three fields: chrom, chromStart, chromEnd
|
|
106
|
+
const fields = bed.autoSql.fields.filter((field) => field.type).slice(3);
|
|
107
|
+
|
|
108
|
+
let i = 0;
|
|
109
|
+
let currentLine = "";
|
|
110
|
+
let lineLength = 0;
|
|
111
|
+
|
|
112
|
+
/** @type {Record<string, any>} */
|
|
113
|
+
let currentObject = {};
|
|
114
|
+
|
|
115
|
+
const delimiter = "\t";
|
|
116
|
+
const delimiterCode = delimiter.charCodeAt(0);
|
|
117
|
+
const zero = "0".charCodeAt(0);
|
|
118
|
+
const minusCode = "-".charCodeAt(0);
|
|
119
|
+
|
|
120
|
+
function parseString() {
|
|
121
|
+
let end = currentLine.indexOf(delimiter, i);
|
|
122
|
+
if (end < 0) {
|
|
123
|
+
end = lineLength;
|
|
124
|
+
}
|
|
125
|
+
const str = currentLine.substring(i, end);
|
|
126
|
+
i = end + 1;
|
|
127
|
+
return str;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function parseInt() {
|
|
131
|
+
let value = 0;
|
|
132
|
+
|
|
133
|
+
let charCode = currentLine.charCodeAt(i);
|
|
134
|
+
let sign = 1;
|
|
135
|
+
|
|
136
|
+
if (charCode === minusCode) {
|
|
137
|
+
sign = -1;
|
|
138
|
+
i++;
|
|
139
|
+
charCode = currentLine.charCodeAt(i);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
do {
|
|
143
|
+
if (charCode === delimiterCode) {
|
|
144
|
+
i++;
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
value = value * 10 + charCode - zero;
|
|
148
|
+
charCode = currentLine.charCodeAt(++i);
|
|
149
|
+
} while (i < lineLength);
|
|
150
|
+
|
|
151
|
+
return value * sign;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const fieldParsers = fields.map((field) => {
|
|
155
|
+
const { name, type } = field;
|
|
156
|
+
|
|
157
|
+
if (["ubyte", "int", "uint"].includes(type)) {
|
|
158
|
+
return () => {
|
|
159
|
+
currentObject[name] = parseInt();
|
|
160
|
+
};
|
|
161
|
+
} else if (field.isNumeric) {
|
|
162
|
+
return () => {
|
|
163
|
+
currentObject[name] = Number(parseString());
|
|
164
|
+
};
|
|
165
|
+
} else if (["char", "string", "lstring"].includes(type)) {
|
|
166
|
+
return () => {
|
|
167
|
+
currentObject[name] = parseString();
|
|
168
|
+
};
|
|
169
|
+
} else {
|
|
170
|
+
throw new Error("Unsupported type: " + type);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* @param {string} line
|
|
176
|
+
*/
|
|
177
|
+
function setLine(line) {
|
|
178
|
+
currentLine = line;
|
|
179
|
+
lineLength = line.length;
|
|
180
|
+
i = 0;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* @param {string} chrom
|
|
185
|
+
* @param {number} chromStart
|
|
186
|
+
* @param {number} chromEnd
|
|
187
|
+
* @param {string} rest
|
|
188
|
+
*/
|
|
189
|
+
function parseLine(chrom, chromStart, chromEnd, rest) {
|
|
190
|
+
setLine(rest);
|
|
191
|
+
|
|
192
|
+
currentObject = {
|
|
193
|
+
chrom,
|
|
194
|
+
chromStart,
|
|
195
|
+
chromEnd,
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
for (let j = 0, n = fieldParsers.length; j < n; j++) {
|
|
199
|
+
fieldParsers[j]();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return currentObject;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return parseLine;
|
|
206
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigWigSource.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IAOI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAiDjD;IAnCG,mDAAgC;IAQhC,iCA0BE;IA+BN;;;OAGG;IAEH,uBAJW,MAAM,EAAE,kBACR,MAAM,iBA0BhB;;CACJ;qCA1HoC,+BAA+B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gff3Source.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/gff3Source.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IAII;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,SAAS,QACzC,OAAO,uBAAuB,EAAE,OAAO,EASjD;IAED;;OAEG;IACH,sBAFW,MAAM,EAAE,OAUlB;;CACJ;wBAlCuB,kBAAkB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexedFastaSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/indexedFastaSource.js"],"names":[],"mappings":"AAGA;IACI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,gBAAgB,QAChD,OAAO,uBAAuB,EAAE,OAAO,EA+CjD;IAjCG,yDAAgC;IAQhC,iCAwBE;IATM,iDAKE;CA6BjB;qCA5EoC,+BAA+B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAOI;;;OAGG;IACH,kBAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,wBAAwB,EAiDrE;IAzDD;;;OAGG;IACH,4CAAuC;IASnC,8CAAgB;IAYhB,2EAA2E;IAC3E,SADW,OAAO,0BAA0B,EAAE,wBAAwB,CAChD;IAEtB,oEAA4D;IA+BhE;;;OAGG;IACH,wBAWC;IAED;;;;OAIG;IACH,oEAEC;IAED;;;;;;OAMG;IACH,wBAJW,MAAM,EAAE,iBACR,OAAO,yBAAyB,EAAE,gBAAgB,EAAE,iBAK9D;IAED;;;;;OAKG;IACH,mCAHW,OAAO,QAKjB;IAED;;;;;OAKG;IACH,gCAGC;IAQD;;;;;OAKG;IACH,8BAHW,OAAO,mBAAmB,EAAE,KAAK,EAAE,EAAE,QAkB/C;CACJ;uBAxJsB,kBAAkB"}
|
|
@@ -23,11 +23,11 @@ export default class SingleAxisLazySource extends DataSource {
|
|
|
23
23
|
|
|
24
24
|
if (!channel) {
|
|
25
25
|
throw new Error(
|
|
26
|
-
`No channel has been specified for the
|
|
26
|
+
`No channel has been specified for the lazy data source. Must be either "x" or "y".`
|
|
27
27
|
);
|
|
28
28
|
} else if (channel !== "x" && channel !== "y") {
|
|
29
29
|
throw new Error(
|
|
30
|
-
`Invalid channel specified for the
|
|
30
|
+
`Invalid channel specified for the lazy data source: ${channel}. Must be either "x" or "y"`
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -37,7 +37,7 @@ export default class SingleAxisLazySource extends DataSource {
|
|
|
37
37
|
this.scaleResolution = this.view.getScaleResolution(channel);
|
|
38
38
|
if (!this.scaleResolution) {
|
|
39
39
|
const sentences = [
|
|
40
|
-
`The
|
|
40
|
+
`The lazy data source cannot find a resolved scale for channel "${channel}".`,
|
|
41
41
|
];
|
|
42
42
|
if (!(this.view instanceof UnitView)) {
|
|
43
43
|
sentences.push(
|