@vitessce/config 3.5.12 → 3.6.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 (2) hide show
  1. package/dist/index.js +570 -832
  2. package/package.json +4 -4
package/dist/index.js CHANGED
@@ -1,643 +1,379 @@
1
1
  const FileType = {
2
2
  // Joint file types
3
3
  ANNDATA_ZARR: "anndata.zarr",
4
- ANNDATA_ZARR_ZIP: "anndata.zarr.zip",
5
- ANNDATA_H5AD: "anndata.h5ad",
6
- SPATIALDATA_ZARR: "spatialdata.zarr",
7
- // Atomic file types
8
- OBS_EMBEDDING_CSV: "obsEmbedding.csv",
9
- OBS_SPOTS_CSV: "obsSpots.csv",
10
- OBS_POINTS_CSV: "obsPoints.csv",
11
- OBS_LOCATIONS_CSV: "obsLocations.csv",
12
- OBS_LABELS_CSV: "obsLabels.csv",
13
- FEATURE_LABELS_CSV: "featureLabels.csv",
14
- OBS_FEATURE_MATRIX_CSV: "obsFeatureMatrix.csv",
15
- OBS_SEGMENTATIONS_JSON: "obsSegmentations.json",
16
- OBS_SETS_CSV: "obsSets.csv",
17
- OBS_SETS_JSON: "obsSets.json",
18
- SAMPLE_SETS_CSV: "sampleSets.csv",
19
- // OME-Zarr
20
- IMAGE_OME_ZARR: "image.ome-zarr",
21
- OBS_SEGMENTATIONS_OME_ZARR: "obsSegmentations.ome-zarr",
22
- // OME-Zarr - Zipped
23
- IMAGE_OME_ZARR_ZIP: "image.ome-zarr.zip",
24
- OBS_SEGMENTATIONS_OME_ZARR_ZIP: "obsSegmentations.ome-zarr.zip",
25
- // AnnData
26
- OBS_FEATURE_MATRIX_ANNDATA_ZARR: "obsFeatureMatrix.anndata.zarr",
27
- OBS_FEATURE_COLUMNS_ANNDATA_ZARR: "obsFeatureColumns.anndata.zarr",
28
- OBS_SETS_ANNDATA_ZARR: "obsSets.anndata.zarr",
29
- OBS_EMBEDDING_ANNDATA_ZARR: "obsEmbedding.anndata.zarr",
30
- OBS_SPOTS_ANNDATA_ZARR: "obsSpots.anndata.zarr",
31
- OBS_POINTS_ANNDATA_ZARR: "obsPoints.anndata.zarr",
32
- OBS_LOCATIONS_ANNDATA_ZARR: "obsLocations.anndata.zarr",
33
- OBS_SEGMENTATIONS_ANNDATA_ZARR: "obsSegmentations.anndata.zarr",
34
- OBS_LABELS_ANNDATA_ZARR: "obsLabels.anndata.zarr",
35
- FEATURE_LABELS_ANNDATA_ZARR: "featureLabels.anndata.zarr",
36
- SAMPLE_EDGES_ANNDATA_ZARR: "sampleEdges.anndata.zarr",
37
- SAMPLE_SETS_ANNDATA_ZARR: "sampleSets.anndata.zarr",
38
- COMPARISON_METADATA_ANNDATA_ZARR: "comparisonMetadata.anndata.zarr",
39
- COMPARATIVE_FEATURE_STATS_ANNDATA_ZARR: "comparativeFeatureStats.anndata.zarr",
40
- COMPARATIVE_FEATURE_SET_STATS_ANNDATA_ZARR: "comparativeFeatureSetStats.anndata.zarr",
41
- COMPARATIVE_OBS_SET_STATS_ANNDATA_ZARR: "comparativeObsSetStats.anndata.zarr",
42
- // AnnData - zipped
43
- OBS_FEATURE_MATRIX_ANNDATA_ZARR_ZIP: "obsFeatureMatrix.anndata.zarr.zip",
44
- OBS_FEATURE_COLUMNS_ANNDATA_ZARR_ZIP: "obsFeatureColumns.anndata.zarr.zip",
45
- OBS_SETS_ANNDATA_ZARR_ZIP: "obsSets.anndata.zarr.zip",
46
- OBS_EMBEDDING_ANNDATA_ZARR_ZIP: "obsEmbedding.anndata.zarr.zip",
47
- OBS_SPOTS_ANNDATA_ZARR_ZIP: "obsSpots.anndata.zarr.zip",
48
- OBS_POINTS_ANNDATA_ZARR_ZIP: "obsPoints.anndata.zarr.zip",
49
- OBS_LOCATIONS_ANNDATA_ZARR_ZIP: "obsLocations.anndata.zarr.zip",
50
- OBS_SEGMENTATIONS_ANNDATA_ZARR_ZIP: "obsSegmentations.anndata.zarr.zip",
51
- OBS_LABELS_ANNDATA_ZARR_ZIP: "obsLabels.anndata.zarr.zip",
52
- FEATURE_LABELS_ANNDATA_ZARR_ZIP: "featureLabels.anndata.zarr.zip",
53
- SAMPLE_EDGES_ANNDATA_ZARR_ZIP: "sampleEdges.anndata.zarr.zip",
54
- SAMPLE_SETS_ANNDATA_ZARR_ZIP: "sampleSets.anndata.zarr.zip",
55
- COMPARISON_METADATA_ANNDATA_ZARR_ZIP: "comparisonMetadata.anndata.zarr.zip",
56
- COMPARATIVE_FEATURE_STATS_ANNDATA_ZARR_ZIP: "comparativeFeatureStats.anndata.zarr.zip",
57
- COMPARATIVE_FEATURE_SET_STATS_ANNDATA_ZARR_ZIP: "comparativeFeatureSetStats.anndata.zarr.zip",
58
- COMPARATIVE_OBS_SET_STATS_ANNDATA_ZARR_ZIP: "comparativeObsSetStats.anndata.zarr.zip",
59
- // AnnData - h5ad via reference spec
60
- OBS_FEATURE_MATRIX_ANNDATA_H5AD: "obsFeatureMatrix.anndata.h5ad",
61
- OBS_FEATURE_COLUMNS_ANNDATA_H5AD: "obsFeatureColumns.anndata.h5ad",
62
- OBS_SETS_ANNDATA_H5AD: "obsSets.anndata.h5ad",
63
- OBS_EMBEDDING_ANNDATA_H5AD: "obsEmbedding.anndata.h5ad",
64
- OBS_SPOTS_ANNDATA_H5AD: "obsSpots.anndata.h5ad",
65
- OBS_POINTS_ANNDATA_H5AD: "obsPoints.anndata.h5ad",
66
- OBS_LOCATIONS_ANNDATA_H5AD: "obsLocations.anndata.h5ad",
67
- OBS_SEGMENTATIONS_ANNDATA_H5AD: "obsSegmentations.anndata.h5ad",
68
- OBS_LABELS_ANNDATA_H5AD: "obsLabels.anndata.h5ad",
69
- FEATURE_LABELS_ANNDATA_H5AD: "featureLabels.anndata.h5ad",
70
- SAMPLE_EDGES_ANNDATA_H5AD: "sampleEdges.anndata.h5ad",
71
- SAMPLE_SETS_ANNDATA_H5AD: "sampleSets.anndata.h5ad",
72
- COMPARISON_METADATA_ANNDATA_H5AD: "comparisonMetadata.anndata.h5ad",
73
- COMPARATIVE_FEATURE_STATS_ANNDATA_H5AD: "comparativeFeatureStats.anndata.h5ad",
74
- COMPARATIVE_FEATURE_SET_STATS_ANNDATA_H5AD: "comparativeFeatureSetStats.anndata.h5ad",
75
- COMPARATIVE_OBS_SET_STATS_ANNDATA_H5AD: "comparativeObsSetStats.anndata.h5ad",
76
- // SpatialData
77
- IMAGE_SPATIALDATA_ZARR: "image.spatialdata.zarr",
78
- LABELS_SPATIALDATA_ZARR: "labels.spatialdata.zarr",
79
- SHAPES_SPATIALDATA_ZARR: "shapes.spatialdata.zarr",
80
- OBS_FEATURE_MATRIX_SPATIALDATA_ZARR: "obsFeatureMatrix.spatialdata.zarr",
81
- OBS_SETS_SPATIALDATA_ZARR: "obsSets.spatialdata.zarr",
82
- OBS_SPOTS_SPATIALDATA_ZARR: "obsSpots.spatialdata.zarr",
83
- FEATURE_LABELS_SPATIALDATA_ZARR: "featureLabels.spatialdata.zarr",
84
- // TODO:
85
- // OBS_POINTS_SPATIALDATA_ZARR: 'obsPoints.spatialdata.zarr',
86
- // OBS_LOCATIONS_SPATIALDATA_ZARR: 'obsLocations.spatialdata.zarr',
87
- // MuData
88
- OBS_FEATURE_MATRIX_MUDATA_ZARR: "obsFeatureMatrix.mudata.zarr",
89
- OBS_SETS_MUDATA_ZARR: "obsSets.mudata.zarr",
90
- OBS_EMBEDDING_MUDATA_ZARR: "obsEmbedding.mudata.zarr",
91
- OBS_SPOTS_MUDATA_ZARR: "obsSpots.mudata.zarr",
92
- OBS_POINTS_MUDATA_ZARR: "obsPoints.mudata.zarr",
93
- OBS_LOCATIONS_MUDATA_ZARR: "obsLocations.mudata.zarr",
94
- OBS_SEGMENTATIONS_MUDATA_ZARR: "obsSegmentations.mudata.zarr",
95
- OBS_LABELS_MUDATA_ZARR: "obsLabels.mudata.zarr",
96
- FEATURE_LABELS_MUDATA_ZARR: "featureLabels.mudata.zarr",
97
- GENOMIC_PROFILES_ZARR: "genomic-profiles.zarr",
98
- NEIGHBORHOODS_JSON: "neighborhoods.json",
99
- // OME-TIFF
100
- IMAGE_OME_TIFF: "image.ome-tiff",
101
- OBS_SEGMENTATIONS_OME_TIFF: "obsSegmentations.ome-tiff",
102
- // GLB
103
- OBS_SEGMENTATIONS_GLB: "obsSegmentations.glb",
104
- // New file types to support old file types:
105
- // - cells.json
106
- OBS_EMBEDDING_CELLS_JSON: "obsEmbedding.cells.json",
107
- OBS_SEGMENTATIONS_CELLS_JSON: "obsSegmentations.cells.json",
108
- OBS_LOCATIONS_CELLS_JSON: "obsLocations.cells.json",
109
- OBS_LABELS_CELLS_JSON: "obsLabels.cells.json",
110
- // - cell-sets.json
111
- OBS_SETS_CELL_SETS_JSON: "obsSets.cell-sets.json",
112
- // - genes.json
113
- OBS_FEATURE_MATRIX_GENES_JSON: "obsFeatureMatrix.genes.json",
114
- // - clusters.json
115
- OBS_FEATURE_MATRIX_CLUSTERS_JSON: "obsFeatureMatrix.clusters.json",
116
- // - expression-matrix.zarr
117
- OBS_FEATURE_MATRIX_EXPRESSION_MATRIX_ZARR: "obsFeatureMatrix.expression-matrix.zarr",
118
- // - raster.json
119
- IMAGE_RASTER_JSON: "image.raster.json",
120
- OBS_SEGMENTATIONS_RASTER_JSON: "obsSegmentations.raster.json",
121
- // - molecules.json
122
- OBS_LOCATIONS_MOLECULES_JSON: "obsLocations.molecules.json",
123
- OBS_LABELS_MOLECULES_JSON: "obsLabels.molecules.json",
124
- // Legacy joint file types
125
- CELLS_JSON: "cells.json",
126
- CELL_SETS_JSON: "cell-sets.json",
127
- ANNDATA_CELL_SETS_ZARR: "anndata-cell-sets.zarr",
128
- ANNDATA_CELLS_ZARR: "anndata-cells.zarr",
129
- EXPRESSION_MATRIX_ZARR: "expression-matrix.zarr",
130
- MOLECULES_JSON: "molecules.json",
131
4
  RASTER_JSON: "raster.json",
132
- RASTER_OME_ZARR: "raster.ome-zarr",
133
- CLUSTERS_JSON: "clusters.json",
134
- GENES_JSON: "genes.json",
135
- ANNDATA_EXPRESSION_MATRIX_ZARR: "anndata-expression-matrix.zarr"
5
+ RASTER_OME_ZARR: "raster.ome-zarr"
136
6
  };
137
7
  const CoordinationType = {
138
8
  META_COORDINATION_SCOPES: "metaCoordinationScopes",
139
9
  META_COORDINATION_SCOPES_BY: "metaCoordinationScopesBy",
140
10
  DATASET: "dataset",
141
- // Entity types
142
- OBS_TYPE: "obsType",
143
- FEATURE_TYPE: "featureType",
144
- FEATURE_VALUE_TYPE: "featureValueType",
145
- OBS_LABELS_TYPE: "obsLabelsType",
146
- FEATURE_LABELS_TYPE: "featureLabelsType",
147
11
  // Other types
148
12
  EMBEDDING_TYPE: "embeddingType",
149
- EMBEDDING_ZOOM: "embeddingZoom",
150
- EMBEDDING_ROTATION: "embeddingRotation",
151
- EMBEDDING_TARGET_X: "embeddingTargetX",
152
- EMBEDDING_TARGET_Y: "embeddingTargetY",
153
- EMBEDDING_TARGET_Z: "embeddingTargetZ",
154
- EMBEDDING_OBS_SET_POLYGONS_VISIBLE: "embeddingObsSetPolygonsVisible",
155
- EMBEDDING_OBS_SET_LABELS_VISIBLE: "embeddingObsSetLabelsVisible",
156
- EMBEDDING_OBS_SET_LABEL_SIZE: "embeddingObsSetLabelSize",
157
- EMBEDDING_OBS_RADIUS: "embeddingObsRadius",
158
- EMBEDDING_OBS_RADIUS_MODE: "embeddingObsRadiusMode",
159
- EMBEDDING_OBS_OPACITY: "embeddingObsOpacity",
160
- EMBEDDING_OBS_OPACITY_MODE: "embeddingObsOpacityMode",
161
13
  SPATIAL_ZOOM: "spatialZoom",
162
- SPATIAL_ROTATION: "spatialRotation",
163
14
  SPATIAL_TARGET_X: "spatialTargetX",
164
15
  SPATIAL_TARGET_Y: "spatialTargetY",
165
- SPATIAL_TARGET_Z: "spatialTargetZ",
166
- SPATIAL_TARGET_T: "spatialTargetT",
167
- SPATIAL_ROTATION_X: "spatialRotationX",
168
- SPATIAL_ROTATION_Y: "spatialRotationY",
169
- SPATIAL_ROTATION_Z: "spatialRotationZ",
170
- SPATIAL_ROTATION_ORBIT: "spatialRotationOrbit",
171
- SPATIAL_ORBIT_AXIS: "spatialOrbitAxis",
172
- SPATIAL_AXIS_FIXED: "spatialAxisFixed",
173
- HEATMAP_ZOOM_X: "heatmapZoomX",
174
- HEATMAP_ZOOM_Y: "heatmapZoomY",
175
- HEATMAP_TARGET_X: "heatmapTargetX",
176
- HEATMAP_TARGET_Y: "heatmapTargetY",
177
- OBS_HIGHLIGHT: "obsHighlight",
178
- OBS_SELECTION: "obsSelection",
179
- OBS_SET_SELECTION: "obsSetSelection",
180
- OBS_SELECTION_MODE: "obsSelectionMode",
181
- OBS_FILTER: "obsFilter",
182
- OBS_SET_FILTER: "obsSetFilter",
183
- OBS_FILTER_MODE: "obsFilterMode",
184
- OBS_SET_HIGHLIGHT: "obsSetHighlight",
185
- OBS_SET_EXPANSION: "obsSetExpansion",
186
- OBS_SET_COLOR: "obsSetColor",
187
- FEATURE_HIGHLIGHT: "featureHighlight",
188
- FEATURE_SELECTION: "featureSelection",
189
- FEATURE_SET_SELECTION: "featureSetSelection",
190
- FEATURE_SELECTION_MODE: "featureSelectionMode",
191
- FEATURE_FILTER: "featureFilter",
192
- FEATURE_SET_FILTER: "featureSetFilter",
193
- FEATURE_FILTER_MODE: "featureFilterMode",
194
- FEATURE_VALUE_COLORMAP: "featureValueColormap",
195
- FEATURE_VALUE_TRANSFORM: "featureValueTransform",
196
- FEATURE_VALUE_COLORMAP_RANGE: "featureValueColormapRange",
197
- FEATURE_AGGREGATION_STRATEGY: "featureAggregationStrategy",
198
- OBS_COLOR_ENCODING: "obsColorEncoding",
199
16
  SPATIAL_IMAGE_LAYER: "spatialImageLayer",
200
- SPATIAL_SEGMENTATION_LAYER: "spatialSegmentationLayer",
201
- SPATIAL_POINT_LAYER: "spatialPointLayer",
202
- SPATIAL_NEIGHBORHOOD_LAYER: "spatialNeighborhoodLayer",
203
- GENOMIC_ZOOM_X: "genomicZoomX",
204
- GENOMIC_ZOOM_Y: "genomicZoomY",
205
- GENOMIC_TARGET_X: "genomicTargetX",
206
- GENOMIC_TARGET_Y: "genomicTargetY",
207
- ADDITIONAL_OBS_SETS: "additionalObsSets",
208
- // TODO: use obsHighlight rather than moleculeHighlight.
209
- MOLECULE_HIGHLIGHT: "moleculeHighlight",
210
- GATING_FEATURE_SELECTION_X: "gatingFeatureSelectionX",
211
- GATING_FEATURE_SELECTION_Y: "gatingFeatureSelectionY",
212
- FEATURE_VALUE_TRANSFORM_COEFFICIENT: "featureValueTransformCoefficient",
213
- FEATURE_VALUE_POSITIVITY_THRESHOLD: "featureValuePositivityThreshold",
214
- TOOLTIPS_VISIBLE: "tooltipsVisible",
215
- FILE_UID: "fileUid",
216
- IMAGE_LAYER: "imageLayer",
217
- IMAGE_CHANNEL: "imageChannel",
218
- SEGMENTATION_LAYER: "segmentationLayer",
219
- SEGMENTATION_CHANNEL: "segmentationChannel",
220
- SPATIAL_TARGET_C: "spatialTargetC",
221
- SPATIAL_LAYER_VISIBLE: "spatialLayerVisible",
222
- SPATIAL_LAYER_OPACITY: "spatialLayerOpacity",
223
- SPATIAL_LAYER_COLORMAP: "spatialLayerColormap",
224
- SPATIAL_LAYER_TRANSPARENT_COLOR: "spatialLayerTransparentColor",
225
- SPATIAL_LAYER_MODEL_MATRIX: "spatialLayerModelMatrix",
226
- SPATIAL_SEGMENTATION_FILLED: "spatialSegmentationFilled",
227
- SPATIAL_SEGMENTATION_STROKE_WIDTH: "spatialSegmentationStrokeWidth",
228
- SPATIAL_CHANNEL_COLOR: "spatialChannelColor",
229
- SPATIAL_CHANNEL_VISIBLE: "spatialChannelVisible",
230
- SPATIAL_CHANNEL_OPACITY: "spatialChannelOpacity",
231
- SPATIAL_CHANNEL_WINDOW: "spatialChannelWindow",
232
- PHOTOMETRIC_INTERPRETATION: "photometricInterpretation",
233
- // For 3D volume rendering
234
- SPATIAL_RENDERING_MODE: "spatialRenderingMode",
235
- // For whole spatial view
236
- VOLUMETRIC_RENDERING_ALGORITHM: "volumetricRenderingAlgorithm",
237
- // Could be per-image-layer
238
- SPATIAL_TARGET_RESOLUTION: "spatialTargetResolution",
239
- // Per-spatial-layer
240
- // For clipping plane sliders
241
- SPATIAL_SLICE_X: "spatialSliceX",
242
- SPATIAL_SLICE_Y: "spatialSliceY",
243
- SPATIAL_SLICE_Z: "spatialSliceZ",
244
- // For spatial spot and point layers
245
- SPOT_LAYER: "spotLayer",
246
- POINT_LAYER: "pointLayer",
247
- SPATIAL_SPOT_RADIUS: "spatialSpotRadius",
248
- // In micrometers?
249
- SPATIAL_SPOT_FILLED: "spatialSpotFilled",
250
- SPATIAL_SPOT_STROKE_WIDTH: "spatialSpotStrokeWidth",
251
- SPATIAL_LAYER_COLOR: "spatialLayerColor",
252
- PIXEL_HIGHLIGHT: "pixelHighlight",
253
- // Per-image-layer
254
- TOOLTIP_CROSSHAIRS_VISIBLE: "tooltipCrosshairsVisible",
255
- LEGEND_VISIBLE: "legendVisible",
256
- SPATIAL_CHANNEL_LABELS_VISIBLE: "spatialChannelLabelsVisible",
257
- SPATIAL_CHANNEL_LABELS_ORIENTATION: "spatialChannelLabelsOrientation",
258
- SPATIAL_CHANNEL_LABEL_SIZE: "spatialChannelLabelSize",
259
- // Multi-sample / comparative
260
- SAMPLE_TYPE: "sampleType",
261
- SAMPLE_SELECTION: "sampleSelection",
262
- SAMPLE_SET_SELECTION: "sampleSetSelection",
263
- SAMPLE_SELECTION_MODE: "sampleSelectionMode",
264
- SAMPLE_FILTER: "sampleFilter",
265
- SAMPLE_SET_FILTER: "sampleSetFilter",
266
- SAMPLE_FILTER_MODE: "sampleFilterMode",
267
- SAMPLE_SET_COLOR: "sampleSetColor",
268
- SAMPLE_HIGHLIGHT: "sampleHighlight",
269
- EMBEDDING_POINTS_VISIBLE: "embeddingPointsVisible",
270
- EMBEDDING_CONTOURS_VISIBLE: "embeddingContoursVisible",
271
- EMBEDDING_CONTOURS_FILLED: "embeddingContoursFilled",
272
- EMBEDDING_CONTOUR_PERCENTILES: "embeddingContourPercentiles",
273
- CONTOUR_COLOR_ENCODING: "contourColorEncoding",
274
- CONTOUR_COLOR: "contourColor",
275
- // For volcano plot:
276
- FEATURE_POINT_SIGNIFICANCE_THRESHOLD: "featurePointSignificanceThreshold",
277
- FEATURE_LABEL_SIGNIFICANCE_THRESHOLD: "featureLabelSignificanceThreshold",
278
- FEATURE_POINT_FOLD_CHANGE_THRESHOLD: "featurePointFoldChangeThreshold",
279
- FEATURE_LABEL_FOLD_CHANGE_THRESHOLD: "featureLabelFoldChangeThreshold",
280
- // Treemap
281
- HIERARCHY_LEVELS: "hierarchyLevels"
17
+ SPATIAL_SEGMENTATION_LAYER: "spatialSegmentationLayer"
282
18
  };
283
- var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
284
19
  function getDefaultExportFromCjs(x) {
285
20
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
286
21
  }
287
22
  function commonjsRequire(path) {
288
23
  throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
289
24
  }
290
- var pluralize = { exports: {} };
291
- (function(module, exports) {
292
- (function(root, pluralize2) {
293
- if (typeof commonjsRequire === "function" && true && true) {
294
- module.exports = pluralize2();
295
- } else {
296
- root.pluralize = pluralize2();
297
- }
298
- })(commonjsGlobal, function() {
299
- var pluralRules = [];
300
- var singularRules = [];
301
- var uncountables = {};
302
- var irregularPlurals = {};
303
- var irregularSingles = {};
304
- function sanitizeRule(rule) {
305
- if (typeof rule === "string") {
306
- return new RegExp("^" + rule + "$", "i");
25
+ var pluralize$1 = { exports: {} };
26
+ var pluralize = pluralize$1.exports;
27
+ var hasRequiredPluralize;
28
+ function requirePluralize() {
29
+ if (hasRequiredPluralize) return pluralize$1.exports;
30
+ hasRequiredPluralize = 1;
31
+ (function(module, exports) {
32
+ (function(root, pluralize2) {
33
+ if (typeof commonjsRequire === "function" && true && true) {
34
+ module.exports = pluralize2();
35
+ } else {
36
+ root.pluralize = pluralize2();
307
37
  }
308
- return rule;
309
- }
310
- function restoreCase(word, token) {
311
- if (word === token)
312
- return token;
313
- if (word === word.toLowerCase())
38
+ })(pluralize, function() {
39
+ var pluralRules = [];
40
+ var singularRules = [];
41
+ var uncountables = {};
42
+ var irregularPlurals = {};
43
+ var irregularSingles = {};
44
+ function sanitizeRule(rule) {
45
+ if (typeof rule === "string") {
46
+ return new RegExp("^" + rule + "$", "i");
47
+ }
48
+ return rule;
49
+ }
50
+ function restoreCase(word, token) {
51
+ if (word === token) return token;
52
+ if (word === word.toLowerCase()) return token.toLowerCase();
53
+ if (word === word.toUpperCase()) return token.toUpperCase();
54
+ if (word[0] === word[0].toUpperCase()) {
55
+ return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();
56
+ }
314
57
  return token.toLowerCase();
315
- if (word === word.toUpperCase())
316
- return token.toUpperCase();
317
- if (word[0] === word[0].toUpperCase()) {
318
- return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();
319
58
  }
320
- return token.toLowerCase();
321
- }
322
- function interpolate(str, args) {
323
- return str.replace(/\$(\d{1,2})/g, function(match, index) {
324
- return args[index] || "";
325
- });
326
- }
327
- function replace(word, rule) {
328
- return word.replace(rule[0], function(match, index) {
329
- var result = interpolate(rule[1], arguments);
330
- if (match === "") {
331
- return restoreCase(word[index - 1], result);
59
+ function interpolate(str, args) {
60
+ return str.replace(/\$(\d{1,2})/g, function(match, index) {
61
+ return args[index] || "";
62
+ });
63
+ }
64
+ function replace(word, rule) {
65
+ return word.replace(rule[0], function(match, index) {
66
+ var result = interpolate(rule[1], arguments);
67
+ if (match === "") {
68
+ return restoreCase(word[index - 1], result);
69
+ }
70
+ return restoreCase(match, result);
71
+ });
72
+ }
73
+ function sanitizeWord(token, word, rules) {
74
+ if (!token.length || uncountables.hasOwnProperty(token)) {
75
+ return word;
76
+ }
77
+ var len = rules.length;
78
+ while (len--) {
79
+ var rule = rules[len];
80
+ if (rule[0].test(word)) return replace(word, rule);
332
81
  }
333
- return restoreCase(match, result);
334
- });
335
- }
336
- function sanitizeWord(token, word, rules) {
337
- if (!token.length || uncountables.hasOwnProperty(token)) {
338
82
  return word;
339
83
  }
340
- var len = rules.length;
341
- while (len--) {
342
- var rule = rules[len];
343
- if (rule[0].test(word))
344
- return replace(word, rule);
84
+ function replaceWord(replaceMap, keepMap, rules) {
85
+ return function(word) {
86
+ var token = word.toLowerCase();
87
+ if (keepMap.hasOwnProperty(token)) {
88
+ return restoreCase(word, token);
89
+ }
90
+ if (replaceMap.hasOwnProperty(token)) {
91
+ return restoreCase(word, replaceMap[token]);
92
+ }
93
+ return sanitizeWord(token, word, rules);
94
+ };
345
95
  }
346
- return word;
347
- }
348
- function replaceWord(replaceMap, keepMap, rules) {
349
- return function(word) {
350
- var token = word.toLowerCase();
351
- if (keepMap.hasOwnProperty(token)) {
352
- return restoreCase(word, token);
353
- }
354
- if (replaceMap.hasOwnProperty(token)) {
355
- return restoreCase(word, replaceMap[token]);
96
+ function checkWord(replaceMap, keepMap, rules, bool) {
97
+ return function(word) {
98
+ var token = word.toLowerCase();
99
+ if (keepMap.hasOwnProperty(token)) return true;
100
+ if (replaceMap.hasOwnProperty(token)) return false;
101
+ return sanitizeWord(token, token, rules) === token;
102
+ };
103
+ }
104
+ function pluralize2(word, count, inclusive) {
105
+ var pluralized = count === 1 ? pluralize2.singular(word) : pluralize2.plural(word);
106
+ return (inclusive ? count + " " : "") + pluralized;
107
+ }
108
+ pluralize2.plural = replaceWord(
109
+ irregularSingles,
110
+ irregularPlurals,
111
+ pluralRules
112
+ );
113
+ pluralize2.isPlural = checkWord(
114
+ irregularSingles,
115
+ irregularPlurals,
116
+ pluralRules
117
+ );
118
+ pluralize2.singular = replaceWord(
119
+ irregularPlurals,
120
+ irregularSingles,
121
+ singularRules
122
+ );
123
+ pluralize2.isSingular = checkWord(
124
+ irregularPlurals,
125
+ irregularSingles,
126
+ singularRules
127
+ );
128
+ pluralize2.addPluralRule = function(rule, replacement) {
129
+ pluralRules.push([sanitizeRule(rule), replacement]);
130
+ };
131
+ pluralize2.addSingularRule = function(rule, replacement) {
132
+ singularRules.push([sanitizeRule(rule), replacement]);
133
+ };
134
+ pluralize2.addUncountableRule = function(word) {
135
+ if (typeof word === "string") {
136
+ uncountables[word.toLowerCase()] = true;
137
+ return;
356
138
  }
357
- return sanitizeWord(token, word, rules);
139
+ pluralize2.addPluralRule(word, "$0");
140
+ pluralize2.addSingularRule(word, "$0");
358
141
  };
359
- }
360
- function checkWord(replaceMap, keepMap, rules, bool) {
361
- return function(word) {
362
- var token = word.toLowerCase();
363
- if (keepMap.hasOwnProperty(token))
364
- return true;
365
- if (replaceMap.hasOwnProperty(token))
366
- return false;
367
- return sanitizeWord(token, token, rules) === token;
142
+ pluralize2.addIrregularRule = function(single, plural) {
143
+ plural = plural.toLowerCase();
144
+ single = single.toLowerCase();
145
+ irregularSingles[single] = plural;
146
+ irregularPlurals[plural] = single;
368
147
  };
369
- }
370
- function pluralize2(word, count, inclusive) {
371
- var pluralized = count === 1 ? pluralize2.singular(word) : pluralize2.plural(word);
372
- return (inclusive ? count + " " : "") + pluralized;
373
- }
374
- pluralize2.plural = replaceWord(
375
- irregularSingles,
376
- irregularPlurals,
377
- pluralRules
378
- );
379
- pluralize2.isPlural = checkWord(
380
- irregularSingles,
381
- irregularPlurals,
382
- pluralRules
383
- );
384
- pluralize2.singular = replaceWord(
385
- irregularPlurals,
386
- irregularSingles,
387
- singularRules
388
- );
389
- pluralize2.isSingular = checkWord(
390
- irregularPlurals,
391
- irregularSingles,
392
- singularRules
393
- );
394
- pluralize2.addPluralRule = function(rule, replacement) {
395
- pluralRules.push([sanitizeRule(rule), replacement]);
396
- };
397
- pluralize2.addSingularRule = function(rule, replacement) {
398
- singularRules.push([sanitizeRule(rule), replacement]);
399
- };
400
- pluralize2.addUncountableRule = function(word) {
401
- if (typeof word === "string") {
402
- uncountables[word.toLowerCase()] = true;
403
- return;
404
- }
405
- pluralize2.addPluralRule(word, "$0");
406
- pluralize2.addSingularRule(word, "$0");
407
- };
408
- pluralize2.addIrregularRule = function(single, plural) {
409
- plural = plural.toLowerCase();
410
- single = single.toLowerCase();
411
- irregularSingles[single] = plural;
412
- irregularPlurals[plural] = single;
413
- };
414
- [
415
- // Pronouns.
416
- ["I", "we"],
417
- ["me", "us"],
418
- ["he", "they"],
419
- ["she", "they"],
420
- ["them", "them"],
421
- ["myself", "ourselves"],
422
- ["yourself", "yourselves"],
423
- ["itself", "themselves"],
424
- ["herself", "themselves"],
425
- ["himself", "themselves"],
426
- ["themself", "themselves"],
427
- ["is", "are"],
428
- ["was", "were"],
429
- ["has", "have"],
430
- ["this", "these"],
431
- ["that", "those"],
432
- // Words ending in with a consonant and `o`.
433
- ["echo", "echoes"],
434
- ["dingo", "dingoes"],
435
- ["volcano", "volcanoes"],
436
- ["tornado", "tornadoes"],
437
- ["torpedo", "torpedoes"],
438
- // Ends with `us`.
439
- ["genus", "genera"],
440
- ["viscus", "viscera"],
441
- // Ends with `ma`.
442
- ["stigma", "stigmata"],
443
- ["stoma", "stomata"],
444
- ["dogma", "dogmata"],
445
- ["lemma", "lemmata"],
446
- ["schema", "schemata"],
447
- ["anathema", "anathemata"],
448
- // Other irregular rules.
449
- ["ox", "oxen"],
450
- ["axe", "axes"],
451
- ["die", "dice"],
452
- ["yes", "yeses"],
453
- ["foot", "feet"],
454
- ["eave", "eaves"],
455
- ["goose", "geese"],
456
- ["tooth", "teeth"],
457
- ["quiz", "quizzes"],
458
- ["human", "humans"],
459
- ["proof", "proofs"],
460
- ["carve", "carves"],
461
- ["valve", "valves"],
462
- ["looey", "looies"],
463
- ["thief", "thieves"],
464
- ["groove", "grooves"],
465
- ["pickaxe", "pickaxes"],
466
- ["passerby", "passersby"]
467
- ].forEach(function(rule) {
468
- return pluralize2.addIrregularRule(rule[0], rule[1]);
469
- });
470
- [
471
- [/s?$/i, "s"],
472
- [/[^\u0000-\u007F]$/i, "$0"],
473
- [/([^aeiou]ese)$/i, "$1"],
474
- [/(ax|test)is$/i, "$1es"],
475
- [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, "$1es"],
476
- [/(e[mn]u)s?$/i, "$1s"],
477
- [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, "$1"],
478
- [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, "$1i"],
479
- [/(alumn|alg|vertebr)(?:a|ae)$/i, "$1ae"],
480
- [/(seraph|cherub)(?:im)?$/i, "$1im"],
481
- [/(her|at|gr)o$/i, "$1oes"],
482
- [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, "$1a"],
483
- [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, "$1a"],
484
- [/sis$/i, "ses"],
485
- [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, "$1$2ves"],
486
- [/([^aeiouy]|qu)y$/i, "$1ies"],
487
- [/([^ch][ieo][ln])ey$/i, "$1ies"],
488
- [/(x|ch|ss|sh|zz)$/i, "$1es"],
489
- [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, "$1ices"],
490
- [/\b((?:tit)?m|l)(?:ice|ouse)$/i, "$1ice"],
491
- [/(pe)(?:rson|ople)$/i, "$1ople"],
492
- [/(child)(?:ren)?$/i, "$1ren"],
493
- [/eaux$/i, "$0"],
494
- [/m[ae]n$/i, "men"],
495
- ["thou", "you"]
496
- ].forEach(function(rule) {
497
- return pluralize2.addPluralRule(rule[0], rule[1]);
498
- });
499
- [
500
- [/s$/i, ""],
501
- [/(ss)$/i, "$1"],
502
- [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, "$1fe"],
503
- [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, "$1f"],
504
- [/ies$/i, "y"],
505
- [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, "$1ie"],
506
- [/\b(mon|smil)ies$/i, "$1ey"],
507
- [/\b((?:tit)?m|l)ice$/i, "$1ouse"],
508
- [/(seraph|cherub)im$/i, "$1"],
509
- [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, "$1"],
510
- [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, "$1sis"],
511
- [/(movie|twelve|abuse|e[mn]u)s$/i, "$1"],
512
- [/(test)(?:is|es)$/i, "$1is"],
513
- [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, "$1us"],
514
- [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, "$1um"],
515
- [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, "$1on"],
516
- [/(alumn|alg|vertebr)ae$/i, "$1a"],
517
- [/(cod|mur|sil|vert|ind)ices$/i, "$1ex"],
518
- [/(matr|append)ices$/i, "$1ix"],
519
- [/(pe)(rson|ople)$/i, "$1rson"],
520
- [/(child)ren$/i, "$1"],
521
- [/(eau)x?$/i, "$1"],
522
- [/men$/i, "man"]
523
- ].forEach(function(rule) {
524
- return pluralize2.addSingularRule(rule[0], rule[1]);
148
+ [
149
+ // Pronouns.
150
+ ["I", "we"],
151
+ ["me", "us"],
152
+ ["he", "they"],
153
+ ["she", "they"],
154
+ ["them", "them"],
155
+ ["myself", "ourselves"],
156
+ ["yourself", "yourselves"],
157
+ ["itself", "themselves"],
158
+ ["herself", "themselves"],
159
+ ["himself", "themselves"],
160
+ ["themself", "themselves"],
161
+ ["is", "are"],
162
+ ["was", "were"],
163
+ ["has", "have"],
164
+ ["this", "these"],
165
+ ["that", "those"],
166
+ // Words ending in with a consonant and `o`.
167
+ ["echo", "echoes"],
168
+ ["dingo", "dingoes"],
169
+ ["volcano", "volcanoes"],
170
+ ["tornado", "tornadoes"],
171
+ ["torpedo", "torpedoes"],
172
+ // Ends with `us`.
173
+ ["genus", "genera"],
174
+ ["viscus", "viscera"],
175
+ // Ends with `ma`.
176
+ ["stigma", "stigmata"],
177
+ ["stoma", "stomata"],
178
+ ["dogma", "dogmata"],
179
+ ["lemma", "lemmata"],
180
+ ["schema", "schemata"],
181
+ ["anathema", "anathemata"],
182
+ // Other irregular rules.
183
+ ["ox", "oxen"],
184
+ ["axe", "axes"],
185
+ ["die", "dice"],
186
+ ["yes", "yeses"],
187
+ ["foot", "feet"],
188
+ ["eave", "eaves"],
189
+ ["goose", "geese"],
190
+ ["tooth", "teeth"],
191
+ ["quiz", "quizzes"],
192
+ ["human", "humans"],
193
+ ["proof", "proofs"],
194
+ ["carve", "carves"],
195
+ ["valve", "valves"],
196
+ ["looey", "looies"],
197
+ ["thief", "thieves"],
198
+ ["groove", "grooves"],
199
+ ["pickaxe", "pickaxes"],
200
+ ["passerby", "passersby"]
201
+ ].forEach(function(rule) {
202
+ return pluralize2.addIrregularRule(rule[0], rule[1]);
203
+ });
204
+ [
205
+ [/s?$/i, "s"],
206
+ [/[^\u0000-\u007F]$/i, "$0"],
207
+ [/([^aeiou]ese)$/i, "$1"],
208
+ [/(ax|test)is$/i, "$1es"],
209
+ [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, "$1es"],
210
+ [/(e[mn]u)s?$/i, "$1s"],
211
+ [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, "$1"],
212
+ [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, "$1i"],
213
+ [/(alumn|alg|vertebr)(?:a|ae)$/i, "$1ae"],
214
+ [/(seraph|cherub)(?:im)?$/i, "$1im"],
215
+ [/(her|at|gr)o$/i, "$1oes"],
216
+ [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, "$1a"],
217
+ [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, "$1a"],
218
+ [/sis$/i, "ses"],
219
+ [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, "$1$2ves"],
220
+ [/([^aeiouy]|qu)y$/i, "$1ies"],
221
+ [/([^ch][ieo][ln])ey$/i, "$1ies"],
222
+ [/(x|ch|ss|sh|zz)$/i, "$1es"],
223
+ [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, "$1ices"],
224
+ [/\b((?:tit)?m|l)(?:ice|ouse)$/i, "$1ice"],
225
+ [/(pe)(?:rson|ople)$/i, "$1ople"],
226
+ [/(child)(?:ren)?$/i, "$1ren"],
227
+ [/eaux$/i, "$0"],
228
+ [/m[ae]n$/i, "men"],
229
+ ["thou", "you"]
230
+ ].forEach(function(rule) {
231
+ return pluralize2.addPluralRule(rule[0], rule[1]);
232
+ });
233
+ [
234
+ [/s$/i, ""],
235
+ [/(ss)$/i, "$1"],
236
+ [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, "$1fe"],
237
+ [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, "$1f"],
238
+ [/ies$/i, "y"],
239
+ [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, "$1ie"],
240
+ [/\b(mon|smil)ies$/i, "$1ey"],
241
+ [/\b((?:tit)?m|l)ice$/i, "$1ouse"],
242
+ [/(seraph|cherub)im$/i, "$1"],
243
+ [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, "$1"],
244
+ [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, "$1sis"],
245
+ [/(movie|twelve|abuse|e[mn]u)s$/i, "$1"],
246
+ [/(test)(?:is|es)$/i, "$1is"],
247
+ [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, "$1us"],
248
+ [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, "$1um"],
249
+ [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, "$1on"],
250
+ [/(alumn|alg|vertebr)ae$/i, "$1a"],
251
+ [/(cod|mur|sil|vert|ind)ices$/i, "$1ex"],
252
+ [/(matr|append)ices$/i, "$1ix"],
253
+ [/(pe)(rson|ople)$/i, "$1rson"],
254
+ [/(child)ren$/i, "$1"],
255
+ [/(eau)x?$/i, "$1"],
256
+ [/men$/i, "man"]
257
+ ].forEach(function(rule) {
258
+ return pluralize2.addSingularRule(rule[0], rule[1]);
259
+ });
260
+ [
261
+ // Singular words with no plurals.
262
+ "adulthood",
263
+ "advice",
264
+ "agenda",
265
+ "aid",
266
+ "aircraft",
267
+ "alcohol",
268
+ "ammo",
269
+ "analytics",
270
+ "anime",
271
+ "athletics",
272
+ "audio",
273
+ "bison",
274
+ "blood",
275
+ "bream",
276
+ "buffalo",
277
+ "butter",
278
+ "carp",
279
+ "cash",
280
+ "chassis",
281
+ "chess",
282
+ "clothing",
283
+ "cod",
284
+ "commerce",
285
+ "cooperation",
286
+ "corps",
287
+ "debris",
288
+ "diabetes",
289
+ "digestion",
290
+ "elk",
291
+ "energy",
292
+ "equipment",
293
+ "excretion",
294
+ "expertise",
295
+ "firmware",
296
+ "flounder",
297
+ "fun",
298
+ "gallows",
299
+ "garbage",
300
+ "graffiti",
301
+ "hardware",
302
+ "headquarters",
303
+ "health",
304
+ "herpes",
305
+ "highjinks",
306
+ "homework",
307
+ "housework",
308
+ "information",
309
+ "jeans",
310
+ "justice",
311
+ "kudos",
312
+ "labour",
313
+ "literature",
314
+ "machinery",
315
+ "mackerel",
316
+ "mail",
317
+ "media",
318
+ "mews",
319
+ "moose",
320
+ "music",
321
+ "mud",
322
+ "manga",
323
+ "news",
324
+ "only",
325
+ "personnel",
326
+ "pike",
327
+ "plankton",
328
+ "pliers",
329
+ "police",
330
+ "pollution",
331
+ "premises",
332
+ "rain",
333
+ "research",
334
+ "rice",
335
+ "salmon",
336
+ "scissors",
337
+ "series",
338
+ "sewage",
339
+ "shambles",
340
+ "shrimp",
341
+ "software",
342
+ "species",
343
+ "staff",
344
+ "swine",
345
+ "tennis",
346
+ "traffic",
347
+ "transportation",
348
+ "trout",
349
+ "tuna",
350
+ "wealth",
351
+ "welfare",
352
+ "whiting",
353
+ "wildebeest",
354
+ "wildlife",
355
+ "you",
356
+ /pok[eé]mon$/i,
357
+ // Regexes.
358
+ /[^aeiou]ese$/i,
359
+ // "chinese", "japanese"
360
+ /deer$/i,
361
+ // "deer", "reindeer"
362
+ /fish$/i,
363
+ // "fish", "blowfish", "angelfish"
364
+ /measles$/i,
365
+ /o[iu]s$/i,
366
+ // "carnivorous"
367
+ /pox$/i,
368
+ // "chickpox", "smallpox"
369
+ /sheep$/i
370
+ ].forEach(pluralize2.addUncountableRule);
371
+ return pluralize2;
525
372
  });
526
- [
527
- // Singular words with no plurals.
528
- "adulthood",
529
- "advice",
530
- "agenda",
531
- "aid",
532
- "aircraft",
533
- "alcohol",
534
- "ammo",
535
- "analytics",
536
- "anime",
537
- "athletics",
538
- "audio",
539
- "bison",
540
- "blood",
541
- "bream",
542
- "buffalo",
543
- "butter",
544
- "carp",
545
- "cash",
546
- "chassis",
547
- "chess",
548
- "clothing",
549
- "cod",
550
- "commerce",
551
- "cooperation",
552
- "corps",
553
- "debris",
554
- "diabetes",
555
- "digestion",
556
- "elk",
557
- "energy",
558
- "equipment",
559
- "excretion",
560
- "expertise",
561
- "firmware",
562
- "flounder",
563
- "fun",
564
- "gallows",
565
- "garbage",
566
- "graffiti",
567
- "hardware",
568
- "headquarters",
569
- "health",
570
- "herpes",
571
- "highjinks",
572
- "homework",
573
- "housework",
574
- "information",
575
- "jeans",
576
- "justice",
577
- "kudos",
578
- "labour",
579
- "literature",
580
- "machinery",
581
- "mackerel",
582
- "mail",
583
- "media",
584
- "mews",
585
- "moose",
586
- "music",
587
- "mud",
588
- "manga",
589
- "news",
590
- "only",
591
- "personnel",
592
- "pike",
593
- "plankton",
594
- "pliers",
595
- "police",
596
- "pollution",
597
- "premises",
598
- "rain",
599
- "research",
600
- "rice",
601
- "salmon",
602
- "scissors",
603
- "series",
604
- "sewage",
605
- "shambles",
606
- "shrimp",
607
- "software",
608
- "species",
609
- "staff",
610
- "swine",
611
- "tennis",
612
- "traffic",
613
- "transportation",
614
- "trout",
615
- "tuna",
616
- "wealth",
617
- "welfare",
618
- "whiting",
619
- "wildebeest",
620
- "wildlife",
621
- "you",
622
- /pok[eé]mon$/i,
623
- // Regexes.
624
- /[^aeiou]ese$/i,
625
- // "chinese", "japanese"
626
- /deer$/i,
627
- // "deer", "reindeer"
628
- /fish$/i,
629
- // "fish", "blowfish", "angelfish"
630
- /measles$/i,
631
- /o[iu]s$/i,
632
- // "carnivorous"
633
- /pox$/i,
634
- // "chickpox", "smallpox"
635
- /sheep$/i
636
- ].forEach(pluralize2.addUncountableRule);
637
- return pluralize2;
638
- });
639
- })(pluralize);
640
- var pluralizeExports = pluralize.exports;
373
+ })(pluralize$1);
374
+ return pluralize$1.exports;
375
+ }
376
+ var pluralizeExports = requirePluralize();
641
377
  const plur = /* @__PURE__ */ getDefaultExportFromCjs(pluralizeExports);
642
378
  plur.addPluralRule("glomerulus", "glomeruli");
643
379
  plur.addPluralRule("interstitium", "interstitia");
@@ -688,257 +424,260 @@ function getInitialCoordinationScopeName(datasetUid, dataType, i = null) {
688
424
  const prefix = getInitialCoordinationScopePrefix(datasetUid, dataType);
689
425
  return `${prefix}${i === null ? 0 : i}`;
690
426
  }
691
- var loglevel = { exports: {} };
692
- (function(module) {
693
- (function(root, definition) {
694
- if (module.exports) {
695
- module.exports = definition();
696
- } else {
697
- root.log = definition();
698
- }
699
- })(commonjsGlobal, function() {
700
- var noop = function() {
701
- };
702
- var undefinedType = "undefined";
703
- var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\/|MSIE /.test(window.navigator.userAgent);
704
- var logMethods = [
705
- "trace",
706
- "debug",
707
- "info",
708
- "warn",
709
- "error"
710
- ];
711
- var _loggersByName = {};
712
- var defaultLogger = null;
713
- function bindMethod(obj, methodName) {
714
- var method = obj[methodName];
715
- if (typeof method.bind === "function") {
716
- return method.bind(obj);
427
+ var loglevel$1 = { exports: {} };
428
+ var loglevel = loglevel$1.exports;
429
+ var hasRequiredLoglevel;
430
+ function requireLoglevel() {
431
+ if (hasRequiredLoglevel) return loglevel$1.exports;
432
+ hasRequiredLoglevel = 1;
433
+ (function(module) {
434
+ (function(root, definition) {
435
+ if (module.exports) {
436
+ module.exports = definition();
717
437
  } else {
718
- try {
719
- return Function.prototype.bind.call(method, obj);
720
- } catch (e) {
721
- return function() {
722
- return Function.prototype.apply.apply(method, [obj, arguments]);
723
- };
724
- }
438
+ root.log = definition();
725
439
  }
726
- }
727
- function traceForIE() {
728
- if (console.log) {
729
- if (console.log.apply) {
730
- console.log.apply(console, arguments);
440
+ })(loglevel, function() {
441
+ var noop = function() {
442
+ };
443
+ var undefinedType = "undefined";
444
+ var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\/|MSIE /.test(window.navigator.userAgent);
445
+ var logMethods = [
446
+ "trace",
447
+ "debug",
448
+ "info",
449
+ "warn",
450
+ "error"
451
+ ];
452
+ var _loggersByName = {};
453
+ var defaultLogger = null;
454
+ function bindMethod(obj, methodName) {
455
+ var method = obj[methodName];
456
+ if (typeof method.bind === "function") {
457
+ return method.bind(obj);
731
458
  } else {
732
- Function.prototype.apply.apply(console.log, [console, arguments]);
459
+ try {
460
+ return Function.prototype.bind.call(method, obj);
461
+ } catch (e) {
462
+ return function() {
463
+ return Function.prototype.apply.apply(method, [obj, arguments]);
464
+ };
465
+ }
733
466
  }
734
467
  }
735
- if (console.trace)
736
- console.trace();
737
- }
738
- function realMethod(methodName) {
739
- if (methodName === "debug") {
740
- methodName = "log";
741
- }
742
- if (typeof console === undefinedType) {
743
- return false;
744
- } else if (methodName === "trace" && isIE) {
745
- return traceForIE;
746
- } else if (console[methodName] !== void 0) {
747
- return bindMethod(console, methodName);
748
- } else if (console.log !== void 0) {
749
- return bindMethod(console, "log");
750
- } else {
751
- return noop;
752
- }
753
- }
754
- function replaceLoggingMethods() {
755
- var level = this.getLevel();
756
- for (var i = 0; i < logMethods.length; i++) {
757
- var methodName = logMethods[i];
758
- this[methodName] = i < level ? noop : this.methodFactory(methodName, level, this.name);
759
- }
760
- this.log = this.debug;
761
- if (typeof console === undefinedType && level < this.levels.SILENT) {
762
- return "No console available for logging";
468
+ function traceForIE() {
469
+ if (console.log) {
470
+ if (console.log.apply) {
471
+ console.log.apply(console, arguments);
472
+ } else {
473
+ Function.prototype.apply.apply(console.log, [console, arguments]);
474
+ }
475
+ }
476
+ if (console.trace) console.trace();
763
477
  }
764
- }
765
- function enableLoggingWhenConsoleArrives(methodName) {
766
- return function() {
767
- if (typeof console !== undefinedType) {
768
- replaceLoggingMethods.call(this);
769
- this[methodName].apply(this, arguments);
478
+ function realMethod(methodName) {
479
+ if (methodName === "debug") {
480
+ methodName = "log";
481
+ }
482
+ if (typeof console === undefinedType) {
483
+ return false;
484
+ } else if (methodName === "trace" && isIE) {
485
+ return traceForIE;
486
+ } else if (console[methodName] !== void 0) {
487
+ return bindMethod(console, methodName);
488
+ } else if (console.log !== void 0) {
489
+ return bindMethod(console, "log");
490
+ } else {
491
+ return noop;
770
492
  }
771
- };
772
- }
773
- function defaultMethodFactory(methodName, _level, _loggerName) {
774
- return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);
775
- }
776
- function Logger(name, factory) {
777
- var self2 = this;
778
- var inheritedLevel;
779
- var defaultLevel;
780
- var userLevel;
781
- var storageKey = "loglevel";
782
- if (typeof name === "string") {
783
- storageKey += ":" + name;
784
- } else if (typeof name === "symbol") {
785
- storageKey = void 0;
786
493
  }
787
- function persistLevelIfPossible(levelNum) {
788
- var levelName = (logMethods[levelNum] || "silent").toUpperCase();
789
- if (typeof window === undefinedType || !storageKey)
790
- return;
791
- try {
792
- window.localStorage[storageKey] = levelName;
793
- return;
794
- } catch (ignore) {
494
+ function replaceLoggingMethods() {
495
+ var level = this.getLevel();
496
+ for (var i = 0; i < logMethods.length; i++) {
497
+ var methodName = logMethods[i];
498
+ this[methodName] = i < level ? noop : this.methodFactory(methodName, level, this.name);
795
499
  }
796
- try {
797
- window.document.cookie = encodeURIComponent(storageKey) + "=" + levelName + ";";
798
- } catch (ignore) {
500
+ this.log = this.debug;
501
+ if (typeof console === undefinedType && level < this.levels.SILENT) {
502
+ return "No console available for logging";
799
503
  }
800
504
  }
801
- function getPersistedLevel() {
802
- var storedLevel;
803
- if (typeof window === undefinedType || !storageKey)
804
- return;
805
- try {
806
- storedLevel = window.localStorage[storageKey];
807
- } catch (ignore) {
505
+ function enableLoggingWhenConsoleArrives(methodName) {
506
+ return function() {
507
+ if (typeof console !== undefinedType) {
508
+ replaceLoggingMethods.call(this);
509
+ this[methodName].apply(this, arguments);
510
+ }
511
+ };
512
+ }
513
+ function defaultMethodFactory(methodName, _level, _loggerName) {
514
+ return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);
515
+ }
516
+ function Logger(name, factory) {
517
+ var self = this;
518
+ var inheritedLevel;
519
+ var defaultLevel;
520
+ var userLevel;
521
+ var storageKey = "loglevel";
522
+ if (typeof name === "string") {
523
+ storageKey += ":" + name;
524
+ } else if (typeof name === "symbol") {
525
+ storageKey = void 0;
808
526
  }
809
- if (typeof storedLevel === undefinedType) {
527
+ function persistLevelIfPossible(levelNum) {
528
+ var levelName = (logMethods[levelNum] || "silent").toUpperCase();
529
+ if (typeof window === undefinedType || !storageKey) return;
810
530
  try {
811
- var cookie = window.document.cookie;
812
- var cookieName = encodeURIComponent(storageKey);
813
- var location = cookie.indexOf(cookieName + "=");
814
- if (location !== -1) {
815
- storedLevel = /^([^;]+)/.exec(
816
- cookie.slice(location + cookieName.length + 1)
817
- )[1];
818
- }
531
+ window.localStorage[storageKey] = levelName;
532
+ return;
533
+ } catch (ignore) {
534
+ }
535
+ try {
536
+ window.document.cookie = encodeURIComponent(storageKey) + "=" + levelName + ";";
819
537
  } catch (ignore) {
820
538
  }
821
539
  }
822
- if (self2.levels[storedLevel] === void 0) {
823
- storedLevel = void 0;
824
- }
825
- return storedLevel;
826
- }
827
- function clearPersistedLevel() {
828
- if (typeof window === undefinedType || !storageKey)
829
- return;
830
- try {
831
- window.localStorage.removeItem(storageKey);
832
- } catch (ignore) {
540
+ function getPersistedLevel() {
541
+ var storedLevel;
542
+ if (typeof window === undefinedType || !storageKey) return;
543
+ try {
544
+ storedLevel = window.localStorage[storageKey];
545
+ } catch (ignore) {
546
+ }
547
+ if (typeof storedLevel === undefinedType) {
548
+ try {
549
+ var cookie = window.document.cookie;
550
+ var cookieName = encodeURIComponent(storageKey);
551
+ var location = cookie.indexOf(cookieName + "=");
552
+ if (location !== -1) {
553
+ storedLevel = /^([^;]+)/.exec(
554
+ cookie.slice(location + cookieName.length + 1)
555
+ )[1];
556
+ }
557
+ } catch (ignore) {
558
+ }
559
+ }
560
+ if (self.levels[storedLevel] === void 0) {
561
+ storedLevel = void 0;
562
+ }
563
+ return storedLevel;
833
564
  }
834
- try {
835
- window.document.cookie = encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
836
- } catch (ignore) {
565
+ function clearPersistedLevel() {
566
+ if (typeof window === undefinedType || !storageKey) return;
567
+ try {
568
+ window.localStorage.removeItem(storageKey);
569
+ } catch (ignore) {
570
+ }
571
+ try {
572
+ window.document.cookie = encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
573
+ } catch (ignore) {
574
+ }
837
575
  }
838
- }
839
- function normalizeLevel(input) {
840
- var level = input;
841
- if (typeof level === "string" && self2.levels[level.toUpperCase()] !== void 0) {
842
- level = self2.levels[level.toUpperCase()];
576
+ function normalizeLevel(input) {
577
+ var level = input;
578
+ if (typeof level === "string" && self.levels[level.toUpperCase()] !== void 0) {
579
+ level = self.levels[level.toUpperCase()];
580
+ }
581
+ if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
582
+ return level;
583
+ } else {
584
+ throw new TypeError("log.setLevel() called with invalid level: " + input);
585
+ }
843
586
  }
844
- if (typeof level === "number" && level >= 0 && level <= self2.levels.SILENT) {
845
- return level;
846
- } else {
847
- throw new TypeError("log.setLevel() called with invalid level: " + input);
587
+ self.name = name;
588
+ self.levels = {
589
+ "TRACE": 0,
590
+ "DEBUG": 1,
591
+ "INFO": 2,
592
+ "WARN": 3,
593
+ "ERROR": 4,
594
+ "SILENT": 5
595
+ };
596
+ self.methodFactory = factory || defaultMethodFactory;
597
+ self.getLevel = function() {
598
+ if (userLevel != null) {
599
+ return userLevel;
600
+ } else if (defaultLevel != null) {
601
+ return defaultLevel;
602
+ } else {
603
+ return inheritedLevel;
604
+ }
605
+ };
606
+ self.setLevel = function(level, persist) {
607
+ userLevel = normalizeLevel(level);
608
+ if (persist !== false) {
609
+ persistLevelIfPossible(userLevel);
610
+ }
611
+ return replaceLoggingMethods.call(self);
612
+ };
613
+ self.setDefaultLevel = function(level) {
614
+ defaultLevel = normalizeLevel(level);
615
+ if (!getPersistedLevel()) {
616
+ self.setLevel(level, false);
617
+ }
618
+ };
619
+ self.resetLevel = function() {
620
+ userLevel = null;
621
+ clearPersistedLevel();
622
+ replaceLoggingMethods.call(self);
623
+ };
624
+ self.enableAll = function(persist) {
625
+ self.setLevel(self.levels.TRACE, persist);
626
+ };
627
+ self.disableAll = function(persist) {
628
+ self.setLevel(self.levels.SILENT, persist);
629
+ };
630
+ self.rebuild = function() {
631
+ if (defaultLogger !== self) {
632
+ inheritedLevel = normalizeLevel(defaultLogger.getLevel());
633
+ }
634
+ replaceLoggingMethods.call(self);
635
+ if (defaultLogger === self) {
636
+ for (var childName in _loggersByName) {
637
+ _loggersByName[childName].rebuild();
638
+ }
639
+ }
640
+ };
641
+ inheritedLevel = normalizeLevel(
642
+ defaultLogger ? defaultLogger.getLevel() : "WARN"
643
+ );
644
+ var initialLevel = getPersistedLevel();
645
+ if (initialLevel != null) {
646
+ userLevel = normalizeLevel(initialLevel);
848
647
  }
648
+ replaceLoggingMethods.call(self);
849
649
  }
850
- self2.name = name;
851
- self2.levels = {
852
- "TRACE": 0,
853
- "DEBUG": 1,
854
- "INFO": 2,
855
- "WARN": 3,
856
- "ERROR": 4,
857
- "SILENT": 5
858
- };
859
- self2.methodFactory = factory || defaultMethodFactory;
860
- self2.getLevel = function() {
861
- if (userLevel != null) {
862
- return userLevel;
863
- } else if (defaultLevel != null) {
864
- return defaultLevel;
865
- } else {
866
- return inheritedLevel;
650
+ defaultLogger = new Logger();
651
+ defaultLogger.getLogger = function getLogger(name) {
652
+ if (typeof name !== "symbol" && typeof name !== "string" || name === "") {
653
+ throw new TypeError("You must supply a name when creating a logger.");
867
654
  }
868
- };
869
- self2.setLevel = function(level, persist) {
870
- userLevel = normalizeLevel(level);
871
- if (persist !== false) {
872
- persistLevelIfPossible(userLevel);
655
+ var logger = _loggersByName[name];
656
+ if (!logger) {
657
+ logger = _loggersByName[name] = new Logger(
658
+ name,
659
+ defaultLogger.methodFactory
660
+ );
873
661
  }
874
- return replaceLoggingMethods.call(self2);
662
+ return logger;
875
663
  };
876
- self2.setDefaultLevel = function(level) {
877
- defaultLevel = normalizeLevel(level);
878
- if (!getPersistedLevel()) {
879
- self2.setLevel(level, false);
664
+ var _log = typeof window !== undefinedType ? window.log : void 0;
665
+ defaultLogger.noConflict = function() {
666
+ if (typeof window !== undefinedType && window.log === defaultLogger) {
667
+ window.log = _log;
880
668
  }
669
+ return defaultLogger;
881
670
  };
882
- self2.resetLevel = function() {
883
- userLevel = null;
884
- clearPersistedLevel();
885
- replaceLoggingMethods.call(self2);
671
+ defaultLogger.getLoggers = function getLoggers() {
672
+ return _loggersByName;
886
673
  };
887
- self2.enableAll = function(persist) {
888
- self2.setLevel(self2.levels.TRACE, persist);
889
- };
890
- self2.disableAll = function(persist) {
891
- self2.setLevel(self2.levels.SILENT, persist);
892
- };
893
- self2.rebuild = function() {
894
- if (defaultLogger !== self2) {
895
- inheritedLevel = normalizeLevel(defaultLogger.getLevel());
896
- }
897
- replaceLoggingMethods.call(self2);
898
- if (defaultLogger === self2) {
899
- for (var childName in _loggersByName) {
900
- _loggersByName[childName].rebuild();
901
- }
902
- }
903
- };
904
- inheritedLevel = normalizeLevel(
905
- defaultLogger ? defaultLogger.getLevel() : "WARN"
906
- );
907
- var initialLevel = getPersistedLevel();
908
- if (initialLevel != null) {
909
- userLevel = normalizeLevel(initialLevel);
910
- }
911
- replaceLoggingMethods.call(self2);
912
- }
913
- defaultLogger = new Logger();
914
- defaultLogger.getLogger = function getLogger(name) {
915
- if (typeof name !== "symbol" && typeof name !== "string" || name === "") {
916
- throw new TypeError("You must supply a name when creating a logger.");
917
- }
918
- var logger = _loggersByName[name];
919
- if (!logger) {
920
- logger = _loggersByName[name] = new Logger(
921
- name,
922
- defaultLogger.methodFactory
923
- );
924
- }
925
- return logger;
926
- };
927
- var _log = typeof window !== undefinedType ? window.log : void 0;
928
- defaultLogger.noConflict = function() {
929
- if (typeof window !== undefinedType && window.log === defaultLogger) {
930
- window.log = _log;
931
- }
674
+ defaultLogger["default"] = defaultLogger;
932
675
  return defaultLogger;
933
- };
934
- defaultLogger.getLoggers = function getLoggers() {
935
- return _loggersByName;
936
- };
937
- defaultLogger["default"] = defaultLogger;
938
- return defaultLogger;
939
- });
940
- })(loglevel);
941
- var loglevelExports = loglevel.exports;
676
+ });
677
+ })(loglevel$1);
678
+ return loglevel$1.exports;
679
+ }
680
+ var loglevelExports = requireLoglevel();
942
681
  const log = /* @__PURE__ */ getDefaultExportFromCjs(loglevelExports);
943
682
  class VitessceConfigDatasetFile {
944
683
  /**
@@ -1823,8 +1562,7 @@ const filterViews = (hintsConfig, possibleViews) => {
1823
1562
  const resultViews = [];
1824
1563
  requiredViews.forEach((requiredView) => {
1825
1564
  const match = possibleViews.find((possibleView) => possibleView[0] === requiredView);
1826
- if (match)
1827
- resultViews.push(match);
1565
+ if (match) resultViews.push(match);
1828
1566
  });
1829
1567
  if (resultViews.length === 0) {
1830
1568
  throw new Error("No views found that are compatible with the supplied dataset URLs and hint.");