@dra2020/dra-types 1.8.80 → 1.8.82

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/csv.d.ts CHANGED
@@ -32,6 +32,7 @@ export declare function csvLine(coder: Util.Coder, line: string): OneCSVLine;
32
32
  export interface ConvertResult {
33
33
  inBlockMap: BlockMapping;
34
34
  inMbm: G.MultiBlockMapping;
35
+ outMbm: G.MultiBlockMapping;
35
36
  outValid: boolean;
36
37
  outState: string;
37
38
  outMap: BlockMapping;
@@ -45,6 +46,7 @@ export interface ConvertResult {
45
46
  }
46
47
  export declare function blockmapToState(blockMap: BlockMapping): string;
47
48
  export declare function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMapping, altBlocks: AltBlockMapping): ConvertResult;
49
+ export declare function blockmapToVTDmapCustom(blockMap: BlockMapping, inMbm: G.MultiBlockMapping, outMbm: G.MultiBlockMapping, altBlocks: AltBlockMapping): ConvertResult;
48
50
  export declare const StateIdToStateCode: any;
49
51
  export declare const StateCodeToStateId: any;
50
52
  export declare function geoidToState(geoid: string): string;
package/dist/dra-types.js CHANGED
@@ -424,7 +424,7 @@ lum.forEach((n) => { exports.IntensityBackgroundColor.push(`rgba(${n}, ${n}, ${n
424
424
 
425
425
 
426
426
  Object.defineProperty(exports, "__esModule", ({ value: true }));
427
- exports.StateNameMap = exports.StateCodesOrdered = exports.isValidStateNameForUrl = exports.geoidToState = exports.StateCodeToStateId = exports.StateIdToStateCode = exports.blockmapToVTDmap = exports.blockmapToState = exports.csvLine = exports.parseCSVLine = exports.canonicalDistrictIDOrdering = exports.canonicalDistrictIDGapFill = exports.canonicalDistrictIDFromNumber = exports.canonicalNumericFromDistrictID = exports.canonicalSortingDistrictID = exports.canonicalDistrictID = void 0;
427
+ exports.StateNameMap = exports.StateCodesOrdered = exports.isValidStateNameForUrl = exports.geoidToState = exports.StateCodeToStateId = exports.StateIdToStateCode = exports.blockmapToVTDmapCustom = exports.blockmapToVTDmap = exports.blockmapToState = exports.csvLine = exports.parseCSVLine = exports.canonicalDistrictIDOrdering = exports.canonicalDistrictIDGapFill = exports.canonicalDistrictIDFromNumber = exports.canonicalNumericFromDistrictID = exports.canonicalSortingDistrictID = exports.canonicalDistrictID = void 0;
428
428
  // Public libraries
429
429
  const baseclient_1 = __webpack_require__(/*! @dra2020/baseclient */ "@dra2020/baseclient");
430
430
  let reNumeric = /^(\D*)(\d*)(\D*)$/;
@@ -606,6 +606,10 @@ function blockmapToState(blockMap) {
606
606
  return null;
607
607
  }
608
608
  exports.blockmapToState = blockmapToState;
609
+ function blockmapToVTDmap(blockMap, mbm, altBlocks) {
610
+ return blockmapToVTDmapCustom(blockMap, mbm, mbm, altBlocks);
611
+ }
612
+ exports.blockmapToVTDmap = blockmapToVTDmap;
609
613
  // blockToVTD:
610
614
  // Take BlockMapping (simple map of GEOID to districtID) and a per-state map of block-level GEOID to VTD
611
615
  // and return the output mapping of VTD to districtID, as well a data structure that describes any VTD's
@@ -615,10 +619,11 @@ exports.blockmapToState = blockmapToState;
615
619
  // The state (as specified by the first two digits of the GEOID) is also determined. If the GEOID's do
616
620
  // not all specify the same state, the mapping is considered invalid and the outValid flag is set to false.
617
621
  //
618
- function blockmapToVTDmap(blockMap, mbm, altBlocks) {
622
+ function blockmapToVTDmapCustom(blockMap, inMbm, outMbm, altBlocks) {
619
623
  let res = {
620
624
  inBlockMap: blockMap,
621
- inMbm: mbm,
625
+ inMbm: inMbm,
626
+ outMbm: outMbm,
622
627
  outValid: true,
623
628
  outState: null,
624
629
  outMap: {},
@@ -632,6 +637,7 @@ function blockmapToVTDmap(blockMap, mbm, altBlocks) {
632
637
  };
633
638
  let bmGather = {};
634
639
  let revBG; // lazy create on demand
640
+ function isBlockID(b) { return b.length >= 15 && (!inMbm || !!inMbm.map(b)); }
635
641
  if (altBlocks) {
636
642
  // Create reverse of altBlocks if they exist {altBlockid: {stdBlockid, pop}, ...}
637
643
  let revAltBlocks = {};
@@ -646,7 +652,7 @@ function blockmapToVTDmap(blockMap, mbm, altBlocks) {
646
652
  for (var id in blockMap)
647
653
  if (blockMap.hasOwnProperty(id)) {
648
654
  let n = id.length;
649
- if (n >= 15 && !(mbm && mbm.map(id) !== undefined) && revAltBlocks[id]) {
655
+ if (isBlockID(id) && revAltBlocks[id]) {
650
656
  if (!bestAlt[revAltBlocks[id].blockid] || bestAlt[revAltBlocks[id].blockid].pop < revAltBlocks[id].pop) {
651
657
  bestAlt[revAltBlocks[id].blockid] = { dist: blockMap[id], pop: revAltBlocks[id].pop };
652
658
  blockMapP[revAltBlocks[id].blockid] = blockMap[id];
@@ -680,13 +686,13 @@ function blockmapToVTDmap(blockMap, mbm, altBlocks) {
680
686
  res.nBlocks++;
681
687
  // Simple test for block id (vs. voting district or block group) id
682
688
  // Also skip longer custom precinct ids
683
- if (n >= 15 && (!mbm || !mbm.rev(id))) {
689
+ if (isBlockID(id)) {
684
690
  ids = [id];
685
- if (mbm && mbm.map(id) !== undefined)
686
- geoids = [mbm.map(id)];
691
+ if (outMbm && outMbm.map(id) !== undefined)
692
+ geoids = [outMbm.map(id)];
687
693
  else {
688
694
  geoids = [id.substr(0, 12)];
689
- if (mbm && !mbm.rev(geoids[0])) {
695
+ if (outMbm && !outMbm.rev(geoids[0])) {
690
696
  res.outValid = false;
691
697
  break;
692
698
  }
@@ -694,16 +700,21 @@ function blockmapToVTDmap(blockMap, mbm, altBlocks) {
694
700
  }
695
701
  else if (n == 12) {
696
702
  if (!revBG)
697
- revBG = reverseBlockgroupMapping(mbm);
703
+ revBG = reverseBlockgroupMapping(outMbm);
698
704
  if (revBG[id]) {
699
705
  ids = revBG[id];
700
- geoids = ids.map(id => mbm.map(id));
706
+ geoids = ids.map(id => outMbm.map(id));
701
707
  }
702
708
  else {
703
709
  ids = [id];
704
710
  geoids = [id];
705
711
  }
706
712
  }
713
+ else if (inMbm.rev(id)) {
714
+ // Map down to blockids and then back up to geoids to handle both custom and default geoids
715
+ ids = inMbm.rev(id);
716
+ geoids = ids.map(blockid => outMbm.map(blockid));
717
+ }
707
718
  else {
708
719
  ids = [id];
709
720
  geoids = [id];
@@ -730,7 +741,7 @@ function blockmapToVTDmap(blockMap, mbm, altBlocks) {
730
741
  let bWhole = false;
731
742
  if (baseclient_1.Util.countKeys(districtToBlocks) == 1) {
732
743
  let blocks = Object.keys(districtToBlocks[baseclient_1.Util.nthKey(districtToBlocks)]);
733
- if (blocks[0] === geoid || (mbm.rev(geoid) && blocks.length === mbm.rev(geoid).length))
744
+ if (blocks[0] === geoid || (outMbm.rev(geoid) && blocks.length === outMbm.rev(geoid).length))
734
745
  bWhole = true;
735
746
  }
736
747
  if (bWhole) {
@@ -757,7 +768,7 @@ function blockmapToVTDmap(blockMap, mbm, altBlocks) {
757
768
  res.outOrder = canonicalDistrictIDOrdering(res.outOrder);
758
769
  return res;
759
770
  }
760
- exports.blockmapToVTDmap = blockmapToVTDmap;
771
+ exports.blockmapToVTDmapCustom = blockmapToVTDmapCustom;
761
772
  exports.StateIdToStateCode = {
762
773
  '01': 'AL',
763
774
  '02': 'AK',
@@ -1183,6 +1194,62 @@ exports.collectionToLandmarks = collectionToLandmarks;
1183
1194
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1184
1195
 
1185
1196
 
1197
+ /***/ }),
1198
+
1199
+ /***/ "./lib/packedfields.ts":
1200
+ /*!*****************************!*\
1201
+ !*** ./lib/packedfields.ts ***!
1202
+ \*****************************/
1203
+ /***/ ((__unused_webpack_module, exports) => {
1204
+
1205
+
1206
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1207
+ exports.aggregatePackedFields = exports.packedCopy = exports.zeroPackedCopy = exports.allocPackedFields = void 0;
1208
+ function allocPackedFields(length) {
1209
+ let ab = new ArrayBuffer(8 * length);
1210
+ let af = new Float64Array(ab);
1211
+ return af;
1212
+ }
1213
+ exports.allocPackedFields = allocPackedFields;
1214
+ // The first entry in the PackedFields aggregate is the count of items aggregated.
1215
+ // Treat a null instance as just a single entry with no aggregates.
1216
+ let abZero = new ArrayBuffer(8);
1217
+ let afZero = new Float64Array(abZero);
1218
+ afZero[0] = 0;
1219
+ function zeroPackedCopy(pf) {
1220
+ if (pf == null)
1221
+ return afZero;
1222
+ let af = allocPackedFields(pf.length);
1223
+ for (let i = 0; i < af.length; i++)
1224
+ af[i] = 0;
1225
+ return af;
1226
+ }
1227
+ exports.zeroPackedCopy = zeroPackedCopy;
1228
+ function packedCopy(pf) {
1229
+ if (pf == null)
1230
+ return null;
1231
+ let af = allocPackedFields(pf.length);
1232
+ for (let i = 0; i < pf.length; i++)
1233
+ af[i] = pf[i];
1234
+ return af;
1235
+ }
1236
+ exports.packedCopy = packedCopy;
1237
+ function aggregatePackedFields(agg, pf) {
1238
+ if (agg == null || pf == null)
1239
+ return agg;
1240
+ if (agg.length != pf.length) {
1241
+ return agg; // bug, but don't crash
1242
+ //throw 'aggregatePackedFields: unexpected length mismatch';
1243
+ }
1244
+ let n = agg.length;
1245
+ for (let i = 1; i < n; i++)
1246
+ agg[i] += pf[i];
1247
+ agg[0]++; // count of number of aggregates
1248
+ return agg;
1249
+ }
1250
+ exports.aggregatePackedFields = aggregatePackedFields;
1251
+
1252
+
1186
1253
  /***/ }),
1187
1254
 
1188
1255
  /***/ "./lib/precincts.ts":
@@ -1541,6 +1608,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
1541
1608
  exports.splitToGeoFeature = void 0;
1542
1609
  const baseclient_1 = __webpack_require__(/*! @dra2020/baseclient */ "@dra2020/baseclient");
1543
1610
  const DT = __webpack_require__(/*! ./vfeature */ "./lib/vfeature.ts");
1611
+ const PF = __webpack_require__(/*! ./packedfields */ "./lib/packedfields.ts");
1544
1612
  // Given the topology for a precinct and a split, compute the feature data for the virtual feature.
1545
1613
  //
1546
1614
  function splitToGeoFeature(split, topoPrecinct, mbm) {
@@ -1549,11 +1617,21 @@ function splitToGeoFeature(split, topoPrecinct, mbm) {
1549
1617
  return f;
1550
1618
  let contiguity = new baseclient_1.Util.IndexedArray();
1551
1619
  let block_contiguity = new baseclient_1.Util.IndexedArray();
1552
- f.properties.datasets = {};
1553
1620
  split.blocks.forEach(blockid => {
1554
1621
  let b = topoPrecinct.objects[blockid];
1555
- if (b.properties.datasets)
1622
+ if (b.properties.datasets) {
1623
+ if (!f.properties.datasets)
1624
+ f.properties.datasets = {};
1556
1625
  baseclient_1.Util.deepAccum(f.properties.datasets, b.properties.datasets);
1626
+ }
1627
+ if (b.properties.packedFields) {
1628
+ if (!f.properties.packedFields) {
1629
+ f.properties.packedFields = PF.packedCopy(b.properties.packedFields);
1630
+ f.properties.getDatasetField = b.properties.getDatasetField;
1631
+ }
1632
+ else
1633
+ PF.aggregatePackedFields(f.properties.packedFields, b.properties.packedFields);
1634
+ }
1557
1635
  if (b.properties.contiguity) {
1558
1636
  b.properties.contiguity.forEach((id) => {
1559
1637
  if (id === 'OUT_OF_STATE')
@@ -1 +1 @@
1
- {"version":3,"file":"dra-types.js","mappings":"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AAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAC;AAEW,0BAAkB,GAAQ;IACrC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAA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","sources":["webpack://dra-types/webpack/universalModuleDefinition","webpack://dra-types/./lib/all.ts","webpack://dra-types/./lib/bucketmap.ts","webpack://dra-types/./lib/colordata.ts","webpack://dra-types/./lib/csv.ts","webpack://dra-types/./lib/dra-types.ts","webpack://dra-types/./lib/gencolor.ts","webpack://dra-types/./lib/groups.ts","webpack://dra-types/./lib/landmark.ts","webpack://dra-types/./lib/layer.ts","webpack://dra-types/./lib/precincts.ts","webpack://dra-types/./lib/reverse.ts","webpack://dra-types/./lib/schemas.ts","webpack://dra-types/./lib/splittogeofeature.ts","webpack://dra-types/./lib/stateinfo.ts","webpack://dra-types/./lib/stats.ts","webpack://dra-types/./lib/vfeature.ts","webpack://dra-types/./lib/workqueue.ts","webpack://dra-types/external commonjs \"@dra2020/baseclient\"","webpack://dra-types/external commonjs \"object-hash\"","webpack://dra-types/webpack/bootstrap","webpack://dra-types/webpack/before-startup","webpack://dra-types/webpack/startup","webpack://dra-types/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dra-types\"] = factory();\n\telse\n\t\troot[\"dra-types\"] = factory();\n})(global, () => {\nreturn ","export * from './dra-types';\nexport * from './schemas';\nexport * from './bucketmap';\nexport * from './colordata';\nexport * from './gencolor';\nexport * from './vfeature';\nexport * from './csv';\nexport * from './stats';\nexport * from './layer';\nexport * from './stateinfo';\nexport * from './workqueue';\nexport * from './landmark';\nexport * from './splittogeofeature';\nexport * from './reverse';\nexport * from './groups';\nexport * from './precincts';\n","export const BucketMap: any =\n {\n 'default': 'dev-dra-us-west-2-723398989493',\n 'development': 'dev-dra-us-west-2-723398989493',\n 'production': 'dra-us-west-2-723398989493',\n 'state': 'dra-us-west-2-723398989493',\n 'state-dev': 'dev-dra-us-west-2-723398989493',\n 'logs': 'dra-uswest-logs',\n 'logs-dev': 'dra-uswest-logs',\n 'memsqs': 'dra-uswest-memsqs',\n 'memsqs-dev': 'dra-uswest-memsqs',\n 'images': 'dra-uswest-images',\n 'images-dev': 'dra-uswest-images',\n 'layers': 'dra-uswest-layers',\n 'layers-dev': 'dra-uswest-layers',\n 'data': 'dra-us-west-datafiles',\n 'data-dev': 'dra-us-west-datafiles-dev',\n 'splits': 'dra-block-cache',\n 'splits-dev': 'dra-block-cache-dev',\n 'counties': 'dra-county-cache',\n 'counties-dev': 'dra-county-cache-dev',\n 'geojson': 'dra-uswest-geojson',\n 'geojson-dev': 'dra-uswest-geojson',\n 'transfers': 'dra-transfers',\n 'transfers-dev': 'dra-transfers-dev',\n 'downloads': 'dra-uswest-downloads',\n 'downloads-dev': 'dra-uswest-downloads',\n 'editcache': 'dra-uswest-editcache',\n 'editcache-dev': 'dra-uswest-editcache-dev',\n }\n","export const DefaultColorNames: string[] = \r\n[\r\n'GhostWhite',\r\n'Blue',\r\n'Green',\r\n'DarkMagenta',\r\n'Red',\r\n'Gold',\r\n'Teal',\r\n'Chocolate', //'DarkGray', // \r\n'SlateBlue',\r\n'Cyan',\r\n'DeepPink',\r\n'Chartreuse',\r\n'CornflowerBlue',\r\n'DarkSalmon',\r\n'Olive',\r\n'DarkOrange',\r\n'Lime',\r\n'DarkSlateBlue',\r\n'Yellow',\r\n'YellowGreen',\r\n'Pink',\r\n'Maroon',\r\n'Sienna',\r\n'Aquamarine',\r\n'Indigo',\r\n'PaleVioletRed',\r\n'Navy', // 'Gray', // \r\n'SpringGreen',\r\n'Plum',\r\n'DarkSeaGreen',\r\n'LightCoral',\r\n'Khaki',\r\n'OrangeRed',\r\n'RoyalBlue',\r\n'LimeGreen',\r\n'DarkOrchid',\r\n'Orange',\r\n'DodgerBlue',\r\n'MediumAquamarine',\r\n'Moccasin',\r\n'Firebrick',\r\n'LightSteelBlue',\r\n'LawnGreen',\r\n'Magenta',\r\n'MediumVioletRed',\r\n'Turquoise',\r\n'Tomato',\r\n'Thistle',\r\n'SandyBrown',\r\n'IndianRed',\r\n'PowderBlue',\r\n'SaddleBrown',\r\n'OliveDrab',\r\n'Fuchsia', // 'Gainsboro', //\r\n'PeachPuff',\r\n'RosyBrown',\r\n];\r\n\r\nexport interface ColorLookup\r\n{\r\n [key: string]: string;\r\n}\r\n\r\nexport const ColorValues: ColorLookup =\r\n{\r\n 'AliceBlue': '#F0F8FF',\r\n 'AntiqueWhite': '#FAEBD7',\r\n 'Aqua': '#00FFFF',\r\n 'Aquamarine': '#7FFFD4',\r\n 'Azure': '#F0FFFF',\r\n 'Beige': '#F5F5DC',\r\n 'Bisque': '#FFE4C4',\r\n 'Black': '#000000',\r\n 'BlanchedAlmond': '#FFEBCD',\r\n 'Blue': '#0000FF',\r\n 'BlueViolet': '#8A2BE2',\r\n 'Brown': '#A52A2A',\r\n 'BurlyWood': '#DEB887',\r\n 'CadetBlue': '#5F9EA0',\r\n 'Chartreuse': '#7FFF00',\r\n 'Chocolate': '#D2691E',\r\n 'Coral': '#FF7F50',\r\n 'CornflowerBlue': '#6495ED',\r\n 'Cornsilk': '#FFF8DC',\r\n 'Crimson': '#DC143C',\r\n 'Cyan': '#00FFFF',\r\n 'DarkBlue': '#00008B',\r\n 'DarkCyan': '#008B8B',\r\n 'DarkGoldenrod': '#B8860B',\r\n 'DarkGray': '#A9A9A9',\r\n 'DarkGreen': '#006400',\r\n 'DarkKhaki': '#BDB76B',\r\n 'DarkMagenta': '#8B008B',\r\n 'DarkOliveGreen': '#556B2F',\r\n 'DarkOrange': '#FF8C00',\r\n 'DarkOrchid': '#9932CC',\r\n 'DarkRed': '#8B0000',\r\n 'DarkSalmon': '#E9967A',\r\n 'DarkSeaGreen': '#8FBC8F',\r\n 'DarkSlateBlue': '#483D8B',\r\n 'DarkSlateGray': '#2F4F4F',\r\n 'DarkTurquoise': '#00CED1',\r\n 'DarkViolet': '#9400D3',\r\n 'DeepPink': '#FF1493',\r\n 'DeepSkyBlue': '#00BFFF',\r\n 'DimGray': '#696969',\r\n 'DodgerBlue': '#1E90FF',\r\n 'Firebrick': '#B22222',\r\n 'FloralWhite': '#FFFAF0',\r\n 'ForestGreen': '#228B22',\r\n 'Fuchsia': '#FF00FF',\r\n 'Gainsboro': '#DCDCDC',\r\n 'GhostWhite': '#F8F8FF',\r\n 'Gold': '#FFD700',\r\n 'Goldenrod': '#DAA520',\r\n 'Gray': '#808080',\r\n 'Green': '#008000',\r\n 'GreenYellow': '#ADFF2F',\r\n 'Honeydew': '#F0FFF0',\r\n 'HotPink': '#FF69B4',\r\n 'IndianRed': '#CD5C5C',\r\n 'Indigo': '#4B0082',\r\n 'Ivory': '#FFFFF0',\r\n 'Khaki': '#F0E68C',\r\n 'Lavender': '#E6E6FA',\r\n 'LavenderBlush': '#FFF0F5',\r\n 'LawnGreen': '#7CFC00',\r\n 'LemonChiffon': '#FFFACD',\r\n 'LightBlue': '#ADD8E6',\r\n 'LightCoral': '#F08080',\r\n 'LightCyan': '#E0FFFF',\r\n 'LightGoldenrodYellow': '#FAFAD2',\r\n 'LightGray': '#D3D3D3',\r\n 'LightGreen': '#90EE90',\r\n 'LightPink': '#FFB6C1',\r\n 'LightSalmon': '#FFA07A',\r\n 'LightSeaGreen': '#20B2AA',\r\n 'LightSkyBlue': '#87CEFA',\r\n 'LightSlateGray': '#778899',\r\n 'LightSteelBlue': '#B0C4DE',\r\n 'LightYellow': '#FFFFE0',\r\n 'Lime': '#00FF00',\r\n 'LimeGreen': '#32CD32',\r\n 'Linen': '#FAF0E6',\r\n 'Magenta': '#FF00FF',\r\n 'Maroon': '#800000',\r\n 'MediumAquamarine': '#66CDAA',\r\n 'MediumBlue': '#0000CD',\r\n 'MediumOrchid': '#BA55D3',\r\n 'MediumPurple': '#9370DB',\r\n 'MediumSeaGreen': '#3CB371',\r\n 'MediumSlateBlue': '#7B68EE',\r\n 'MediumSpringGreen': '#00FA9A',\r\n 'MediumTurquoise': '#48D1CC',\r\n 'MediumVioletRed': '#C71585',\r\n 'MidnightBlue': '#191970',\r\n 'MintCream': '#F5FFFA',\r\n 'MistyRose': '#FFE4E1',\r\n 'Moccasin': '#FFE4B5',\r\n 'NavajoWhite': '#FFDEAD',\r\n 'Navy': '#000080',\r\n 'OldLace': '#FDF5E6',\r\n 'Olive': '#808000',\r\n 'OliveDrab': '#6B8E23',\r\n 'Orange': '#FFA500',\r\n 'OrangeRed': '#FF4500',\r\n 'Orchid': '#DA70D6',\r\n 'PaleGoldenrod': '#EEE8AA',\r\n 'PaleGreen': '#98FB98',\r\n 'PaleTurquoise': '#AFEEEE',\r\n 'PaleVioletRed': '#DB7093',\r\n 'PapayaWhip': '#FFEFD5',\r\n 'PeachPuff': '#FFDAB9',\r\n 'Peru': '#CD853F',\r\n 'Pink': '#FFC0CB',\r\n 'Plum': '#DDA0DD',\r\n 'PowderBlue': '#B0E0E6',\r\n 'Purple': '#800080',\r\n 'Red': '#FF0000',\r\n 'RosyBrown': '#BC8F8F',\r\n 'RoyalBlue': '#4169E1',\r\n 'SaddleBrown': '#8B4513',\r\n 'Salmon': '#FA8072',\r\n 'SandyBrown': '#F4A460',\r\n 'SeaGreen': '#2E8B57',\r\n 'SeaShell': '#FFF5EE',\r\n 'Sienna': '#A0522D',\r\n 'Silver': '#C0C0C0',\r\n 'SkyBlue': '#87CEEB',\r\n 'SlateBlue': '#6A5ACD',\r\n 'SlateGray': '#708090',\r\n 'Snow': '#FFFAFA',\r\n 'SpringGreen': '#00FF7F',\r\n 'SteelBlue': '#4682B4',\r\n 'Tan': '#D2B48C',\r\n 'Teal': '#008080',\r\n 'Thistle': '#D8BFD8',\r\n 'Tomato': '#FF6347',\r\n 'Turquoise': '#40E0D0',\r\n 'Violet': '#EE82EE',\r\n 'Wheat': '#F5DEB3',\r\n 'White': '#FFFFFF',\r\n 'WhiteSmoke': '#F5F5F5',\r\n 'Yellow': '#FFFF00',\r\n 'YellowGreen': '#9ACD32',\r\n};\r\n\r\nexport const ColorBySolidWhite = 0;\r\nexport const ColorBySolidBlack = 1;\r\nexport const ColorBySolidHispanic = 2;\r\nexport const ColorBySolidAsian = 3;\r\nexport const ColorByMostlyWhite = 4;\r\nexport const ColorByMostlyBlack = 5;\r\nexport const ColorByMostlyHispanic = 6;\r\nexport const ColorByMostlyAsian = 7;\r\nexport const ColorByMostlyNative = 8;\r\nexport const ColorByMix = 9;\r\nexport const ColorByHispanicWhite = 10;\r\nexport const ColorByBlackWhite = 11;\r\nexport const ColorByHispanicBlack = 12;\r\nexport const ColorByAsianWhite = 13;\r\nexport const ColorByAsianHispanic = 14;\r\nexport const ColorByBlackAsian = 15;\r\n\r\nexport const EthnicBackgroundColor: string[] = [\r\n '#c0392b', // solid white\r\n '#3498db', // solid black\r\n '#2ecc71', // solid hispanic\r\n '#9b59b6', // solid asian\r\n '#d98880', // mostly white\r\n '#aed6f1', // mostly black\r\n '#abebc6', // mostly hispanic\r\n '#bb8fce', // mostly asian\r\n '#f1c40f', // mostly native\r\n '#aab7b8', // mix\r\n '#d5f5e3', // hispanic / white\r\n '#d6eaf8', // black / white\r\n '#186a3b', // hispanic / black\r\n '#e8daef', // asian / white\r\n '#45b39d', // asian / hispanic\r\n '#4a235a', // black / asian\r\n ];\r\nexport const EthnicTextColor: string[] = [\r\n '#ffffff',\r\n '#ffffff',\r\n '#ffffff',\r\n '#ffffff',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#ffffff',\r\n '#000000',\r\n '#000000',\r\n '#ffffff',\r\n ];\r\nexport const EthnicLabel: string[] = [\r\n 'Solid White',\r\n 'Solid Black',\r\n 'Solid Hispanic',\r\n 'Solid Asian',\r\n 'Mostly White',\r\n 'Mostly Black',\r\n 'Mostly Hispanic',\r\n 'Mostly Asian',\r\n 'Mostly Native',\r\n 'Mixed',\r\n 'Hispanic / White Mix',\r\n 'Black / White Mix',\r\n 'Hispanic / Black Mix',\r\n 'Asian / White Mix',\r\n 'Asian / Hispanic Mix',\r\n 'Black / Asian Mix'\r\n ];\r\n\r\nexport const ColorByGreatR = 0;\r\nexport const ColorByGoodR = 1;\r\nexport const ColorByFairR = 2;\r\nexport const ColorByEven = 3;\r\nexport const ColorByFairD = 4;\r\nexport const ColorByGoodD = 5;\r\nexport const ColorByGreatD = 6;\r\n\r\nexport const ElectionBackgroundColor: string[] = [\r\n '#CF0000', // greatR\r\n '#FF4555', // goodR\r\n '#FFB0CB', // fairR\r\n '#9932CC', // even\r\n '#87CEEB', // fairD\r\n '#1E90FF', // goodD\r\n '#0000CF', // greatD\r\n];\r\n\r\nexport const ElectionTextColor: string[] = [\r\n '#ffffff',\r\n '#000000',\r\n '#000000',\r\n '#ffffff',\r\n '#000000',\r\n '#000000',\r\n '#ffffff',\r\n];\r\nexport const ElectionLabel: string[] = [\r\n 'Great Republican',\r\n 'Good Republican',\r\n 'Fair Republican',\r\n 'Even',\r\n 'Fair Democrat',\r\n 'Good Democrat',\r\n 'Great Democrat'\r\n ];\r\n\r\nconst lum: number[] = [0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 255];\r\nexport let IntensityBackgroundColor: string[] = [];\r\nlum.forEach((n: number) => { IntensityBackgroundColor.push(`rgba(${n}, ${n}, ${n}, 1.0)`) } );\r\n","// Public libraries\nimport { Util, CSV, G } from '@dra2020/baseclient';\n\n// Local library\nimport * as VF from './vfeature';\n\n// Used internally to index into District Properties Array\nexport type BlockMap = { [id: string]: number };\n\n// Used more generically and allows string districtIDs\nexport type BlockMapping = { [id: string]: string };\n\nexport type RevBlockMapping = { [id: string]: string[] };\n\n// Alternate block mapping (only supports <1 std>: <Many alt>)\nexport type AltBlockMapping = { [blockid: string]: {[blockid: string]: number} }; // {stdblock: {altblock1: pop1, altblock2: pop2, ...}}\n\nlet reNumeric = /^(\\D*)(\\d*)(\\D*)$/;\nlet reDistrictNumber = /^\\d+$/;\nlet reDistrictNumeric = /^\\d/;\n\n// Normalize any numeric part to have no padded leading zeros\nexport function canonicalDistrictID(districtID: string): string\n{\n let a = reNumeric.exec(districtID);\n if (a && a.length == 4)\n {\n if (a[2].length > 0)\n a[2] = String(Number(a[2]));\n districtID = `${a[1]}${a[2]}${a[3]}`;\n }\n return districtID;\n}\n\nfunction reverseSubMapping(mbm: G.MultiBlockMapping, n: number): G.ReverseBlockMapping\n{\n let rev: any = {};\n\n mbm.forEach(blockid => {\n let geoid = blockid.substr(0, n);\n if (! rev[geoid]) rev[geoid] = [];\n rev[geoid].push(blockid);\n });\n return rev;\n}\n\nfunction reverseBlockgroupMapping(mbm: G.MultiBlockMapping): G.ReverseBlockMapping\n{\n return reverseSubMapping(mbm, 12);\n}\n\n// Normalize any numeric part to have four digits with padded leading zeros\n// so alphabetic sorting will result in correct numeric sort for mixed alphanumber\n// district labels.\nexport function canonicalSortingDistrictID(districtID: string): string\n{\n let a = reNumeric.exec(districtID);\n if (a && a.length == 4)\n {\n let s = a[2];\n if (s.length > 0)\n {\n switch (s.length)\n {\n case 1: s = `000${s}`; break;\n case 2: s = `00${s}`; break;\n case 3: s = `0${s}`; break;\n }\n a[2] = s;\n }\n districtID = `${a[1]}${a[2]}${a[3]}`;\n }\n return districtID;\n}\n\n// Return numeric part of districtID (or -1 if there is none)\nexport function canonicalNumericFromDistrictID(districtID: string): number\n{\n let a = reNumeric.exec(districtID);\n if (a && a.length == 4)\n {\n let s = a[2];\n if (s.length > 0)\n return Number(s);\n }\n return -1;\n}\n\nexport function canonicalDistrictIDFromNumber(districtID: string, n: number): string\n{\n let a = reNumeric.exec(districtID);\n if (a && a.length == 4)\n {\n a[2] = String(n);\n districtID = `${a[1]}${a[2]}${a[3]}`;\n }\n else\n districtID = String(n);\n return districtID;\n}\n\n// Numbers start at 1\nexport type DistrictOrder = { [districtID: string]: number };\n\n// If purely numeric districtIDs and we are missing some number of IDs less than\nexport function canonicalDistrictIDGapFill(keys: string[]): string[]\n{\n if (keys == null || keys.length == 0) return keys;\n let nonNumeric = keys.find((s: string) => !reDistrictNumber.test(s)) !== undefined;\n if (nonNumeric) return keys;\n let max = Number(keys[keys.length-1]);\n if (max == keys.length || (max - keys.length) > keys.length) return keys; // no gaps or too many gaps\n\n // OK, finally going to fill some gaps\n for (let i: number = 0; i < keys.length; i++)\n {\n let here = Number(keys[i]);\n while (here > i+1)\n {\n keys.splice(i, 0, canonicalSortingDistrictID(String(i+1)));\n i++;\n }\n }\n\n return keys;\n}\n\nexport function canonicalDistrictIDOrdering(order: DistrictOrder): DistrictOrder\n{\n let keys = Object.keys(order);\n let i: number;\n let a: any = [];\n let template: string = undefined;\n\n keys = keys.map((s: string) => canonicalSortingDistrictID(s));\n\n // Let's omit this. Some official maps have odd numbering schemes and we don't\n // want to generate anomalous spurious extra districts.\n //keys = canonicalDistrictIDGapFill(keys);\n\n keys.sort();\n order = {};\n for (i = 0; i < keys.length; i++)\n order[canonicalDistrictID(keys[i])] = i+1;\n\n // Remove water districts\n if (order['ZZZ']) delete order['ZZZ'];\n if (order['ZZ']) delete order['ZZ'];\n\n return order;\n}\n\nexport interface OneCSVLine\n{\n geoid: string;\n districtID: string;\n}\n\nlet reArray = [\n // comma-delimited\n /^(\\d\\d[^\\s,']*)[\\s]*,[\\s]*([^\\s']+)[\\s]*$/,\n /^(\\d\\d[^\\s,\"]*)[\\s]*,[\\s]*([^\\s\"]+)[\\s]*$/,\n /^['](\\d\\d[^']*)['][\\s]*,[\\s]*[']([^']*)['][\\s]*$/,\n /^[\"](\\d\\d[^\"]*)[\"][\\s]*,[\\s]*[\"]([^\"]*)[\"][\\s]*$/,\n /^(\\d\\d[^\\s,]*)[\\s]*,[\\s]*[']([^']*)['][\\s]*$/,\n /^(\\d\\d[^\\s,]*)[\\s]*,[\\s]*[\"]([^\"]*)[\"][\\s]*$/,\n /^['](\\d\\d[^']*)['][\\s]*,[\\s]*([^\\s]+)[\\s]*$/,\n /^[\"](\\d\\d[^\"]*)[\"][\\s]*,[\\s]*([^\\s]+)[\\s]*$/,\n\n // pipe-delimited, new 2020 Census Bureau format\n /^(\\d\\d[^\\s\\|']*)[\\s]*\\|[\\s]*([^\\s']+)[\\s]*$/,\n /^(\\d\\d[^\\s\\|\"]*)[\\s]*\\|[\\s]*([^\\s\"]+)[\\s]*$/,\n /^['](\\d\\d[^']*)['][\\s]*\\|[\\s]*[']([^']*)['][\\s]*$/,\n /^[\"](\\d\\d[^\"]*)[\"][\\s]*\\|[\\s]*[\"]([^\"]*)[\"][\\s]*$/,\n /^(\\d\\d[^\\s\\|]*)[\\s]*\\|[\\s]*[']([^']*)['][\\s]*$/,\n /^(\\d\\d[^\\s\\|]*)[\\s]*\\|[\\s]*[\"]([^\"]*)[\"][\\s]*$/,\n /^['](\\d\\d[^']*)['][\\s]*\\|[\\s]*([^\\s]+)[\\s]*$/,\n /^[\"](\\d\\d[^\"]*)[\"][\\s]*\\|[\\s]*([^\\s]+)[\\s]*$/,\n ];\nlet reStart = 0; // last successful regex\n\nexport function parseCSVLine(line: string): OneCSVLine\n{\n if (line == null || line == '') return null;\n\n // start at last successful parse so we don't have to\n // iterate through all the regex's for each line.\n for (let i = reStart; i < reArray.length; i++)\n {\n let a = reArray[i].exec(line);\n if (a && a.length === 3)\n {\n reStart = i;\n return { geoid: a[1], districtID: a[2] };\n }\n }\n for (let i = 0; i < reStart; i++)\n {\n let a = reArray[i].exec(line);\n if (a && a.length === 3)\n {\n reStart = i;\n return { geoid: a[1], districtID: a[2] };\n }\n }\n return null;\n}\n\nexport function csvLine(coder: Util.Coder, line: string): OneCSVLine\n{\n if (!coder || !line) return null;\n let parse = new CSV.ParseOne(coder, line);\n if (parse.length != 2) return null;\n let re = /^\\d\\d/;\n if (!re.exec(parse.fields[0])) return null;\n return { geoid: parse.fields[0], districtID: parse.fields[1] };\n}\n\nexport interface ConvertResult\n{\n inBlockMap: BlockMapping;\n inMbm: G.MultiBlockMapping;\n outValid: boolean;\n outState: string;\n outMap: BlockMapping;\n outOrder: DistrictOrder;\n outDistrictToSplit: VF.DistrictToSplitBlock;\n nFeatures: number;\n nSplitFromFeatures: number;\n nSplitToFeatures: number;\n nBlocks: number;\n nSplitBlocks: number;\n}\n\nexport function blockmapToState(blockMap: BlockMapping): string\n{\n for (var id in blockMap) if (blockMap.hasOwnProperty(id))\n return geoidToState(id);\n return null;\n}\n\n// blockToVTD:\n// Take BlockMapping (simple map of GEOID to districtID) and a per-state map of block-level GEOID to VTD\n// and return the output mapping of VTD to districtID, as well a data structure that describes any VTD's\n// that need to be split between districtIDs. Also returns the DistrictOrder structure that defines the\n// districtIDs that were used by the file.\n//\n// The state (as specified by the first two digits of the GEOID) is also determined. If the GEOID's do\n// not all specify the same state, the mapping is considered invalid and the outValid flag is set to false.\n//\n\nexport function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMapping, altBlocks: AltBlockMapping): ConvertResult\n{\n let res: ConvertResult = {\n inBlockMap: blockMap,\n inMbm: mbm,\n outValid: true,\n outState: null,\n outMap: {},\n outOrder: {},\n outDistrictToSplit: {},\n nFeatures: 0,\n nSplitFromFeatures: 0,\n nSplitToFeatures: 0,\n nBlocks: 0,\n nSplitBlocks: 0,\n };\n\n let bmGather: { [geoid: string]: { [district: string]: { [blockid: string]: boolean } } } = {};\n\n let revBG: RevBlockMapping; // lazy create on demand\n\n if (altBlocks)\n {\n // Create reverse of altBlocks if they exist {altBlockid: {stdBlockid, pop}, ...}\n let revAltBlocks: {[altBlockid: string]: {blockid: string, pop: number}} = {};\n Object.keys(altBlocks).forEach(blockid =>\n {\n Object.keys(altBlocks[blockid]).forEach(altBlockid =>\n {\n revAltBlocks[altBlockid] = {blockid: blockid, pop: altBlocks[blockid][altBlockid]}\n })\n });\n // Now walk input and build new blockMap with altBlocks replaced with stdBlocks\n let blockMapP: BlockMapping = {};\n let bestAlt: {[blockid: string]: {dist: string, pop: number}} = {};\n for (var id in blockMap) if (blockMap.hasOwnProperty(id))\n {\n let n: number = id.length;\n if (n >= 15 && !(mbm && mbm.map(id) !== undefined) && revAltBlocks[id])\n {\n if (!bestAlt[revAltBlocks[id].blockid] || bestAlt[revAltBlocks[id].blockid].pop < revAltBlocks[id].pop)\n {\n bestAlt[revAltBlocks[id].blockid] = {dist: blockMap[id], pop: revAltBlocks[id].pop};\n blockMapP[revAltBlocks[id].blockid] = blockMap[id];\n }\n }\n else\n {\n blockMapP[id] = blockMap[id];\n }\n }\n blockMap = blockMapP;\n }\n\n // First aggregate into features across all the blocks\n for (var id in blockMap) if (blockMap.hasOwnProperty(id))\n {\n let state = geoidToState(id);\n if (res.outState == null)\n res.outState = state;\n else if (res.outState !== state)\n {\n res.outValid = false;\n break;\n }\n\n let districtID: string = canonicalDistrictID(blockMap[id]);\n\n // Just ignore ZZZ (water) blocks\n if (districtID === 'ZZZ')\n continue;\n\n if (res.outOrder[districtID] === undefined)\n res.outOrder[districtID] = 0;\n\n let n: number = id.length;\n let geoids: string[];\n let ids: string[];\n res.nBlocks++;\n\n // Simple test for block id (vs. voting district or block group) id\n // Also skip longer custom precinct ids\n if (n >= 15 && (!mbm || !mbm.rev(id)))\n {\n ids = [id];\n if (mbm && mbm.map(id) !== undefined)\n geoids = [mbm.map(id)];\n else\n {\n geoids = [id.substr(0, 12)];\n if (mbm && !mbm.rev(geoids[0]))\n {\n res.outValid = false;\n break;\n }\n }\n }\n else if (n == 12)\n {\n if (!revBG) revBG = reverseBlockgroupMapping(mbm);\n if (revBG[id])\n {\n ids = revBG[id];\n geoids = ids.map(id => mbm.map(id));\n }\n else\n {\n ids = [id];\n geoids = [id];\n }\n }\n else\n {\n ids = [id];\n geoids = [id];\n }\n\n ids.forEach((id: string, i: number) => {\n let geoid = geoids[i];\n let districtToBlocks: { [districtID: string]: { [blockid: string]: boolean } } = bmGather[geoid];\n if (districtToBlocks === undefined)\n bmGather[geoid] = { [districtID]: { [id]: true } };\n else\n {\n let thisDistrict: { [blockid: string]: boolean } = districtToBlocks[districtID];\n if (thisDistrict === undefined)\n {\n thisDistrict = { };\n districtToBlocks[districtID] = thisDistrict;\n }\n thisDistrict[id] = true;\n }\n });\n }\n\n // Now determine actual mapping of blocks to features, looking for split features\n for (let geoid in bmGather) if (bmGather.hasOwnProperty(geoid))\n {\n let districtToBlocks = bmGather[geoid];\n let bWhole = false;\n if (Util.countKeys(districtToBlocks) == 1)\n {\n let blocks = Object.keys(districtToBlocks[Util.nthKey(districtToBlocks)]);\n if (blocks[0] === geoid || (mbm.rev(geoid) && blocks.length === mbm.rev(geoid).length))\n bWhole = true;\n }\n if (bWhole)\n {\n res.outMap[geoid] = Util.nthKey(districtToBlocks);\n res.nFeatures++;\n }\n else\n {\n for (let districtID in districtToBlocks) if (districtToBlocks.hasOwnProperty(districtID))\n {\n let split: VF.SplitBlock = { state: '', datasource: '', geoid: geoid, blocks: Object.keys(districtToBlocks[districtID]) };\n res.nSplitBlocks += split.blocks.length;\n let splits = res.outDistrictToSplit[districtID];\n if (splits === undefined)\n {\n splits = [];\n res.outDistrictToSplit[districtID] = splits;\n }\n splits.push(split);\n res.nFeatures++;\n res.nSplitToFeatures++;\n }\n res.nSplitFromFeatures++;\n }\n }\n\n res.outOrder = canonicalDistrictIDOrdering(res.outOrder);\n\n return res;\n}\n\nexport const StateIdToStateCode: any = {\n '01': 'AL',\n '02': 'AK',\n '04': 'AZ',\n '05': 'AR',\n '06': 'CA',\n '08': 'CO',\n '09': 'CT',\n '10': 'DE',\n '11': 'DC',\n '12': 'FL',\n '13': 'GA',\n '15': 'HI',\n '16': 'ID',\n '17': 'IL',\n '18': 'IN',\n '19': 'IA',\n '20': 'KS',\n '21': 'KY',\n '22': 'LA',\n '23': 'ME',\n '24': 'MD',\n '25': 'MA',\n '26': 'MI',\n '27': 'MN',\n '28': 'MS',\n '29': 'MO',\n '30': 'MT',\n '31': 'NE',\n '32': 'NV',\n '33': 'NH',\n '34': 'NJ',\n '35': 'NM',\n '36': 'NY',\n '37': 'NC',\n '38': 'ND',\n '39': 'OH',\n '40': 'OK',\n '41': 'OR',\n '42': 'PA',\n '44': 'RI',\n '45': 'SC',\n '46': 'SD',\n '47': 'TN',\n '48': 'TX',\n '49': 'UT',\n '50': 'VT',\n '51': 'VA',\n '53': 'WA',\n '54': 'WV',\n '55': 'WI',\n '56': 'WY',\n '72': 'PR',\n};\n\nexport const StateCodeToStateId: any = {\n 'AL': '01',\n 'AK': '02',\n 'AZ': '04',\n 'AR': '05',\n 'CA': '06',\n 'CO': '08',\n 'CT': '09',\n 'DE': '10',\n 'DC': '11',\n 'FL': '12',\n 'GA': '13',\n 'HI': '15',\n 'ID': '16',\n 'IL': '17',\n 'IN': '18',\n 'IA': '19',\n 'KS': '20',\n 'KY': '21',\n 'LA': '22',\n 'ME': '23',\n 'MD': '24',\n 'MA': '25',\n 'MI': '26',\n 'MN': '27',\n 'MS': '28',\n 'MO': '29',\n 'MT': '30',\n 'NE': '31',\n 'NV': '32',\n 'NH': '33',\n 'NJ': '34',\n 'NM': '35',\n 'NY': '36',\n 'NC': '37',\n 'ND': '38',\n 'OH': '39',\n 'OK': '40',\n 'OR': '41',\n 'PA': '42',\n 'RI': '44',\n 'SC': '45',\n 'SD': '46',\n 'TN': '47',\n 'TX': '48',\n 'UT': '49',\n 'VT': '50',\n 'VA': '51',\n 'WA': '53',\n 'WV': '54',\n 'WI': '55',\n 'WY': '56',\n 'PR': '72',\n};\n\nexport function geoidToState(geoid: string): string\n{\n let re = /^(..).*$/;\n\n let a = re.exec(geoid);\n if (a == null || a.length != 2) return null;\n return StateIdToStateCode[a[1]];\n}\n\nexport type StateUrls = (\n 'alabama' |\n 'alaska' |\n 'arizona' |\n 'arkansas' |\n 'california' |\n 'colorado' |\n 'connecticut' |\n 'delaware' |\n 'district-of-columbia' |\n 'florida' |\n 'georgia' |\n 'hawaii' |\n 'idaho' |\n 'illinois' |\n 'indiana' |\n 'iowa' |\n 'kansas' |\n 'kentucky' |\n 'louisiana' |\n 'maine' |\n 'maryland' |\n 'massachusetts' |\n 'michigan' |\n 'minnesota' |\n 'mississippi' |\n 'missouri' |\n 'montana' |\n 'nebraska' |\n 'nevada' |\n 'new-hampshire' |\n 'new-jersey' |\n 'new-mexico' |\n 'new-york' |\n 'north-carolina' |\n 'north-dakota' |\n 'ohio' |\n 'oklahoma' |\n 'oregon' |\n 'pennsylvania' |\n 'rhode-island' |\n 'south-carolina' |\n 'south-dakota' |\n 'tennessee' |\n 'texas' |\n 'utah' |\n 'vermont' |\n 'virginia' |\n 'washington' |\n 'west-virginia' |\n 'wisconsin' |\n 'wyoming' |\n 'puerto-rico'\n);\n\nexport type ValidStateNamesForUrlType =\n{\n readonly [stateUrl in StateUrls]: boolean;\n};\n\nconst ValidStateNamesForUrl: ValidStateNamesForUrlType = {\n 'alabama': true,\n 'alaska': true,\n 'arizona': true,\n 'arkansas': true,\n 'california': true,\n 'colorado': true,\n 'connecticut': true,\n 'delaware': true,\n 'district-of-columbia': true,\n 'florida': true,\n 'georgia': true,\n 'hawaii': true,\n 'idaho': true,\n 'illinois': true,\n 'indiana': true,\n 'iowa': true,\n 'kansas': true,\n 'kentucky': true,\n 'louisiana': true,\n 'maine': true,\n 'maryland': true,\n 'massachusetts': true,\n 'michigan': true,\n 'minnesota': true,\n 'mississippi': true,\n 'missouri': true,\n 'montana': true,\n 'nebraska': true,\n 'nevada': true,\n 'new-hampshire': true,\n 'new-jersey': true,\n 'new-mexico': true,\n 'new-york': true,\n 'north-carolina': true,\n 'north-dakota': true,\n 'ohio': true,\n 'oklahoma': true,\n 'oregon': true,\n 'pennsylvania': true,\n 'rhode-island': true,\n 'south-carolina': true,\n 'south-dakota': true,\n 'tennessee': true,\n 'texas': true,\n 'utah': true,\n 'vermont': true,\n 'virginia': true,\n 'washington': true,\n 'west-virginia': true,\n 'wisconsin': true,\n 'wyoming': true,\n 'puerto-rico': true,\n};\n\nexport function isValidStateNameForUrl(s: any): s is StateUrls\n{\n return (typeof s === 'string' && s in ValidStateNamesForUrl);\n}\n\n// StateCodes in state name alphabetically order\nexport const StateCodesOrdered: string[] = [\n \"AL\",\n \"AK\",\n \"AZ\",\n \"AR\",\n \"CA\",\n \"CO\",\n \"CT\",\n \"DE\",\n \"DC\",\n \"FL\",\n \"GA\",\n \"HI\",\n \"ID\",\n \"IL\",\n \"IN\",\n \"IA\",\n \"KS\",\n \"KY\",\n \"LA\",\n \"ME\",\n \"MD\",\n \"MA\",\n \"MI\",\n \"MN\",\n \"MS\",\n \"MO\",\n \"MT\",\n \"NE\",\n \"NV\",\n \"NH\",\n \"NJ\",\n \"NM\",\n \"NY\",\n \"NC\",\n \"ND\",\n \"OH\",\n \"OK\",\n \"OR\",\n \"PA\",\n \"RI\",\n \"SC\",\n \"SD\",\n \"TN\",\n \"TX\",\n \"UT\",\n \"VT\",\n \"VA\",\n \"WA\",\n \"WV\",\n \"WI\",\n \"WY\",\n \"PR\",\n];\n\nexport const StateNameMap : {[key: string] : string} = {\n \"AL\": \"Alabama\",\n \"AK\": \"Alaska\",\n \"AZ\": \"Arizona\",\n \"AR\": \"Arkansas\",\n \"CA\": \"California\",\n \"CO\": \"Colorado\",\n \"CT\": \"Connecticut\",\n \"DE\": \"Delaware\",\n \"FL\": \"Florida\",\n \"GA\": \"Georgia\",\n \"HI\": \"Hawaii\",\n \"ID\": \"Idaho\",\n \"IL\": \"Illinois\",\n \"IN\": \"Indiana\",\n \"IA\": \"Iowa\",\n \"KS\": \"Kansas\",\n \"KY\": \"Kentucky\",\n \"LA\": \"Louisiana\",\n \"ME\": \"Maine\",\n \"MD\": \"Maryland\",\n \"MA\": \"Massachusetts\",\n \"MI\": \"Michigan\",\n \"MN\": \"Minnesota\",\n \"MS\": \"Mississippi\",\n \"MO\": \"Missouri\",\n \"MT\": \"Montana\",\n \"NE\": \"Nebraska\",\n \"NV\": \"Nevada\",\n \"NH\": \"New Hampshire\",\n \"NJ\": \"New Jersey\",\n \"NM\": \"New Mexico\",\n \"NY\": \"New York\",\n \"NC\": \"North Carolina\",\n \"ND\": \"North Dakota\",\n \"OH\": \"Ohio\",\n \"OK\": \"Oklahoma\",\n \"OR\": \"Oregon\",\n \"PA\": \"Pennsylvania\",\n \"RI\": \"Rhode Island\",\n \"SC\": \"South Carolina\",\n \"SD\": \"South Dakota\",\n \"TN\": \"Tennessee\",\n \"TX\": \"Texas\",\n \"UT\": \"Utah\",\n \"VT\": \"Vermont\",\n \"VA\": \"Virginia\",\n \"WA\": \"Washington\",\n \"WV\": \"West Virginia\",\n \"WI\": \"Wisconsin\",\n \"WY\": \"Wyoming\",\n \"DC\": \"District of Columbia\",\n \"PR\": \"Puerto Rico\",\n};\n","// Type for single comment\nexport interface Comment\n{\n userid: string;\n text: string;\n date: string;\n recommend: number;\n}\n\n// Comment record associated with a map\nexport interface CommentList\n{\n id?: string;\n [commentid: string]: Comment | string; // Really just Comment but make TypeScript happy\n}\n\n// Supported like kinds\nexport type LikeKind = 'like' | 'love' | 'wow' | 'angry' | 'funny';\n\n// Like record for an individual like\nexport interface Like\n{\n date: string;\n kind: LikeKind;\n}\n\n// Record for likes associated with a map\nexport interface LikeList\n{\n id?: string;\n [userid: string]: Like | string; // Really just Like but make TypeScript happy\n}\n\n// Record for likes an individual user has performed\nexport interface UserLikes\n{\n id?: string;\n [aid: string]: Like | string; // Really just Like but make TypeScript happy\n}\n\n// Type of redistricting plan (Note: 'upper' is used when there is only 1 legislative map or body)\n// congress, upper, lower and other => the plan is for entire state\n// county and city => plan is for a single county or city within a state\nexport type PlanType = 'congress' | 'upper' | 'lower' | 'county' | 'city' | 'coi' | 'other';\n","import * as ColorData from \"./colordata\";\n\nlet ColorTable: string[] = null;\nconst MaxColors: number = 100;\n\nexport function genColor(i: number, useFirstColor: boolean): string\n{\n // i is district number, 0 => District[0] (unassigned), so subtract 1 to access ColorTable\n function gen_table(): void\n {\n ColorTable = [];\n for (let i: number = 0; i < MaxColors; i++)\n {\n // A little funky math below to skip the first (white) color\n let j = (i % (ColorData.DefaultColorNames.length - 1)) + 1;\n ColorTable.push(ColorData.ColorValues[ColorData.DefaultColorNames[j]]);\n }\n }\n\n if (ColorTable == null)\n gen_table();\n \n if (i == 0)\n return ColorData.ColorValues[ColorData.DefaultColorNames[0]];\n return ColorTable[((i - 1) + (useFirstColor ? 0 : 1)) % MaxColors];\n}\n","export interface Group\n{\n id: string,\n name: string,\n description: string,\n}\n\nexport const GROUP_OWNER = 1;\nexport const GROUP_VERIFIED = 2;\nexport const GROUP_SEEN = 4;\nexport const GROUP_REMOVED = 8;\nexport const GROUP_BLOCKED = 16;\nexport const GROUP_ADMIN = 32;\n\nexport function hideGroup(flags: number): boolean\n{\n return (flags & (GROUP_REMOVED|GROUP_BLOCKED)) != 0;\n}\n\nexport function adminGroup(flags: number): boolean\n{\n return (flags & (GROUP_ADMIN|GROUP_OWNER)) != 0;\n}\n\nexport interface GroupUser\n{\n id: string,\n uid: string,\n flags: number,\n}\n\nexport interface GroupMap\n{\n id: string, // group id\n sid: string, // map (session) id\n permission: number, // permissions (read or readwrite)\n}\n\nexport type GroupUserIndex = { [groupid: string]: number }; // GroupUser flags\nexport type GroupMapIndex = { [groupid: string]: number }; // GroupMap permission\nexport type GroupIndex = { [groupid: string]: Group };\n","import { Util, G } from '@dra2020/baseclient';\n\nexport interface Landmark\n{\n id: string,\n name: string,\n description: string,\n coord: [number, number],\n}\n\nexport type Landmarks = { [id: string]: Landmark };\n\nexport function landmarksToCollection(landmarks: Landmarks): G.GeoFeatureCollection\n{\n if (landmarks == null) return null;\n\n let col: G.GeoFeatureCollection = { type: 'FeatureCollection', features: [] };\n Object.values(landmarks).forEach(l => {\n let f: G.GeoFeature = {\n type: 'Feature',\n properties: {\n id: l.id,\n name: l.name,\n description: l.description,\n },\n geometry: {\n type: 'Point',\n coordinates: l.coord,\n },\n };\n col.features.push(f);\n });\n return col;\n}\n\nexport function collectionToLandmarks(col: G.GeoFeatureCollection): Landmarks\n{\n let landmarks: Landmarks = {};\n if (col && col.features) col.features.forEach((f: G.GeoFeature) => {\n if (f.geometry.type === 'Point')\n {\n let c: any = f.geometry.coordinates;\n if (Array.isArray(c) && typeof c[0] === 'number' && typeof c[1] === 'number')\n {\n let landmark: Landmark = {\n id: Util.createGuid(),\n name: G.flexName(f),\n description: f.properties.description || '',\n coord: [c[0], c[1]],\n };\n landmarks[landmark.id] = landmark;\n }\n }\n });\n return landmarks;\n}\n","export interface UserLayerMeta\n{\n createdBy: string,\n id: string,\n name?: string,\n description?: string,\n state?: string,\n createTime?: string,\n modifyTime?: string,\n deleted?: boolean,\n published?: string,\n official?: boolean\n}\n\nexport type UserLayerMetaIndex = {\n [id: string]: UserLayerMeta\n}\n\nexport type LayerType = 'layer' | 'map' | 'restriction' | 'precincts';\n\nexport interface UserLayerRef\n{\n id: string,\n name?: string,\n layerType?: LayerType,\n geojsonName?: string,\n blockmapName?: string,\n cacheState?: string,\n cacheDatasource?: string,\n cachePlanType?: string,\n fill: boolean,\n stroke: boolean,\n label: boolean,\n landmark: boolean,\n strokeColor: string,\n strokeOpacity: number,\n fillColor: string,\n fillOpacity: number,\n lineWidth?: number,\n}\n\nexport type UserLayerRefIndex = {\n [id: string]: UserLayerRef\n}\n","export interface Precincts\n{\n id?: string,\n state?: string,\n datasource?: string,\n name?: string,\n description?: string,\n labels?: string[],\n createdBy?: string,\n createTime?: string,\n modifyTime?: string,\n deleted?: boolean,\n published?: string,\n official?: boolean,\n}\n\nexport type PrecinctsIndex = { [id: string]: Precincts };\n","export function reverseBlockMapping(bm: any): any\n{\n let rev: any = {};\n\n if (bm) Object.keys(bm).forEach(blockid => {\n let geoid = bm[blockid];\n if (! rev[geoid]) rev[geoid] = [];\n rev[geoid].push(blockid);\n });\n Object.values(rev).forEach((a: string[]) => a.sort());\n return rev;\n}\n\nexport function reverseSubMapping(bm: any, n: number): any\n{\n let rev: any = {};\n\n if (bm) Object.keys(bm).forEach(blockid => {\n let geoid = blockid.substr(0, n);\n if (! rev[geoid]) rev[geoid] = [];\n rev[geoid].push(blockid);\n });\n return rev;\n}\n\nexport function reverseBlockgroupMapping(bm: any): any\n{\n return reverseSubMapping(bm, 12);\n}\n\nexport function reverseTractMapping(bm: any): any\n{\n return reverseSubMapping(bm, 11);\n}\n","export let Schemas: any = {\n 'users':\n {\n FileOptions: { version: 5, name: 'users', map: false },\n Schema: {\n id: 'S',\n name: 'S',\n email: 'S',\n hashPW: 'S',\n verified: 'BOOL',\n admin: 'BOOL',\n roles: 'M',\n verifyGUID: 'S',\n resetGUID: 'S',\n resetTime: 'S',\n lastActive: 'S',\n modifyTime: 'S',\n resetCount: 'N',\n accessed: 'M',\n likeID: 'S',\n visitData: 'M',\n groups: 'M',\n cache: 'N',\n cached: 'N',\n },\n KeySchema: { id: 'HASH' },\n GlobalSecondaryIndexes: [\n { email: 'HASH' },\n { verifyGUID: 'HASH' },\n { resetGUID: 'HASH' },\n ],\n },\n 'state':\n {\n FileOptions: { version: 7, name: 'sessions', map: true },\n Schema: {\n id: 'S',\n name: 'S',\n type: 'S',\n description: 'S',\n labels: 'L',\n flags: 'L',\n createdBy: 'S',\n lastActive: 'S',\n createTime: 'S',\n modifyTime: 'S',\n clientCount: 'N',\n maxClients: 'N',\n requestCount: 'N',\n deleted: 'BOOL',\n published: 'S',\n official: 'BOOL',\n loadFailed: 'BOOL',\n accessMap: 'M',\n revisions: 'L',\n xprops: 'M',\n groups: 'M',\n xid: 'S',\n },\n KeySchema: { createdBy: 'HASH', id: 'RANGE' },\n GlobalSecondaryIndexes: [\n { published: 'HASH' },\n { xid: 'HASH' },\n { id: 'HASH' }\n ], // sparse\n },\n 'expungestate':\n {\n FileOptions: { version: 7, name: 'sessions', map: true },\n Schema: {\n id: 'S',\n name: 'S',\n type: 'S',\n description: 'S',\n labels: 'L',\n createdBy: 'S',\n lastActive: 'S',\n createTime: 'S',\n modifyTime: 'S',\n clientCount: 'N',\n maxClients: 'N',\n requestCount: 'N',\n deleted: 'BOOL',\n published: 'S',\n official: 'BOOL',\n loadFailed: 'BOOL',\n accessMap: 'M',\n revisions: 'L',\n xprops: 'M',\n },\n KeySchema: { id: 'HASH' },\n },\n 'splitblock':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n chunk: 'S',\n chunkKey: 'S',\n state: 'S',\n datasource: 'S',\n geoid: 'S',\n blocks: 'L'\n },\n KeySchema: { id: 'HASH' },\n GlobalSecondaryIndexes: [\n { chunkKey: 'HASH', id: 'RANGE' },\n ],\n },\n 'blockset':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n chunk: 'S',\n chunkKey: 'S',\n chunkList: 'L',\n state: 'S',\n datasource: 'S',\n geoid: 'S',\n blocks: 'L'\n },\n KeySchema: { id: 'HASH' },\n GlobalSecondaryIndexes: [\n { state: 'HASH' },\n ],\n },\n 'blockchunk':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n recompute: 'BOOL',\n splits: 'L',\n },\n },\n 'access':\n {\n FileOptions: { map: true, noobject: true },\n Schema: {\n id: 'S',\n value: 'S',\n },\n KeySchema: { id: 'HASH' }\n },\n 'visitor':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n lastModified: 'S',\n /* ... others */\n },\n KeySchema: { id: 'HASH' }\n },\n 'session':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n lastActive: 'S',\n value: 'S',\n },\n KeySchema: { id: 'HASH' }\n },\n 'userlikes':\n {},\n 'likes':\n {},\n 'comments':\n {},\n 'stats':\n {},\n 'livestats':\n {},\n 'workqueue':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n priority: 'N',\n functionName: 'S',\n params: 'M',\n },\n KeySchema: { id: 'HASH' },\n GlobalSecondaryIndexes: [\n { priority: 'HASH' },\n ],\n },\n 'failqueue':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n priority: 'N',\n functionName: 'S',\n params: 'M',\n failType: 'S',\n },\n KeySchema: { id: 'HASH' },\n },\n 'layer':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n name: 'S',\n description: 'S',\n createdBy: 'S',\n createTime: 'S',\n modifyTime: 'S',\n deleted: 'BOOL',\n published: 'S',\n official: 'BOOL',\n state: 'S',\n },\n KeySchema: { createdBy: 'HASH', id: 'RANGE' },\n GlobalSecondaryIndexes: [\n { published: 'HASH' },\n { id: 'HASH' }\n ], // sparse\n },\n 'groups':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n name: 'S',\n description: 'S',\n },\n KeySchema: { id: 'HASH' },\n },\n 'groupsusers':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n uid: 'S',\n flags: 'N',\n },\n KeySchema: { id: 'HASH', uid: 'RANGE' },\n },\n 'groupsmaps':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n sid: 'S',\n permission: 'N',\n },\n KeySchema: { id: 'HASH', sid: 'RANGE' },\n },\n 'notifications':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n createdBy: 'S',\n message: 'S',\n },\n KeySchema: { createdBy: 'HASH', id: 'RANGE' },\n },\n 'cull':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n key: 'S',\n bucket: 'S',\n expires: 'S',\n },\n KeySchema: { id: 'HASH' },\n },\n 'precincts':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n state: 'S',\n datasource: 'S',\n name: 'S',\n description: 'S',\n labels: 'L',\n createdBy: 'S',\n createTime: 'S',\n modifyTime: 'S',\n deleted: 'BOOL',\n published: 'S',\n official: 'BOOL',\n },\n KeySchema: { createdBy: 'HASH', id: 'RANGE' },\n GlobalSecondaryIndexes: [\n { id: 'HASH' },\n { published: 'HASH' },\n ], // sparse\n },\n}\n","import * as geojson from 'geojson';\nimport { Util, Poly, G } from '@dra2020/baseclient';\nimport * as DT from './vfeature';\n\n// Given the topology for a precinct and a split, compute the feature data for the virtual feature.\n//\n\nexport function splitToGeoFeature(split: DT.SplitBlock, topoPrecinct: Poly.Topo, mbm: G.MultiBlockMapping): G.GeoFeature\n{\n let f = Poly.topoMerge(topoPrecinct, split.blocks);\n if (!f) return f;\n\n let contiguity = new Util.IndexedArray();\n let block_contiguity = new Util.IndexedArray();\n f.properties.datasets = {};\n split.blocks.forEach(blockid => {\n let b = topoPrecinct.objects[blockid];\n if (b.properties.datasets)\n Util.deepAccum(f.properties.datasets, b.properties.datasets);\n if (b.properties.contiguity)\n {\n b.properties.contiguity.forEach((id: string) => {\n if (id === 'OUT_OF_STATE')\n contiguity.set(id);\n else\n mbm.multimap(id).forEach(geoid => contiguity.set(geoid));\n });\n b.properties.contiguity.forEach((id: string) => {\n block_contiguity.set(id);\n });\n }\n });\n split.blocks.forEach(blockid => block_contiguity.clear(blockid));\n f.properties.id = DT.splitToVgeoid(split);\n f.properties.name = `Part of ${split.geoid} from ${split.blocks.length} blocks`;\n f.properties.contiguity = contiguity.asArray();\n f.properties.block_contiguity = block_contiguity.asArray();\n f.properties.blocks = split.blocks;\n f.properties.mbmstamp = mbm.stamp;\n return f;\n}\n","import * as DT from './dra-types';\n\nexport interface StateYearInfo\n{\n population: number,\n congress: {nDistricts: number}, \n upper: {nDistricts: number}, \n lower?: {nDistricts: number}, \n}\n\nexport interface StateInfo\n{\n '2010_VD': StateYearInfo,\n '2020_VD': StateYearInfo,\n}\n\nexport const StatePlanInfoMap: {[key: string]: StateInfo} = {\n \"AL\": {\"2010_VD\": {population: 4779736, congress: {nDistricts: 7}, upper: {nDistricts: 35}, lower: {nDistricts: 105}}, \"2020_VD\": { population: 0, congress: {nDistricts: 7}, upper: {nDistricts: 35}, lower: {nDistricts: 105}}},\n \"AK\": {\"2010_VD\": {population: 710231, congress: {nDistricts: 1}, upper: {nDistricts: 20}, lower: {nDistricts: 40}}, \"2020_VD\": {population: 0, congress: {nDistricts: 1}, upper: {nDistricts: 20}, lower: {nDistricts: 40}}},\n \"AZ\": {\"2010_VD\": {population: 6392017, congress: {nDistricts: 9}, upper: {nDistricts: 30}}, \"2020_VD\": {population: 6, congress: {nDistricts: 9}, upper: {nDistricts: 30}}},\n \"AR\": {\"2010_VD\": {population: 2915918, congress: {nDistricts: 4}, upper: {nDistricts: 35}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 35}, lower: {nDistricts: 100}}},\n \"CA\": {\"2010_VD\": {population: 37253956, congress: {nDistricts: 53}, upper: {nDistricts: 40}, lower: {nDistricts: 80}}, \"2020_VD\": {population: 6, congress: {nDistricts: 52}, upper: {nDistricts: 40}, lower: {nDistricts: 80}}},\n \"CO\": {\"2010_VD\": {population: 5029196, congress: {nDistricts: 7}, upper: {nDistricts: 35}, lower: {nDistricts: 65}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 35}, lower: {nDistricts: 65}}},\n \"CT\": {\"2010_VD\": {population: 3574097, congress: {nDistricts: 5}, upper: {nDistricts: 36}, lower: {nDistricts: 151}}, \"2020_VD\": {population: 6, congress: {nDistricts: 5}, upper: {nDistricts: 36}, lower: {nDistricts: 151}}},\n \"DE\": {\"2010_VD\": {population: 897934, congress: {nDistricts: 1}, upper: {nDistricts: 21}, lower: {nDistricts: 41}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 21}, lower: {nDistricts: 41}}},\n \"FL\": {\"2010_VD\": {population: 18801310, congress: {nDistricts: 27}, upper: {nDistricts: 40}, lower: {nDistricts: 120}}, \"2020_VD\": {population: 6, congress: {nDistricts: 28}, upper: {nDistricts: 40}, lower: {nDistricts: 120}}},\n \"GA\": {\"2010_VD\": {population: 9687653, congress: {nDistricts: 14}, upper: {nDistricts: 56}, lower: {nDistricts: 180}}, \"2020_VD\": {population: 6, congress: {nDistricts: 14}, upper: {nDistricts: 56}, lower: {nDistricts: 180}}},\n \"HI\": {\"2010_VD\": {population: 1360301, congress: {nDistricts: 2}, upper: {nDistricts: 25}, lower: {nDistricts: 51}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 25}, lower: {nDistricts: 51}}},\n \"ID\": {\"2010_VD\": {population: 1567582, congress: {nDistricts: 2}, upper: {nDistricts: 35}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 35}}},\n \"IL\": {\"2010_VD\": {population: 12830632, congress: {nDistricts: 18}, upper: {nDistricts: 59}, lower: {nDistricts: 118}}, \"2020_VD\": {population: 6, congress: {nDistricts: 17}, upper: {nDistricts: 59}, lower: {nDistricts: 118}}},\n \"IN\": {\"2010_VD\": {population: 6483802, congress: {nDistricts: 9}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 9}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}},\n \"IA\": {\"2010_VD\": {population: 3046355, congress: {nDistricts: 4}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}},\n \"KS\": {\"2010_VD\": {population: 2853118, congress: {nDistricts: 4}, upper: {nDistricts: 40}, lower: {nDistricts: 125}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 40}, lower: {nDistricts: 125}}},\n \"KY\": {\"2010_VD\": {population: 4339367, congress: {nDistricts: 6}, upper: {nDistricts: 38}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 6}, upper: {nDistricts: 38}, lower: {nDistricts: 100}}},\n \"LA\": {\"2010_VD\": {population: 4533372, congress: {nDistricts: 6}, upper: {nDistricts: 39}, lower: {nDistricts: 105}}, \"2020_VD\": {population: 6, congress: {nDistricts: 6}, upper: {nDistricts: 39}, lower: {nDistricts: 105}}},\n \"ME\": {\"2010_VD\": {population: 1328361, congress: {nDistricts: 2}, upper: {nDistricts: 35}, lower: {nDistricts: 151}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 35}, lower: {nDistricts: 151}}},\n \"MD\": {\"2010_VD\": {population: 5773552, congress: {nDistricts: 8}, upper: {nDistricts: 47}, lower: {nDistricts: 67}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 47}, lower: {nDistricts: 67}}},\n \"MA\": {\"2010_VD\": {population: 6547629, congress: {nDistricts: 9}, upper: {nDistricts: 40}, lower: {nDistricts: 160}}, \"2020_VD\": {population: 6, congress: {nDistricts: 9}, upper: {nDistricts: 40}, lower: {nDistricts: 160}}},\n \"MI\": {\"2010_VD\": {population: 9883640, congress: {nDistricts: 14}, upper: {nDistricts: 38}, lower: {nDistricts: 110}}, \"2020_VD\": {population: 6, congress: {nDistricts: 13}, upper: {nDistricts: 38}, lower: {nDistricts: 110}}},\n \"MN\": {\"2010_VD\": {population: 5303925, congress: {nDistricts: 8}, upper: {nDistricts: 67}, lower: {nDistricts: 134}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 67}, lower: {nDistricts: 134}}},\n \"MS\": {\"2010_VD\": {population: 2967297, congress: {nDistricts: 4}, upper: {nDistricts: 52}, lower: {nDistricts: 122}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 52}, lower: {nDistricts: 122}}},\n \"MO\": {\"2010_VD\": {population: 5988927, congress: {nDistricts: 8}, upper: {nDistricts: 34}, lower: {nDistricts: 163}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 34}, lower: {nDistricts: 163}}},\n \"MT\": {\"2010_VD\": {population: 989415, congress: {nDistricts: 1}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}},\n \"NE\": {\"2010_VD\": {population: 1826341, congress: {nDistricts: 3}, upper: {nDistricts: 49}}, \"2020_VD\": {population: 6, congress: {nDistricts: 3}, upper: {nDistricts: 49}}},\n \"NV\": {\"2010_VD\": {population: 2700551, congress: {nDistricts: 4}, upper: {nDistricts: 21}, lower: {nDistricts: 42}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 21}, lower: {nDistricts: 42}}},\n \"NH\": {\"2010_VD\": {population: 1316470, congress: {nDistricts: 2}, upper: {nDistricts: 24}, lower: {nDistricts: 161}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 24}, lower: {nDistricts: 164}}},\n \"NJ\": {\"2010_VD\": {population: 8791894, congress: {nDistricts: 12}, upper: {nDistricts: 40}}, \"2020_VD\": {population: 6, congress: {nDistricts: 12}, upper: {nDistricts: 40}}},\n \"NM\": {\"2010_VD\": {population: 2059179, congress: {nDistricts: 3}, upper: {nDistricts: 42}, lower: {nDistricts: 70}}, \"2020_VD\": {population: 6, congress: {nDistricts: 3}, upper: {nDistricts: 42}, lower: {nDistricts: 70}}},\n \"NY\": {\"2010_VD\": {population: 19378102, congress: {nDistricts: 27}, upper: {nDistricts: 63}, lower: {nDistricts: 150}}, \"2020_VD\": {population: 6, congress: {nDistricts: 26}, upper: {nDistricts: 63}, lower: {nDistricts: 150}}},\n \"NC\": {\"2010_VD\": {population: 9535483, congress: {nDistricts: 13}, upper: {nDistricts: 50}, lower: {nDistricts: 120}}, \"2020_VD\": {population: 6, congress: {nDistricts: 14}, upper: {nDistricts: 50}, lower: {nDistricts: 120}}},\n \"ND\": {\"2010_VD\": {population: 672591, congress: {nDistricts: 1}, upper: {nDistricts: 47}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 47}, lower: {nDistricts: 49}}},\n \"OH\": {\"2010_VD\": {population: 11536504, congress: {nDistricts: 16}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}, \"2020_VD\": {population: 6, congress: {nDistricts: 15}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}},\n \"OK\": {\"2010_VD\": {population: 3751351, congress: {nDistricts: 5}, upper: {nDistricts: 48}, lower: {nDistricts: 101}}, \"2020_VD\": {population: 6, congress: {nDistricts: 5}, upper: {nDistricts: 48}, lower: {nDistricts: 101}}},\n \"OR\": {\"2010_VD\": {population: 3831074, congress: {nDistricts: 5}, upper: {nDistricts: 30}, lower: {nDistricts: 60}}, \"2020_VD\": {population: 6, congress: {nDistricts: 6}, upper: {nDistricts: 30}, lower: {nDistricts: 60}}},\n \"PA\": {\"2010_VD\": {population: 12702379, congress: {nDistricts: 18}, upper: {nDistricts: 50}, lower: {nDistricts: 203}}, \"2020_VD\": {population: 6, congress: {nDistricts: 17}, upper: {nDistricts: 50}, lower: {nDistricts: 203}}},\n \"RI\": {\"2010_VD\": {population: 1052567, congress: {nDistricts: 2}, upper: {nDistricts: 38}, lower: {nDistricts: 75}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 38}, lower: {nDistricts: 75}}},\n \"SC\": {\"2010_VD\": {population: 4625364, congress: {nDistricts: 7}, upper: {nDistricts: 46}, lower: {nDistricts: 124}}, \"2020_VD\": {population: 6, congress: {nDistricts: 7}, upper: {nDistricts: 46}, lower: {nDistricts: 124}}},\n \"SD\": {\"2010_VD\": {population: 814180, congress: {nDistricts: 1}, upper: {nDistricts: 35}, lower: {nDistricts: 37}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 35}, lower: {nDistricts: 37}}},\n \"TN\": {\"2010_VD\": {population: 6346105, congress: {nDistricts: 9}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}, \"2020_VD\": {population: 6, congress: {nDistricts: 9}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}},\n \"TX\": {\"2010_VD\": {population: 25145561, congress: {nDistricts: 36}, upper: {nDistricts: 31}, lower: {nDistricts: 150}}, \"2020_VD\": {population: 6, congress: {nDistricts: 38}, upper: {nDistricts: 31}, lower: {nDistricts: 150}}},\n \"UT\": {\"2010_VD\": {population: 2763885, congress: {nDistricts: 4}, upper: {nDistricts: 29}, lower: {nDistricts: 75}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 29}, lower: {nDistricts: 75}}},\n \"VT\": {\"2010_VD\": {population: 625741, congress: {nDistricts: 1}, upper: {nDistricts: 13}, lower: {nDistricts: 104}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 13}, lower: {nDistricts: 104}}},\n \"VA\": {\"2010_VD\": {population: 8001024, congress: {nDistricts: 11}, upper: {nDistricts: 40}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 11}, upper: {nDistricts: 40}, lower: {nDistricts: 100}}},\n \"WA\": {\"2010_VD\": {population: 6724540, congress: {nDistricts: 10}, upper: {nDistricts: 49}}, \"2020_VD\": {population: 6, congress: {nDistricts: 10}, upper: {nDistricts: 49}}},\n \"WV\": {\"2010_VD\": {population: 1852994, congress: {nDistricts: 3}, upper: {nDistricts: 17}, lower: {nDistricts: 67}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 17}, lower: {nDistricts: 100}}},\n \"WI\": {\"2010_VD\": {population: 5686986, congress: {nDistricts: 8}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}},\n \"WY\": {\"2010_VD\": {population: 563626, congress: {nDistricts: 1}, upper: {nDistricts: 30}, lower: {nDistricts: 60}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 31}, lower: {nDistricts: 62}}},\n \"DC\": {\"2010_VD\": {population: 601723, congress: {nDistricts: 1}, upper: {nDistricts: 8}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 8}}},\n \"PR\": {\"2010_VD\": {population: 0, congress: {nDistricts: 1}, upper: {nDistricts: 1}}, \"2020_VD\": {population: 0, congress: {nDistricts: 1}, upper: {nDistricts: 1}}},\n};\n\nexport function hasPlanType(stateCode: string, planType: DT.PlanType, is2020?: boolean): boolean\n{\n // handle unicameral states (hence no lower house districts)\n if ((stateCode === 'NE' || stateCode === 'DC') && planType === 'lower')\n return false;\n\n // handle states with only 1 congressional district (hence no plan)\n if (planType === 'congress' &&\n (stateCode === 'AK' || stateCode === 'DE' || stateCode === 'ND' || stateCode === 'SD' || stateCode === 'VT' || stateCode === 'WY' || stateCode === 'DC' ||\n (stateCode === 'MT' && !is2020)))\n {\n return false;\n }\n\n if (planType === 'county' || planType === 'city')\n return false;\n\n return true;\n}\n\nexport function hasOneLegislativePlanBothHouses(stateCode: string): boolean\n{\n return stateCode === 'AZ' || stateCode === 'ID' || stateCode === 'NJ' || stateCode === 'WA';\n}\n\nexport function getPlanDistrictCount(stateCode: string, planType: DT.PlanType, datasource: string): number\n{\n if (planType === 'coi')\n return 1;\n if (datasource === '2016_BG')\n datasource = '2010_VD';\n if ((datasource !== '2010_VD' && datasource !== '2020_VD') || (planType !== 'congress' && planType !== 'upper' && planType !== 'lower'))\n return 0;\n \n const stateYearInfo: StateYearInfo = StatePlanInfoMap[stateCode][datasource as ('2010_VD' | '2020_VD')];\n return stateYearInfo && stateYearInfo[planType] ? stateYearInfo[planType]['nDistricts'] : 0;\n}\n\n// TODO: This is not currently used (3/2/21). 2020_VD population numbers are not set; update them when apportionment happens \nexport function getStateYearTotalPop(stateCode: string, datasource: string): number\n{\n if (datasource === '2016_BG')\n datasource = '2010_VD';\n if ((datasource !== '2010_VD' && datasource !== '2020_VD'))\n return 0;\n\n const stateYearInfo: StateYearInfo = StatePlanInfoMap[stateCode][datasource as ('2010_VD' | '2020_VD')];\n return stateYearInfo ? stateYearInfo['population'] : 0;\n}\n\nexport function inferPlanType(stateCode: string, datasource: string, nDistricts: number, flex?: boolean): DT.PlanType\n{\n // Intended for datasource === '2020_VD'\n const congressCount: number = getPlanDistrictCount(stateCode, 'congress', datasource);\n const upperCount: number = getPlanDistrictCount(stateCode, 'upper', datasource);\n const lowerCount: number = getPlanDistrictCount(stateCode, 'lower', datasource);\n return (\n ((flex && nDistricts <= congressCount + 2 && nDistricts >= congressCount - 3) || nDistricts == congressCount) ? 'congress' :\n (nDistricts == upperCount) ? 'upper' :\n (nDistricts == lowerCount) ? 'lower' :\n 'other');\n}\n","// In constrast to logging, the stats manager is responsible for tracking live server status.\n// The results are stored in a compact database record which can be easily queried for current\n// status. Each server instance maintains its own field in the overall \"values\" record in the\n// stats database. The reporting tool aggregates all instances to report overall server activity.\n//\n// There are basically three kinds of values:\n// Sum - we want to sum the value across all server instances (e.g. number of connnected clients)\n// Avg - we just take average across all server instances (e.g. memory heap size)\n// Rate - we want to track the rate of some activity over some time period\n//\n\nexport type ValType = number;\nexport const ValTypeSum = 0;\nexport const ValTypeAvg = 1;\nexport const ValTypeRate = 2;\n\nconst ExpiryAge = 1000 * 60 * 60 * 24; // throw away instance record after this time period\n\nexport function statExpiryTime(): string\n{\n let time = new Date();\n time.setTime(time.getTime() + ExpiryAge);\n return time.toJSON();\n}\n\nexport interface StatRecord\n{\n id: string;\n production: boolean;\n expires: string;\n time: string;\n index: StatEntryIndex;\n}\n\nexport type StatEntry = StatValue | StatRate;\n\nexport type StatEntryIndex = { [name: string]: StatEntry };\n\nexport interface StatValue\n{\n valType?: ValType;\n cur?: number;\n min?: number;\n max?: number;\n tot?: number;\n cnt?: number;\n}\n\nexport interface StatRate\n{\n valType?: ValType;\n thisMin?: number;\n lastMin?: number;\n thisHour?: number;\n lastHour?: number;\n thisDay?: number;\n lastDay?: number;\n}\n\n// Aggregate running value. This applies both in memory (logging multiple times before\n// saving to database) as well as aggregating into an instance structure in the DB.\n\nexport function statValueRecord(sv: StatValue, cur: number, valType: ValType): StatValue\n{\n if (sv === undefined) sv = {};\n if (sv.min === undefined || cur < sv.min)\n sv.min = cur;\n if (sv.max === undefined || cur > sv.max)\n sv.max = cur;\n sv.cur = cur;\n sv.valType = valType;\n return sv;\n}\n\nexport function statRateIncr(sr: StatRate, incr: number = 1): StatRate\n{\n if (sr == null) sr = {};\n sr.valType = ValTypeRate;\n sr.thisMin = sr.thisMin === undefined ? incr : sr.thisMin+incr;\n sr.thisHour = sr.thisHour === undefined ? incr : sr.thisHour+incr;\n sr.thisDay = sr.thisDay === undefined ? incr : sr.thisDay+incr;\n return sr;\n}\n\nexport const OneMinute = 1000 * 60;\nexport const OneHour = OneMinute * 60;\nexport const OneDay = OneHour * 24;\n\nexport function statRateRollover(sr: StatRate, period: number): void\n{\n if ((period % OneMinute) == 0)\n {\n sr.lastMin = sr.thisMin;\n sr.thisMin = 0;\n }\n if ((period % OneHour) == 0)\n {\n sr.lastHour = sr.thisHour;\n sr.thisHour = 0;\n }\n if ((period % OneDay) == 0)\n {\n sr.lastDay = sr.thisDay;\n sr.thisDay = 0;\n }\n}\n\nexport function statEntryIndexMerge(accum: StatEntryIndex, si: StatEntryIndex): StatEntryIndex\n{\n if (accum == null) accum = {};\n\n // We just discard and replace old rate information\n Object.keys(accum).forEach((p: string) => { if (accum[p].valType == ValTypeRate) delete accum[p] });\n\n // But merge in all the other values\n Object.keys(si).forEach((p: string) => {\n let se = si[p];\n if (se.valType == ValTypeRate)\n accum[p] = se;\n else\n {\n let sv = se as StatValue;\n accum[p] = statValueRecord(se as StatValue, sv.cur, sv.valType);\n }\n });\n return accum;\n}\n\nexport function statEntryIndexRollover(si: StatEntryIndex, period: number): void\n{\n Object.keys(si).forEach((p: string) => {\n let se = si[p];\n if (se.valType == ValTypeRate)\n statRateRollover(se as StatRate, period);\n });\n}\n\nexport function statRecordMerge(accum: StatRecord, si: StatRecord): StatRecord\n{\n if (accum == null)\n accum = { id: si.id, production: si.production, time: si.time, expires: si.expires, index: {} };\n accum.expires = si.expires;\n accum.time = si.time;\n statEntryIndexMerge(accum.index, si.index);\n return accum;\n}\n\n// Accumulate a set of values together (e.g. from multiple running instances)\n// for reporting current state.\n//\n\nexport function statValueAccum(accum: StatValue, sv: StatValue): StatEntry\n{\n if (accum == null)\n {\n accum = {};\n accum.valType = sv.valType;\n }\n if (accum.min === undefined || sv.min < accum.min)\n accum.min = sv.min;\n if (accum.max === undefined || sv.max > accum.max)\n accum.max = sv.max;\n if (accum.valType === undefined)\n accum.valType = sv.valType;\n if (accum.valType == ValTypeSum)\n accum.cur = (accum.cur === undefined ? sv.cur : accum.cur+sv.cur);\n else if (accum.valType == ValTypeAvg)\n {\n accum.tot = (accum.tot === undefined ? 0 : accum.tot) + sv.cur;\n accum.cnt = (accum.cnt === undefined ? 0 : accum.cnt) + 1;\n accum.cur = accum.tot / accum.cnt;\n }\n return accum;\n}\n\nexport function statRateAccum(accum: StatRate, sr: StatRate): StatRate\n{\n if (accum == null)\n {\n accum = {};\n accum.valType = sr.valType;\n }\n accum.thisMin = accum.thisMin === undefined ? sr.thisMin : (accum.thisMin + (sr.thisMin === undefined ? 0 : sr.thisMin));\n accum.lastMin = accum.lastMin === undefined ? sr.lastMin : (accum.lastMin + (sr.lastMin === undefined ? 0 : sr.lastMin));\n accum.thisHour = accum.thisHour === undefined ? sr.thisHour : (accum.thisHour + (sr.thisHour === undefined ? 0 : sr.thisHour));\n accum.lastHour = accum.lastHour === undefined ? sr.lastHour : (accum.lastHour + (sr.lastHour === undefined ? 0 : sr.lastHour));\n accum.thisDay = accum.thisDay === undefined ? sr.thisDay : (accum.thisDay + (sr.thisDay === undefined ? 0 : sr.thisDay));\n accum.lastDay = accum.lastDay === undefined ? sr.lastDay : (accum.lastDay + (sr.lastDay === undefined ? 0 : sr.lastDay));\n return accum;\n}\n\nexport function statIndexAccum(accum: StatEntryIndex, si: StatEntryIndex): StatEntryIndex\n{\n if (accum == null) accum = {};\n Object.keys(si).forEach((p: string) => {\n let se = si[p];\n if (se.valType == ValTypeRate)\n accum[p] = statRateAccum(accum[p] as StatRate, se as StatRate);\n else\n accum[p] = statValueAccum(accum[p] as StatValue, se as StatValue);\n });\n return accum;\n}\n","// Public libraries\nimport * as Hash from 'object-hash';\n\nexport interface SplitBlock\n{\n id?: string;\n chunkKey?: string;\n chunkList?: string[];\n chunk?: string;\n state: string;\n datasource: string;\n geoid: string;\n blocks?: string[];\n bitset?: string;\n}\n\nexport interface SplitChunk\n{\n id?: string;\n recompute?: boolean;\n splits?: string[];\n}\n\nexport type DistrictToSplitBlock = { [districtID: string]: SplitBlock[] };\n\n// Canonical hashing of custom precinct\nexport function chash(o: any): string\n{\n return Hash(o, { respectType: false, unorderedArrays: true, unorderedObjects: true,\n excludeKeys: (k: string) => (k === 'id') });\n}\n\n// Is custom feature - 5 digit county id + 'cust' + hash\nlet reC = /^\\d\\d\\d\\d\\dcust.*$/;\n\nexport function isCfeature(id: string): boolean\n{\n return id && reC.test(id);\n}\n\n// Canonical hashing of splitblock data\nexport function vhash(o: any): string\n{\n return Hash(o,\n { respectType: false,\n unorderedArrays: true,\n unorderedObjects: true,\n // basically, include (state,datasource,geoid,blocks[])\n excludeKeys: (k: string) => (k === 'id' || k === 'chunk' || k === 'chunkList' || k === 'chunkKey')\n });\n}\n\n// old style \"vfeature_[geoid]_[numericchunk]_[id]\"\n// new style \"B_[geoid]_bitset\"\n\nexport function vgeoidToGeoid(vgeoid: string): string\n{\n let reNew = /^B_([^_]*)_.*/;\n let reOld = /^vfeature_([^_]*)_.*/;\n let a = reNew.exec(vgeoid);\n if (a == null || a.length != 2)\n {\n a = reOld.exec(vgeoid);\n if (a == null || a.length != 2)\n return '';\n }\n return a[1];\n}\n\nexport function splitToVgeoid(s: SplitBlock): string\n{\n // Newstyle\n if (s.bitset)\n return `B_${s.geoid}_${s.bitset}`;\n\n // oldstyle\n if (s.id === undefined)\n s.id = vhash(s);\n if (s.chunk === undefined)\n s.chunk = '0';\n return `vfeature_${s.geoid}_${s.chunk}_${s.id}`;\n}\n\nexport function splitCommitted(s: SplitBlock): boolean\n{\n return !!s.id || !!s.bitset;\n}\n\nexport function vgeoidToChunk(vgeoid: string): string\n{\n // vgeoid is string of form: \"vfeature_[geoid]_[chunkid]_[hash]\"\n // the contents are chunked into a file of form \"vfeature_chunk_[chunkid]\"\n // So extract the chunk ID and download that.\n let re = /^vfeature_([^_]*)_([^_*])_(.*)$/;\n let a = re.exec(vgeoid);\n if (a && a.length == 4)\n vgeoid = `vfeature_chunk_${a[2]}`;\n else\n vgeoid = null;\n\n return vgeoid;\n}\n\nexport function vgeoidToSplit(state: string, datasource: string, vgeoid: string): SplitBlock\n{\n let reNew = /^B_([^_]*)_(.*)$/;\n let reOld = /^vfeature_([^_]*)_([^_*])_(.*)$/;\n let a = reNew.exec(vgeoid);\n if (a)\n return { state: state, datasource: datasource, geoid: a[1], bitset: a[2] };\n a = reOld.exec(vgeoid);\n if (a)\n return { state: state, datasource: datasource, geoid: a[1], id: a[3], chunk: a[2], blocks: null };\n return null;\n}\n\nexport function vgeoidToHash(vgeoid: string): string\n{\n // vgeoid is string of form: \"vfeature_[geoid]_[chunkid]_[hash]\"\n let re = /^vfeature_([^_]*)_([^_*])_(.*)$/;\n let a = re.exec(vgeoid);\n if (a && a.length == 4)\n vgeoid = a[3];\n else\n vgeoid = null;\n\n return vgeoid;\n}\n\nexport function isVfeature(geoid: string): boolean\n{\n return geoid.indexOf('B') === 0 || geoid.indexOf('vfeature') === 0;\n}\n\nexport function splitToCacheKey(s: SplitBlock): string\n{\n if (s.bitset)\n return null;\n if (s.id === undefined)\n s.id = vhash(s);\n if (s.chunk === undefined)\n s.chunk = \"0\";\n\n return `_${s.state}_${s.datasource}_vfeature_${s.geoid}_${s.chunk}_${s.id}.geojson`;\n}\n\nexport function cacheKeyToSplit(s: string): SplitBlock\n{\n let re = /^_(..)_(.*)_vfeature_([^_]+)_([^_]+)_([^_]+).geojson$/\n let a = re.exec(s);\n if (a == null) return null;\n // 0: whole string, 1: statecode, 2: datasource, 3: geoid, 4: chunk, 5: id hash\n return { id: a[5], state: a[1], datasource: a[2], geoid: a[3], chunk: a[4], blocks: null };\n}\n\nexport function splitToChunkKey(s: SplitBlock): string\n{\n if (s.chunk === undefined)\n s.chunk = \"0\";\n\n return `_${s.state}_${s.datasource}_vfeature_chunk_${s.chunk}.geojson`;\n}\n\nexport function splitToPrefix(s: SplitBlock): string\n{\n if (s.blocks === undefined)\n {\n let re = /_([^_]*)_(.*)_vfeature.*\\.geojson$/;\n let a = re.exec(s.id);\n if (a && a.length == 3)\n return `_${a[1]}_${a[2]}`;\n return s.id;\n }\n return `_${s.state}_${s.datasource}`;\n}\n\nexport function cacheKeysToChunkHash(keys: string[]): string\n{\n return vhash(keys);\n}\n","export type WorkQueueFailure = 'hard' | 'soft';\n\nexport interface WorkQueueItem\n{\n id: string,\n functionName: string,\n params: any,\n priority: number,\n failType?: WorkQueueFailure,\n}\n","module.exports = require(\"@dra2020/baseclient\");","module.exports = require(\"object-hash\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./lib/all.ts\");\n",""],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"dra-types.js","mappings":"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;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAC;AAEW,0BAAkB,GAAQ;IACrC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,E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AAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzH,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzH,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/H,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/H,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzH,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,S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","sources":["webpack://dra-types/webpack/universalModuleDefinition","webpack://dra-types/./lib/all.ts","webpack://dra-types/./lib/bucketmap.ts","webpack://dra-types/./lib/colordata.ts","webpack://dra-types/./lib/csv.ts","webpack://dra-types/./lib/dra-types.ts","webpack://dra-types/./lib/gencolor.ts","webpack://dra-types/./lib/groups.ts","webpack://dra-types/./lib/landmark.ts","webpack://dra-types/./lib/layer.ts","webpack://dra-types/./lib/packedfields.ts","webpack://dra-types/./lib/precincts.ts","webpack://dra-types/./lib/reverse.ts","webpack://dra-types/./lib/schemas.ts","webpack://dra-types/./lib/splittogeofeature.ts","webpack://dra-types/./lib/stateinfo.ts","webpack://dra-types/./lib/stats.ts","webpack://dra-types/./lib/vfeature.ts","webpack://dra-types/./lib/workqueue.ts","webpack://dra-types/external commonjs \"@dra2020/baseclient\"","webpack://dra-types/external commonjs \"object-hash\"","webpack://dra-types/webpack/bootstrap","webpack://dra-types/webpack/before-startup","webpack://dra-types/webpack/startup","webpack://dra-types/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dra-types\"] = factory();\n\telse\n\t\troot[\"dra-types\"] = factory();\n})(global, () => {\nreturn ","export * from './dra-types';\nexport * from './schemas';\nexport * from './bucketmap';\nexport * from './colordata';\nexport * from './gencolor';\nexport * from './vfeature';\nexport * from './csv';\nexport * from './stats';\nexport * from './layer';\nexport * from './stateinfo';\nexport * from './workqueue';\nexport * from './landmark';\nexport * from './splittogeofeature';\nexport * from './reverse';\nexport * from './groups';\nexport * from './precincts';\n","export const BucketMap: any =\n {\n 'default': 'dev-dra-us-west-2-723398989493',\n 'development': 'dev-dra-us-west-2-723398989493',\n 'production': 'dra-us-west-2-723398989493',\n 'state': 'dra-us-west-2-723398989493',\n 'state-dev': 'dev-dra-us-west-2-723398989493',\n 'logs': 'dra-uswest-logs',\n 'logs-dev': 'dra-uswest-logs',\n 'memsqs': 'dra-uswest-memsqs',\n 'memsqs-dev': 'dra-uswest-memsqs',\n 'images': 'dra-uswest-images',\n 'images-dev': 'dra-uswest-images',\n 'layers': 'dra-uswest-layers',\n 'layers-dev': 'dra-uswest-layers',\n 'data': 'dra-us-west-datafiles',\n 'data-dev': 'dra-us-west-datafiles-dev',\n 'splits': 'dra-block-cache',\n 'splits-dev': 'dra-block-cache-dev',\n 'counties': 'dra-county-cache',\n 'counties-dev': 'dra-county-cache-dev',\n 'geojson': 'dra-uswest-geojson',\n 'geojson-dev': 'dra-uswest-geojson',\n 'transfers': 'dra-transfers',\n 'transfers-dev': 'dra-transfers-dev',\n 'downloads': 'dra-uswest-downloads',\n 'downloads-dev': 'dra-uswest-downloads',\n 'editcache': 'dra-uswest-editcache',\n 'editcache-dev': 'dra-uswest-editcache-dev',\n }\n","export const DefaultColorNames: string[] = \r\n[\r\n'GhostWhite',\r\n'Blue',\r\n'Green',\r\n'DarkMagenta',\r\n'Red',\r\n'Gold',\r\n'Teal',\r\n'Chocolate', //'DarkGray', // \r\n'SlateBlue',\r\n'Cyan',\r\n'DeepPink',\r\n'Chartreuse',\r\n'CornflowerBlue',\r\n'DarkSalmon',\r\n'Olive',\r\n'DarkOrange',\r\n'Lime',\r\n'DarkSlateBlue',\r\n'Yellow',\r\n'YellowGreen',\r\n'Pink',\r\n'Maroon',\r\n'Sienna',\r\n'Aquamarine',\r\n'Indigo',\r\n'PaleVioletRed',\r\n'Navy', // 'Gray', // \r\n'SpringGreen',\r\n'Plum',\r\n'DarkSeaGreen',\r\n'LightCoral',\r\n'Khaki',\r\n'OrangeRed',\r\n'RoyalBlue',\r\n'LimeGreen',\r\n'DarkOrchid',\r\n'Orange',\r\n'DodgerBlue',\r\n'MediumAquamarine',\r\n'Moccasin',\r\n'Firebrick',\r\n'LightSteelBlue',\r\n'LawnGreen',\r\n'Magenta',\r\n'MediumVioletRed',\r\n'Turquoise',\r\n'Tomato',\r\n'Thistle',\r\n'SandyBrown',\r\n'IndianRed',\r\n'PowderBlue',\r\n'SaddleBrown',\r\n'OliveDrab',\r\n'Fuchsia', // 'Gainsboro', //\r\n'PeachPuff',\r\n'RosyBrown',\r\n];\r\n\r\nexport interface ColorLookup\r\n{\r\n [key: string]: string;\r\n}\r\n\r\nexport const ColorValues: ColorLookup =\r\n{\r\n 'AliceBlue': '#F0F8FF',\r\n 'AntiqueWhite': '#FAEBD7',\r\n 'Aqua': '#00FFFF',\r\n 'Aquamarine': '#7FFFD4',\r\n 'Azure': '#F0FFFF',\r\n 'Beige': '#F5F5DC',\r\n 'Bisque': '#FFE4C4',\r\n 'Black': '#000000',\r\n 'BlanchedAlmond': '#FFEBCD',\r\n 'Blue': '#0000FF',\r\n 'BlueViolet': '#8A2BE2',\r\n 'Brown': '#A52A2A',\r\n 'BurlyWood': '#DEB887',\r\n 'CadetBlue': '#5F9EA0',\r\n 'Chartreuse': '#7FFF00',\r\n 'Chocolate': '#D2691E',\r\n 'Coral': '#FF7F50',\r\n 'CornflowerBlue': '#6495ED',\r\n 'Cornsilk': '#FFF8DC',\r\n 'Crimson': '#DC143C',\r\n 'Cyan': '#00FFFF',\r\n 'DarkBlue': '#00008B',\r\n 'DarkCyan': '#008B8B',\r\n 'DarkGoldenrod': '#B8860B',\r\n 'DarkGray': '#A9A9A9',\r\n 'DarkGreen': '#006400',\r\n 'DarkKhaki': '#BDB76B',\r\n 'DarkMagenta': '#8B008B',\r\n 'DarkOliveGreen': '#556B2F',\r\n 'DarkOrange': '#FF8C00',\r\n 'DarkOrchid': '#9932CC',\r\n 'DarkRed': '#8B0000',\r\n 'DarkSalmon': '#E9967A',\r\n 'DarkSeaGreen': '#8FBC8F',\r\n 'DarkSlateBlue': '#483D8B',\r\n 'DarkSlateGray': '#2F4F4F',\r\n 'DarkTurquoise': '#00CED1',\r\n 'DarkViolet': '#9400D3',\r\n 'DeepPink': '#FF1493',\r\n 'DeepSkyBlue': '#00BFFF',\r\n 'DimGray': '#696969',\r\n 'DodgerBlue': '#1E90FF',\r\n 'Firebrick': '#B22222',\r\n 'FloralWhite': '#FFFAF0',\r\n 'ForestGreen': '#228B22',\r\n 'Fuchsia': '#FF00FF',\r\n 'Gainsboro': '#DCDCDC',\r\n 'GhostWhite': '#F8F8FF',\r\n 'Gold': '#FFD700',\r\n 'Goldenrod': '#DAA520',\r\n 'Gray': '#808080',\r\n 'Green': '#008000',\r\n 'GreenYellow': '#ADFF2F',\r\n 'Honeydew': '#F0FFF0',\r\n 'HotPink': '#FF69B4',\r\n 'IndianRed': '#CD5C5C',\r\n 'Indigo': '#4B0082',\r\n 'Ivory': '#FFFFF0',\r\n 'Khaki': '#F0E68C',\r\n 'Lavender': '#E6E6FA',\r\n 'LavenderBlush': '#FFF0F5',\r\n 'LawnGreen': '#7CFC00',\r\n 'LemonChiffon': '#FFFACD',\r\n 'LightBlue': '#ADD8E6',\r\n 'LightCoral': '#F08080',\r\n 'LightCyan': '#E0FFFF',\r\n 'LightGoldenrodYellow': '#FAFAD2',\r\n 'LightGray': '#D3D3D3',\r\n 'LightGreen': '#90EE90',\r\n 'LightPink': '#FFB6C1',\r\n 'LightSalmon': '#FFA07A',\r\n 'LightSeaGreen': '#20B2AA',\r\n 'LightSkyBlue': '#87CEFA',\r\n 'LightSlateGray': '#778899',\r\n 'LightSteelBlue': '#B0C4DE',\r\n 'LightYellow': '#FFFFE0',\r\n 'Lime': '#00FF00',\r\n 'LimeGreen': '#32CD32',\r\n 'Linen': '#FAF0E6',\r\n 'Magenta': '#FF00FF',\r\n 'Maroon': '#800000',\r\n 'MediumAquamarine': '#66CDAA',\r\n 'MediumBlue': '#0000CD',\r\n 'MediumOrchid': '#BA55D3',\r\n 'MediumPurple': '#9370DB',\r\n 'MediumSeaGreen': '#3CB371',\r\n 'MediumSlateBlue': '#7B68EE',\r\n 'MediumSpringGreen': '#00FA9A',\r\n 'MediumTurquoise': '#48D1CC',\r\n 'MediumVioletRed': '#C71585',\r\n 'MidnightBlue': '#191970',\r\n 'MintCream': '#F5FFFA',\r\n 'MistyRose': '#FFE4E1',\r\n 'Moccasin': '#FFE4B5',\r\n 'NavajoWhite': '#FFDEAD',\r\n 'Navy': '#000080',\r\n 'OldLace': '#FDF5E6',\r\n 'Olive': '#808000',\r\n 'OliveDrab': '#6B8E23',\r\n 'Orange': '#FFA500',\r\n 'OrangeRed': '#FF4500',\r\n 'Orchid': '#DA70D6',\r\n 'PaleGoldenrod': '#EEE8AA',\r\n 'PaleGreen': '#98FB98',\r\n 'PaleTurquoise': '#AFEEEE',\r\n 'PaleVioletRed': '#DB7093',\r\n 'PapayaWhip': '#FFEFD5',\r\n 'PeachPuff': '#FFDAB9',\r\n 'Peru': '#CD853F',\r\n 'Pink': '#FFC0CB',\r\n 'Plum': '#DDA0DD',\r\n 'PowderBlue': '#B0E0E6',\r\n 'Purple': '#800080',\r\n 'Red': '#FF0000',\r\n 'RosyBrown': '#BC8F8F',\r\n 'RoyalBlue': '#4169E1',\r\n 'SaddleBrown': '#8B4513',\r\n 'Salmon': '#FA8072',\r\n 'SandyBrown': '#F4A460',\r\n 'SeaGreen': '#2E8B57',\r\n 'SeaShell': '#FFF5EE',\r\n 'Sienna': '#A0522D',\r\n 'Silver': '#C0C0C0',\r\n 'SkyBlue': '#87CEEB',\r\n 'SlateBlue': '#6A5ACD',\r\n 'SlateGray': '#708090',\r\n 'Snow': '#FFFAFA',\r\n 'SpringGreen': '#00FF7F',\r\n 'SteelBlue': '#4682B4',\r\n 'Tan': '#D2B48C',\r\n 'Teal': '#008080',\r\n 'Thistle': '#D8BFD8',\r\n 'Tomato': '#FF6347',\r\n 'Turquoise': '#40E0D0',\r\n 'Violet': '#EE82EE',\r\n 'Wheat': '#F5DEB3',\r\n 'White': '#FFFFFF',\r\n 'WhiteSmoke': '#F5F5F5',\r\n 'Yellow': '#FFFF00',\r\n 'YellowGreen': '#9ACD32',\r\n};\r\n\r\nexport const ColorBySolidWhite = 0;\r\nexport const ColorBySolidBlack = 1;\r\nexport const ColorBySolidHispanic = 2;\r\nexport const ColorBySolidAsian = 3;\r\nexport const ColorByMostlyWhite = 4;\r\nexport const ColorByMostlyBlack = 5;\r\nexport const ColorByMostlyHispanic = 6;\r\nexport const ColorByMostlyAsian = 7;\r\nexport const ColorByMostlyNative = 8;\r\nexport const ColorByMix = 9;\r\nexport const ColorByHispanicWhite = 10;\r\nexport const ColorByBlackWhite = 11;\r\nexport const ColorByHispanicBlack = 12;\r\nexport const ColorByAsianWhite = 13;\r\nexport const ColorByAsianHispanic = 14;\r\nexport const ColorByBlackAsian = 15;\r\n\r\nexport const EthnicBackgroundColor: string[] = [\r\n '#c0392b', // solid white\r\n '#3498db', // solid black\r\n '#2ecc71', // solid hispanic\r\n '#9b59b6', // solid asian\r\n '#d98880', // mostly white\r\n '#aed6f1', // mostly black\r\n '#abebc6', // mostly hispanic\r\n '#bb8fce', // mostly asian\r\n '#f1c40f', // mostly native\r\n '#aab7b8', // mix\r\n '#d5f5e3', // hispanic / white\r\n '#d6eaf8', // black / white\r\n '#186a3b', // hispanic / black\r\n '#e8daef', // asian / white\r\n '#45b39d', // asian / hispanic\r\n '#4a235a', // black / asian\r\n ];\r\nexport const EthnicTextColor: string[] = [\r\n '#ffffff',\r\n '#ffffff',\r\n '#ffffff',\r\n '#ffffff',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#000000',\r\n '#ffffff',\r\n '#000000',\r\n '#000000',\r\n '#ffffff',\r\n ];\r\nexport const EthnicLabel: string[] = [\r\n 'Solid White',\r\n 'Solid Black',\r\n 'Solid Hispanic',\r\n 'Solid Asian',\r\n 'Mostly White',\r\n 'Mostly Black',\r\n 'Mostly Hispanic',\r\n 'Mostly Asian',\r\n 'Mostly Native',\r\n 'Mixed',\r\n 'Hispanic / White Mix',\r\n 'Black / White Mix',\r\n 'Hispanic / Black Mix',\r\n 'Asian / White Mix',\r\n 'Asian / Hispanic Mix',\r\n 'Black / Asian Mix'\r\n ];\r\n\r\nexport const ColorByGreatR = 0;\r\nexport const ColorByGoodR = 1;\r\nexport const ColorByFairR = 2;\r\nexport const ColorByEven = 3;\r\nexport const ColorByFairD = 4;\r\nexport const ColorByGoodD = 5;\r\nexport const ColorByGreatD = 6;\r\n\r\nexport const ElectionBackgroundColor: string[] = [\r\n '#CF0000', // greatR\r\n '#FF4555', // goodR\r\n '#FFB0CB', // fairR\r\n '#9932CC', // even\r\n '#87CEEB', // fairD\r\n '#1E90FF', // goodD\r\n '#0000CF', // greatD\r\n];\r\n\r\nexport const ElectionTextColor: string[] = [\r\n '#ffffff',\r\n '#000000',\r\n '#000000',\r\n '#ffffff',\r\n '#000000',\r\n '#000000',\r\n '#ffffff',\r\n];\r\nexport const ElectionLabel: string[] = [\r\n 'Great Republican',\r\n 'Good Republican',\r\n 'Fair Republican',\r\n 'Even',\r\n 'Fair Democrat',\r\n 'Good Democrat',\r\n 'Great Democrat'\r\n ];\r\n\r\nconst lum: number[] = [0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 255];\r\nexport let IntensityBackgroundColor: string[] = [];\r\nlum.forEach((n: number) => { IntensityBackgroundColor.push(`rgba(${n}, ${n}, ${n}, 1.0)`) } );\r\n","// Public libraries\nimport { Util, CSV, G } from '@dra2020/baseclient';\n\n// Local library\nimport * as VF from './vfeature';\n\n// Used internally to index into District Properties Array\nexport type BlockMap = { [id: string]: number };\n\n// Used more generically and allows string districtIDs\nexport type BlockMapping = { [id: string]: string };\n\nexport type RevBlockMapping = { [id: string]: string[] };\n\n// Alternate block mapping (only supports <1 std>: <Many alt>)\nexport type AltBlockMapping = { [blockid: string]: {[blockid: string]: number} }; // {stdblock: {altblock1: pop1, altblock2: pop2, ...}}\n\nlet reNumeric = /^(\\D*)(\\d*)(\\D*)$/;\nlet reDistrictNumber = /^\\d+$/;\nlet reDistrictNumeric = /^\\d/;\n\n// Normalize any numeric part to have no padded leading zeros\nexport function canonicalDistrictID(districtID: string): string\n{\n let a = reNumeric.exec(districtID);\n if (a && a.length == 4)\n {\n if (a[2].length > 0)\n a[2] = String(Number(a[2]));\n districtID = `${a[1]}${a[2]}${a[3]}`;\n }\n return districtID;\n}\n\nfunction reverseSubMapping(mbm: G.MultiBlockMapping, n: number): G.ReverseBlockMapping\n{\n let rev: any = {};\n\n mbm.forEach(blockid => {\n let geoid = blockid.substr(0, n);\n if (! rev[geoid]) rev[geoid] = [];\n rev[geoid].push(blockid);\n });\n return rev;\n}\n\nfunction reverseBlockgroupMapping(mbm: G.MultiBlockMapping): G.ReverseBlockMapping\n{\n return reverseSubMapping(mbm, 12);\n}\n\n// Normalize any numeric part to have four digits with padded leading zeros\n// so alphabetic sorting will result in correct numeric sort for mixed alphanumber\n// district labels.\nexport function canonicalSortingDistrictID(districtID: string): string\n{\n let a = reNumeric.exec(districtID);\n if (a && a.length == 4)\n {\n let s = a[2];\n if (s.length > 0)\n {\n switch (s.length)\n {\n case 1: s = `000${s}`; break;\n case 2: s = `00${s}`; break;\n case 3: s = `0${s}`; break;\n }\n a[2] = s;\n }\n districtID = `${a[1]}${a[2]}${a[3]}`;\n }\n return districtID;\n}\n\n// Return numeric part of districtID (or -1 if there is none)\nexport function canonicalNumericFromDistrictID(districtID: string): number\n{\n let a = reNumeric.exec(districtID);\n if (a && a.length == 4)\n {\n let s = a[2];\n if (s.length > 0)\n return Number(s);\n }\n return -1;\n}\n\nexport function canonicalDistrictIDFromNumber(districtID: string, n: number): string\n{\n let a = reNumeric.exec(districtID);\n if (a && a.length == 4)\n {\n a[2] = String(n);\n districtID = `${a[1]}${a[2]}${a[3]}`;\n }\n else\n districtID = String(n);\n return districtID;\n}\n\n// Numbers start at 1\nexport type DistrictOrder = { [districtID: string]: number };\n\n// If purely numeric districtIDs and we are missing some number of IDs less than\nexport function canonicalDistrictIDGapFill(keys: string[]): string[]\n{\n if (keys == null || keys.length == 0) return keys;\n let nonNumeric = keys.find((s: string) => !reDistrictNumber.test(s)) !== undefined;\n if (nonNumeric) return keys;\n let max = Number(keys[keys.length-1]);\n if (max == keys.length || (max - keys.length) > keys.length) return keys; // no gaps or too many gaps\n\n // OK, finally going to fill some gaps\n for (let i: number = 0; i < keys.length; i++)\n {\n let here = Number(keys[i]);\n while (here > i+1)\n {\n keys.splice(i, 0, canonicalSortingDistrictID(String(i+1)));\n i++;\n }\n }\n\n return keys;\n}\n\nexport function canonicalDistrictIDOrdering(order: DistrictOrder): DistrictOrder\n{\n let keys = Object.keys(order);\n let i: number;\n let a: any = [];\n let template: string = undefined;\n\n keys = keys.map((s: string) => canonicalSortingDistrictID(s));\n\n // Let's omit this. Some official maps have odd numbering schemes and we don't\n // want to generate anomalous spurious extra districts.\n //keys = canonicalDistrictIDGapFill(keys);\n\n keys.sort();\n order = {};\n for (i = 0; i < keys.length; i++)\n order[canonicalDistrictID(keys[i])] = i+1;\n\n // Remove water districts\n if (order['ZZZ']) delete order['ZZZ'];\n if (order['ZZ']) delete order['ZZ'];\n\n return order;\n}\n\nexport interface OneCSVLine\n{\n geoid: string;\n districtID: string;\n}\n\nlet reArray = [\n // comma-delimited\n /^(\\d\\d[^\\s,']*)[\\s]*,[\\s]*([^\\s']+)[\\s]*$/,\n /^(\\d\\d[^\\s,\"]*)[\\s]*,[\\s]*([^\\s\"]+)[\\s]*$/,\n /^['](\\d\\d[^']*)['][\\s]*,[\\s]*[']([^']*)['][\\s]*$/,\n /^[\"](\\d\\d[^\"]*)[\"][\\s]*,[\\s]*[\"]([^\"]*)[\"][\\s]*$/,\n /^(\\d\\d[^\\s,]*)[\\s]*,[\\s]*[']([^']*)['][\\s]*$/,\n /^(\\d\\d[^\\s,]*)[\\s]*,[\\s]*[\"]([^\"]*)[\"][\\s]*$/,\n /^['](\\d\\d[^']*)['][\\s]*,[\\s]*([^\\s]+)[\\s]*$/,\n /^[\"](\\d\\d[^\"]*)[\"][\\s]*,[\\s]*([^\\s]+)[\\s]*$/,\n\n // pipe-delimited, new 2020 Census Bureau format\n /^(\\d\\d[^\\s\\|']*)[\\s]*\\|[\\s]*([^\\s']+)[\\s]*$/,\n /^(\\d\\d[^\\s\\|\"]*)[\\s]*\\|[\\s]*([^\\s\"]+)[\\s]*$/,\n /^['](\\d\\d[^']*)['][\\s]*\\|[\\s]*[']([^']*)['][\\s]*$/,\n /^[\"](\\d\\d[^\"]*)[\"][\\s]*\\|[\\s]*[\"]([^\"]*)[\"][\\s]*$/,\n /^(\\d\\d[^\\s\\|]*)[\\s]*\\|[\\s]*[']([^']*)['][\\s]*$/,\n /^(\\d\\d[^\\s\\|]*)[\\s]*\\|[\\s]*[\"]([^\"]*)[\"][\\s]*$/,\n /^['](\\d\\d[^']*)['][\\s]*\\|[\\s]*([^\\s]+)[\\s]*$/,\n /^[\"](\\d\\d[^\"]*)[\"][\\s]*\\|[\\s]*([^\\s]+)[\\s]*$/,\n ];\nlet reStart = 0; // last successful regex\n\nexport function parseCSVLine(line: string): OneCSVLine\n{\n if (line == null || line == '') return null;\n\n // start at last successful parse so we don't have to\n // iterate through all the regex's for each line.\n for (let i = reStart; i < reArray.length; i++)\n {\n let a = reArray[i].exec(line);\n if (a && a.length === 3)\n {\n reStart = i;\n return { geoid: a[1], districtID: a[2] };\n }\n }\n for (let i = 0; i < reStart; i++)\n {\n let a = reArray[i].exec(line);\n if (a && a.length === 3)\n {\n reStart = i;\n return { geoid: a[1], districtID: a[2] };\n }\n }\n return null;\n}\n\nexport function csvLine(coder: Util.Coder, line: string): OneCSVLine\n{\n if (!coder || !line) return null;\n let parse = new CSV.ParseOne(coder, line);\n if (parse.length != 2) return null;\n let re = /^\\d\\d/;\n if (!re.exec(parse.fields[0])) return null;\n return { geoid: parse.fields[0], districtID: parse.fields[1] };\n}\n\nexport interface ConvertResult\n{\n inBlockMap: BlockMapping;\n inMbm: G.MultiBlockMapping;\n outMbm: G.MultiBlockMapping;\n outValid: boolean;\n outState: string;\n outMap: BlockMapping;\n outOrder: DistrictOrder;\n outDistrictToSplit: VF.DistrictToSplitBlock;\n nFeatures: number;\n nSplitFromFeatures: number;\n nSplitToFeatures: number;\n nBlocks: number;\n nSplitBlocks: number;\n}\n\nexport function blockmapToState(blockMap: BlockMapping): string\n{\n for (var id in blockMap) if (blockMap.hasOwnProperty(id))\n return geoidToState(id);\n return null;\n}\n\nexport function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMapping, altBlocks: AltBlockMapping): ConvertResult\n{\n return blockmapToVTDmapCustom(blockMap, mbm, mbm, altBlocks);\n}\n\n// blockToVTD:\n// Take BlockMapping (simple map of GEOID to districtID) and a per-state map of block-level GEOID to VTD\n// and return the output mapping of VTD to districtID, as well a data structure that describes any VTD's\n// that need to be split between districtIDs. Also returns the DistrictOrder structure that defines the\n// districtIDs that were used by the file.\n//\n// The state (as specified by the first two digits of the GEOID) is also determined. If the GEOID's do\n// not all specify the same state, the mapping is considered invalid and the outValid flag is set to false.\n//\n\nexport function blockmapToVTDmapCustom(\n blockMap: BlockMapping,\n inMbm: G.MultiBlockMapping,\n outMbm: G.MultiBlockMapping,\n altBlocks: AltBlockMapping): ConvertResult\n{\n let res: ConvertResult = {\n inBlockMap: blockMap,\n inMbm: inMbm,\n outMbm: outMbm,\n outValid: true,\n outState: null,\n outMap: {},\n outOrder: {},\n outDistrictToSplit: {},\n nFeatures: 0,\n nSplitFromFeatures: 0,\n nSplitToFeatures: 0,\n nBlocks: 0,\n nSplitBlocks: 0,\n };\n\n let bmGather: { [geoid: string]: { [district: string]: { [blockid: string]: boolean } } } = {};\n\n let revBG: RevBlockMapping; // lazy create on demand\n\n function isBlockID(b: string): boolean { return b.length >= 15 && (!inMbm || !!inMbm.map(b)) }\n\n if (altBlocks)\n {\n // Create reverse of altBlocks if they exist {altBlockid: {stdBlockid, pop}, ...}\n let revAltBlocks: {[altBlockid: string]: {blockid: string, pop: number}} = {};\n Object.keys(altBlocks).forEach(blockid =>\n {\n Object.keys(altBlocks[blockid]).forEach(altBlockid =>\n {\n revAltBlocks[altBlockid] = {blockid: blockid, pop: altBlocks[blockid][altBlockid]}\n })\n });\n // Now walk input and build new blockMap with altBlocks replaced with stdBlocks\n let blockMapP: BlockMapping = {};\n let bestAlt: {[blockid: string]: {dist: string, pop: number}} = {};\n for (var id in blockMap) if (blockMap.hasOwnProperty(id))\n {\n let n: number = id.length;\n if (isBlockID(id) && revAltBlocks[id])\n {\n if (!bestAlt[revAltBlocks[id].blockid] || bestAlt[revAltBlocks[id].blockid].pop < revAltBlocks[id].pop)\n {\n bestAlt[revAltBlocks[id].blockid] = {dist: blockMap[id], pop: revAltBlocks[id].pop};\n blockMapP[revAltBlocks[id].blockid] = blockMap[id];\n }\n }\n else\n {\n blockMapP[id] = blockMap[id];\n }\n }\n blockMap = blockMapP;\n }\n\n // First aggregate into features across all the blocks\n for (var id in blockMap) if (blockMap.hasOwnProperty(id))\n {\n let state = geoidToState(id);\n if (res.outState == null)\n res.outState = state;\n else if (res.outState !== state)\n {\n res.outValid = false;\n break;\n }\n\n let districtID: string = canonicalDistrictID(blockMap[id]);\n\n // Just ignore ZZZ (water) blocks\n if (districtID === 'ZZZ')\n continue;\n\n if (res.outOrder[districtID] === undefined)\n res.outOrder[districtID] = 0;\n\n let n: number = id.length;\n let geoids: string[];\n let ids: string[];\n res.nBlocks++;\n\n // Simple test for block id (vs. voting district or block group) id\n // Also skip longer custom precinct ids\n if (isBlockID(id))\n {\n ids = [id];\n if (outMbm && outMbm.map(id) !== undefined)\n geoids = [outMbm.map(id)];\n else\n {\n geoids = [id.substr(0, 12)];\n if (outMbm && !outMbm.rev(geoids[0]))\n {\n res.outValid = false;\n break;\n }\n }\n }\n else if (n == 12)\n {\n if (!revBG) revBG = reverseBlockgroupMapping(outMbm);\n if (revBG[id])\n {\n ids = revBG[id];\n geoids = ids.map(id => outMbm.map(id));\n }\n else\n {\n ids = [id];\n geoids = [id];\n }\n }\n else if (inMbm.rev(id))\n {\n // Map down to blockids and then back up to geoids to handle both custom and default geoids\n ids = inMbm.rev(id);\n geoids = ids.map(blockid => outMbm.map(blockid));\n }\n else\n {\n ids = [id];\n geoids = [id];\n }\n\n ids.forEach((id: string, i: number) => {\n let geoid = geoids[i];\n let districtToBlocks: { [districtID: string]: { [blockid: string]: boolean } } = bmGather[geoid];\n if (districtToBlocks === undefined)\n bmGather[geoid] = { [districtID]: { [id]: true } };\n else\n {\n let thisDistrict: { [blockid: string]: boolean } = districtToBlocks[districtID];\n if (thisDistrict === undefined)\n {\n thisDistrict = { };\n districtToBlocks[districtID] = thisDistrict;\n }\n thisDistrict[id] = true;\n }\n });\n }\n\n // Now determine actual mapping of blocks to features, looking for split features\n for (let geoid in bmGather) if (bmGather.hasOwnProperty(geoid))\n {\n let districtToBlocks = bmGather[geoid];\n let bWhole = false;\n if (Util.countKeys(districtToBlocks) == 1)\n {\n let blocks = Object.keys(districtToBlocks[Util.nthKey(districtToBlocks)]);\n if (blocks[0] === geoid || (outMbm.rev(geoid) && blocks.length === outMbm.rev(geoid).length))\n bWhole = true;\n }\n if (bWhole)\n {\n res.outMap[geoid] = Util.nthKey(districtToBlocks);\n res.nFeatures++;\n }\n else\n {\n for (let districtID in districtToBlocks) if (districtToBlocks.hasOwnProperty(districtID))\n {\n let split: VF.SplitBlock = { state: '', datasource: '', geoid: geoid, blocks: Object.keys(districtToBlocks[districtID]) };\n res.nSplitBlocks += split.blocks.length;\n let splits = res.outDistrictToSplit[districtID];\n if (splits === undefined)\n {\n splits = [];\n res.outDistrictToSplit[districtID] = splits;\n }\n splits.push(split);\n res.nFeatures++;\n res.nSplitToFeatures++;\n }\n res.nSplitFromFeatures++;\n }\n }\n\n res.outOrder = canonicalDistrictIDOrdering(res.outOrder);\n\n return res;\n}\n\nexport const StateIdToStateCode: any = {\n '01': 'AL',\n '02': 'AK',\n '04': 'AZ',\n '05': 'AR',\n '06': 'CA',\n '08': 'CO',\n '09': 'CT',\n '10': 'DE',\n '11': 'DC',\n '12': 'FL',\n '13': 'GA',\n '15': 'HI',\n '16': 'ID',\n '17': 'IL',\n '18': 'IN',\n '19': 'IA',\n '20': 'KS',\n '21': 'KY',\n '22': 'LA',\n '23': 'ME',\n '24': 'MD',\n '25': 'MA',\n '26': 'MI',\n '27': 'MN',\n '28': 'MS',\n '29': 'MO',\n '30': 'MT',\n '31': 'NE',\n '32': 'NV',\n '33': 'NH',\n '34': 'NJ',\n '35': 'NM',\n '36': 'NY',\n '37': 'NC',\n '38': 'ND',\n '39': 'OH',\n '40': 'OK',\n '41': 'OR',\n '42': 'PA',\n '44': 'RI',\n '45': 'SC',\n '46': 'SD',\n '47': 'TN',\n '48': 'TX',\n '49': 'UT',\n '50': 'VT',\n '51': 'VA',\n '53': 'WA',\n '54': 'WV',\n '55': 'WI',\n '56': 'WY',\n '72': 'PR',\n};\n\nexport const StateCodeToStateId: any = {\n 'AL': '01',\n 'AK': '02',\n 'AZ': '04',\n 'AR': '05',\n 'CA': '06',\n 'CO': '08',\n 'CT': '09',\n 'DE': '10',\n 'DC': '11',\n 'FL': '12',\n 'GA': '13',\n 'HI': '15',\n 'ID': '16',\n 'IL': '17',\n 'IN': '18',\n 'IA': '19',\n 'KS': '20',\n 'KY': '21',\n 'LA': '22',\n 'ME': '23',\n 'MD': '24',\n 'MA': '25',\n 'MI': '26',\n 'MN': '27',\n 'MS': '28',\n 'MO': '29',\n 'MT': '30',\n 'NE': '31',\n 'NV': '32',\n 'NH': '33',\n 'NJ': '34',\n 'NM': '35',\n 'NY': '36',\n 'NC': '37',\n 'ND': '38',\n 'OH': '39',\n 'OK': '40',\n 'OR': '41',\n 'PA': '42',\n 'RI': '44',\n 'SC': '45',\n 'SD': '46',\n 'TN': '47',\n 'TX': '48',\n 'UT': '49',\n 'VT': '50',\n 'VA': '51',\n 'WA': '53',\n 'WV': '54',\n 'WI': '55',\n 'WY': '56',\n 'PR': '72',\n};\n\nexport function geoidToState(geoid: string): string\n{\n let re = /^(..).*$/;\n\n let a = re.exec(geoid);\n if (a == null || a.length != 2) return null;\n return StateIdToStateCode[a[1]];\n}\n\nexport type StateUrls = (\n 'alabama' |\n 'alaska' |\n 'arizona' |\n 'arkansas' |\n 'california' |\n 'colorado' |\n 'connecticut' |\n 'delaware' |\n 'district-of-columbia' |\n 'florida' |\n 'georgia' |\n 'hawaii' |\n 'idaho' |\n 'illinois' |\n 'indiana' |\n 'iowa' |\n 'kansas' |\n 'kentucky' |\n 'louisiana' |\n 'maine' |\n 'maryland' |\n 'massachusetts' |\n 'michigan' |\n 'minnesota' |\n 'mississippi' |\n 'missouri' |\n 'montana' |\n 'nebraska' |\n 'nevada' |\n 'new-hampshire' |\n 'new-jersey' |\n 'new-mexico' |\n 'new-york' |\n 'north-carolina' |\n 'north-dakota' |\n 'ohio' |\n 'oklahoma' |\n 'oregon' |\n 'pennsylvania' |\n 'rhode-island' |\n 'south-carolina' |\n 'south-dakota' |\n 'tennessee' |\n 'texas' |\n 'utah' |\n 'vermont' |\n 'virginia' |\n 'washington' |\n 'west-virginia' |\n 'wisconsin' |\n 'wyoming' |\n 'puerto-rico'\n);\n\nexport type ValidStateNamesForUrlType =\n{\n readonly [stateUrl in StateUrls]: boolean;\n};\n\nconst ValidStateNamesForUrl: ValidStateNamesForUrlType = {\n 'alabama': true,\n 'alaska': true,\n 'arizona': true,\n 'arkansas': true,\n 'california': true,\n 'colorado': true,\n 'connecticut': true,\n 'delaware': true,\n 'district-of-columbia': true,\n 'florida': true,\n 'georgia': true,\n 'hawaii': true,\n 'idaho': true,\n 'illinois': true,\n 'indiana': true,\n 'iowa': true,\n 'kansas': true,\n 'kentucky': true,\n 'louisiana': true,\n 'maine': true,\n 'maryland': true,\n 'massachusetts': true,\n 'michigan': true,\n 'minnesota': true,\n 'mississippi': true,\n 'missouri': true,\n 'montana': true,\n 'nebraska': true,\n 'nevada': true,\n 'new-hampshire': true,\n 'new-jersey': true,\n 'new-mexico': true,\n 'new-york': true,\n 'north-carolina': true,\n 'north-dakota': true,\n 'ohio': true,\n 'oklahoma': true,\n 'oregon': true,\n 'pennsylvania': true,\n 'rhode-island': true,\n 'south-carolina': true,\n 'south-dakota': true,\n 'tennessee': true,\n 'texas': true,\n 'utah': true,\n 'vermont': true,\n 'virginia': true,\n 'washington': true,\n 'west-virginia': true,\n 'wisconsin': true,\n 'wyoming': true,\n 'puerto-rico': true,\n};\n\nexport function isValidStateNameForUrl(s: any): s is StateUrls\n{\n return (typeof s === 'string' && s in ValidStateNamesForUrl);\n}\n\n// StateCodes in state name alphabetically order\nexport const StateCodesOrdered: string[] = [\n \"AL\",\n \"AK\",\n \"AZ\",\n \"AR\",\n \"CA\",\n \"CO\",\n \"CT\",\n \"DE\",\n \"DC\",\n \"FL\",\n \"GA\",\n \"HI\",\n \"ID\",\n \"IL\",\n \"IN\",\n \"IA\",\n \"KS\",\n \"KY\",\n \"LA\",\n \"ME\",\n \"MD\",\n \"MA\",\n \"MI\",\n \"MN\",\n \"MS\",\n \"MO\",\n \"MT\",\n \"NE\",\n \"NV\",\n \"NH\",\n \"NJ\",\n \"NM\",\n \"NY\",\n \"NC\",\n \"ND\",\n \"OH\",\n \"OK\",\n \"OR\",\n \"PA\",\n \"RI\",\n \"SC\",\n \"SD\",\n \"TN\",\n \"TX\",\n \"UT\",\n \"VT\",\n \"VA\",\n \"WA\",\n \"WV\",\n \"WI\",\n \"WY\",\n \"PR\",\n];\n\nexport const StateNameMap : {[key: string] : string} = {\n \"AL\": \"Alabama\",\n \"AK\": \"Alaska\",\n \"AZ\": \"Arizona\",\n \"AR\": \"Arkansas\",\n \"CA\": \"California\",\n \"CO\": \"Colorado\",\n \"CT\": \"Connecticut\",\n \"DE\": \"Delaware\",\n \"FL\": \"Florida\",\n \"GA\": \"Georgia\",\n \"HI\": \"Hawaii\",\n \"ID\": \"Idaho\",\n \"IL\": \"Illinois\",\n \"IN\": \"Indiana\",\n \"IA\": \"Iowa\",\n \"KS\": \"Kansas\",\n \"KY\": \"Kentucky\",\n \"LA\": \"Louisiana\",\n \"ME\": \"Maine\",\n \"MD\": \"Maryland\",\n \"MA\": \"Massachusetts\",\n \"MI\": \"Michigan\",\n \"MN\": \"Minnesota\",\n \"MS\": \"Mississippi\",\n \"MO\": \"Missouri\",\n \"MT\": \"Montana\",\n \"NE\": \"Nebraska\",\n \"NV\": \"Nevada\",\n \"NH\": \"New Hampshire\",\n \"NJ\": \"New Jersey\",\n \"NM\": \"New Mexico\",\n \"NY\": \"New York\",\n \"NC\": \"North Carolina\",\n \"ND\": \"North Dakota\",\n \"OH\": \"Ohio\",\n \"OK\": \"Oklahoma\",\n \"OR\": \"Oregon\",\n \"PA\": \"Pennsylvania\",\n \"RI\": \"Rhode Island\",\n \"SC\": \"South Carolina\",\n \"SD\": \"South Dakota\",\n \"TN\": \"Tennessee\",\n \"TX\": \"Texas\",\n \"UT\": \"Utah\",\n \"VT\": \"Vermont\",\n \"VA\": \"Virginia\",\n \"WA\": \"Washington\",\n \"WV\": \"West Virginia\",\n \"WI\": \"Wisconsin\",\n \"WY\": \"Wyoming\",\n \"DC\": \"District of Columbia\",\n \"PR\": \"Puerto Rico\",\n};\n","// Type for single comment\nexport interface Comment\n{\n userid: string;\n text: string;\n date: string;\n recommend: number;\n}\n\n// Comment record associated with a map\nexport interface CommentList\n{\n id?: string;\n [commentid: string]: Comment | string; // Really just Comment but make TypeScript happy\n}\n\n// Supported like kinds\nexport type LikeKind = 'like' | 'love' | 'wow' | 'angry' | 'funny';\n\n// Like record for an individual like\nexport interface Like\n{\n date: string;\n kind: LikeKind;\n}\n\n// Record for likes associated with a map\nexport interface LikeList\n{\n id?: string;\n [userid: string]: Like | string; // Really just Like but make TypeScript happy\n}\n\n// Record for likes an individual user has performed\nexport interface UserLikes\n{\n id?: string;\n [aid: string]: Like | string; // Really just Like but make TypeScript happy\n}\n\n// Type of redistricting plan (Note: 'upper' is used when there is only 1 legislative map or body)\n// congress, upper, lower and other => the plan is for entire state\n// county and city => plan is for a single county or city within a state\nexport type PlanType = 'congress' | 'upper' | 'lower' | 'county' | 'city' | 'coi' | 'other';\n","import * as ColorData from \"./colordata\";\n\nlet ColorTable: string[] = null;\nconst MaxColors: number = 100;\n\nexport function genColor(i: number, useFirstColor: boolean): string\n{\n // i is district number, 0 => District[0] (unassigned), so subtract 1 to access ColorTable\n function gen_table(): void\n {\n ColorTable = [];\n for (let i: number = 0; i < MaxColors; i++)\n {\n // A little funky math below to skip the first (white) color\n let j = (i % (ColorData.DefaultColorNames.length - 1)) + 1;\n ColorTable.push(ColorData.ColorValues[ColorData.DefaultColorNames[j]]);\n }\n }\n\n if (ColorTable == null)\n gen_table();\n \n if (i == 0)\n return ColorData.ColorValues[ColorData.DefaultColorNames[0]];\n return ColorTable[((i - 1) + (useFirstColor ? 0 : 1)) % MaxColors];\n}\n","export interface Group\n{\n id: string,\n name: string,\n description: string,\n}\n\nexport const GROUP_OWNER = 1;\nexport const GROUP_VERIFIED = 2;\nexport const GROUP_SEEN = 4;\nexport const GROUP_REMOVED = 8;\nexport const GROUP_BLOCKED = 16;\nexport const GROUP_ADMIN = 32;\n\nexport function hideGroup(flags: number): boolean\n{\n return (flags & (GROUP_REMOVED|GROUP_BLOCKED)) != 0;\n}\n\nexport function adminGroup(flags: number): boolean\n{\n return (flags & (GROUP_ADMIN|GROUP_OWNER)) != 0;\n}\n\nexport interface GroupUser\n{\n id: string,\n uid: string,\n flags: number,\n}\n\nexport interface GroupMap\n{\n id: string, // group id\n sid: string, // map (session) id\n permission: number, // permissions (read or readwrite)\n}\n\nexport type GroupUserIndex = { [groupid: string]: number }; // GroupUser flags\nexport type GroupMapIndex = { [groupid: string]: number }; // GroupMap permission\nexport type GroupIndex = { [groupid: string]: Group };\n","import { Util, G } from '@dra2020/baseclient';\n\nexport interface Landmark\n{\n id: string,\n name: string,\n description: string,\n coord: [number, number],\n}\n\nexport type Landmarks = { [id: string]: Landmark };\n\nexport function landmarksToCollection(landmarks: Landmarks): G.GeoFeatureCollection\n{\n if (landmarks == null) return null;\n\n let col: G.GeoFeatureCollection = { type: 'FeatureCollection', features: [] };\n Object.values(landmarks).forEach(l => {\n let f: G.GeoFeature = {\n type: 'Feature',\n properties: {\n id: l.id,\n name: l.name,\n description: l.description,\n },\n geometry: {\n type: 'Point',\n coordinates: l.coord,\n },\n };\n col.features.push(f);\n });\n return col;\n}\n\nexport function collectionToLandmarks(col: G.GeoFeatureCollection): Landmarks\n{\n let landmarks: Landmarks = {};\n if (col && col.features) col.features.forEach((f: G.GeoFeature) => {\n if (f.geometry.type === 'Point')\n {\n let c: any = f.geometry.coordinates;\n if (Array.isArray(c) && typeof c[0] === 'number' && typeof c[1] === 'number')\n {\n let landmark: Landmark = {\n id: Util.createGuid(),\n name: G.flexName(f),\n description: f.properties.description || '',\n coord: [c[0], c[1]],\n };\n landmarks[landmark.id] = landmark;\n }\n }\n });\n return landmarks;\n}\n","export interface UserLayerMeta\n{\n createdBy: string,\n id: string,\n name?: string,\n description?: string,\n state?: string,\n createTime?: string,\n modifyTime?: string,\n deleted?: boolean,\n published?: string,\n official?: boolean\n}\n\nexport type UserLayerMetaIndex = {\n [id: string]: UserLayerMeta\n}\n\nexport type LayerType = 'layer' | 'map' | 'restriction' | 'precincts';\n\nexport interface UserLayerRef\n{\n id: string,\n name?: string,\n layerType?: LayerType,\n geojsonName?: string,\n blockmapName?: string,\n cacheState?: string,\n cacheDatasource?: string,\n cachePlanType?: string,\n fill: boolean,\n stroke: boolean,\n label: boolean,\n landmark: boolean,\n strokeColor: string,\n strokeOpacity: number,\n fillColor: string,\n fillOpacity: number,\n lineWidth?: number,\n}\n\nexport type UserLayerRefIndex = {\n [id: string]: UserLayerRef\n}\n","export type PackedFields = Float64Array;\n\nexport function allocPackedFields(length: number): PackedFields\n{\n let ab = new ArrayBuffer(8 * length);\n let af = new Float64Array(ab);\n return af;\n}\n\n// The first entry in the PackedFields aggregate is the count of items aggregated.\n// Treat a null instance as just a single entry with no aggregates.\nlet abZero = new ArrayBuffer(8);\nlet afZero = new Float64Array(abZero);\nafZero[0] = 0;\n\nexport function zeroPackedCopy(pf: PackedFields): PackedFields\n{\n if (pf == null) return afZero;\n let af = allocPackedFields(pf.length);\n for (let i = 0; i < af.length; i++)\n af[i] = 0;\n return af;\n}\n\nexport function packedCopy(pf: PackedFields): PackedFields\n{\n if (pf == null) return null;\n let af = allocPackedFields(pf.length);\n for (let i = 0; i < pf.length; i++)\n af[i] = pf[i];\n return af;\n}\n\nexport function aggregatePackedFields(agg: PackedFields, pf: PackedFields): PackedFields\n{\n if (agg == null || pf == null) return agg;\n if (agg.length != pf.length)\n {\n return agg; // bug, but don't crash\n //throw 'aggregatePackedFields: unexpected length mismatch';\n }\n let n = agg.length;\n for (let i = 1; i < n; i++)\n agg[i] += pf[i];\n agg[0]++; // count of number of aggregates\n return agg;\n}\n","export interface Precincts\n{\n id?: string,\n state?: string,\n datasource?: string,\n name?: string,\n description?: string,\n labels?: string[],\n createdBy?: string,\n createTime?: string,\n modifyTime?: string,\n deleted?: boolean,\n published?: string,\n official?: boolean,\n}\n\nexport type PrecinctsIndex = { [id: string]: Precincts };\n","export function reverseBlockMapping(bm: any): any\n{\n let rev: any = {};\n\n if (bm) Object.keys(bm).forEach(blockid => {\n let geoid = bm[blockid];\n if (! rev[geoid]) rev[geoid] = [];\n rev[geoid].push(blockid);\n });\n Object.values(rev).forEach((a: string[]) => a.sort());\n return rev;\n}\n\nexport function reverseSubMapping(bm: any, n: number): any\n{\n let rev: any = {};\n\n if (bm) Object.keys(bm).forEach(blockid => {\n let geoid = blockid.substr(0, n);\n if (! rev[geoid]) rev[geoid] = [];\n rev[geoid].push(blockid);\n });\n return rev;\n}\n\nexport function reverseBlockgroupMapping(bm: any): any\n{\n return reverseSubMapping(bm, 12);\n}\n\nexport function reverseTractMapping(bm: any): any\n{\n return reverseSubMapping(bm, 11);\n}\n","export let Schemas: any = {\n 'users':\n {\n FileOptions: { version: 5, name: 'users', map: false },\n Schema: {\n id: 'S',\n name: 'S',\n email: 'S',\n hashPW: 'S',\n verified: 'BOOL',\n admin: 'BOOL',\n roles: 'M',\n verifyGUID: 'S',\n resetGUID: 'S',\n resetTime: 'S',\n lastActive: 'S',\n modifyTime: 'S',\n resetCount: 'N',\n accessed: 'M',\n likeID: 'S',\n visitData: 'M',\n groups: 'M',\n cache: 'N',\n cached: 'N',\n },\n KeySchema: { id: 'HASH' },\n GlobalSecondaryIndexes: [\n { email: 'HASH' },\n { verifyGUID: 'HASH' },\n { resetGUID: 'HASH' },\n ],\n },\n 'state':\n {\n FileOptions: { version: 7, name: 'sessions', map: true },\n Schema: {\n id: 'S',\n name: 'S',\n type: 'S',\n description: 'S',\n labels: 'L',\n flags: 'L',\n createdBy: 'S',\n lastActive: 'S',\n createTime: 'S',\n modifyTime: 'S',\n clientCount: 'N',\n maxClients: 'N',\n requestCount: 'N',\n deleted: 'BOOL',\n published: 'S',\n official: 'BOOL',\n loadFailed: 'BOOL',\n accessMap: 'M',\n revisions: 'L',\n xprops: 'M',\n groups: 'M',\n xid: 'S',\n },\n KeySchema: { createdBy: 'HASH', id: 'RANGE' },\n GlobalSecondaryIndexes: [\n { published: 'HASH' },\n { xid: 'HASH' },\n { id: 'HASH' }\n ], // sparse\n },\n 'expungestate':\n {\n FileOptions: { version: 7, name: 'sessions', map: true },\n Schema: {\n id: 'S',\n name: 'S',\n type: 'S',\n description: 'S',\n labels: 'L',\n createdBy: 'S',\n lastActive: 'S',\n createTime: 'S',\n modifyTime: 'S',\n clientCount: 'N',\n maxClients: 'N',\n requestCount: 'N',\n deleted: 'BOOL',\n published: 'S',\n official: 'BOOL',\n loadFailed: 'BOOL',\n accessMap: 'M',\n revisions: 'L',\n xprops: 'M',\n },\n KeySchema: { id: 'HASH' },\n },\n 'splitblock':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n chunk: 'S',\n chunkKey: 'S',\n state: 'S',\n datasource: 'S',\n geoid: 'S',\n blocks: 'L'\n },\n KeySchema: { id: 'HASH' },\n GlobalSecondaryIndexes: [\n { chunkKey: 'HASH', id: 'RANGE' },\n ],\n },\n 'blockset':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n chunk: 'S',\n chunkKey: 'S',\n chunkList: 'L',\n state: 'S',\n datasource: 'S',\n geoid: 'S',\n blocks: 'L'\n },\n KeySchema: { id: 'HASH' },\n GlobalSecondaryIndexes: [\n { state: 'HASH' },\n ],\n },\n 'blockchunk':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n recompute: 'BOOL',\n splits: 'L',\n },\n },\n 'access':\n {\n FileOptions: { map: true, noobject: true },\n Schema: {\n id: 'S',\n value: 'S',\n },\n KeySchema: { id: 'HASH' }\n },\n 'visitor':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n lastModified: 'S',\n /* ... others */\n },\n KeySchema: { id: 'HASH' }\n },\n 'session':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n lastActive: 'S',\n value: 'S',\n },\n KeySchema: { id: 'HASH' }\n },\n 'userlikes':\n {},\n 'likes':\n {},\n 'comments':\n {},\n 'stats':\n {},\n 'livestats':\n {},\n 'workqueue':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n priority: 'N',\n functionName: 'S',\n params: 'M',\n },\n KeySchema: { id: 'HASH' },\n GlobalSecondaryIndexes: [\n { priority: 'HASH' },\n ],\n },\n 'failqueue':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n priority: 'N',\n functionName: 'S',\n params: 'M',\n failType: 'S',\n },\n KeySchema: { id: 'HASH' },\n },\n 'layer':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n name: 'S',\n description: 'S',\n createdBy: 'S',\n createTime: 'S',\n modifyTime: 'S',\n deleted: 'BOOL',\n published: 'S',\n official: 'BOOL',\n state: 'S',\n },\n KeySchema: { createdBy: 'HASH', id: 'RANGE' },\n GlobalSecondaryIndexes: [\n { published: 'HASH' },\n { id: 'HASH' }\n ], // sparse\n },\n 'groups':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n name: 'S',\n description: 'S',\n },\n KeySchema: { id: 'HASH' },\n },\n 'groupsusers':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n uid: 'S',\n flags: 'N',\n },\n KeySchema: { id: 'HASH', uid: 'RANGE' },\n },\n 'groupsmaps':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n sid: 'S',\n permission: 'N',\n },\n KeySchema: { id: 'HASH', sid: 'RANGE' },\n },\n 'notifications':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n createdBy: 'S',\n message: 'S',\n },\n KeySchema: { createdBy: 'HASH', id: 'RANGE' },\n },\n 'cull':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n key: 'S',\n bucket: 'S',\n expires: 'S',\n },\n KeySchema: { id: 'HASH' },\n },\n 'precincts':\n {\n FileOptions: { map: true },\n Schema: {\n id: 'S',\n state: 'S',\n datasource: 'S',\n name: 'S',\n description: 'S',\n labels: 'L',\n createdBy: 'S',\n createTime: 'S',\n modifyTime: 'S',\n deleted: 'BOOL',\n published: 'S',\n official: 'BOOL',\n },\n KeySchema: { createdBy: 'HASH', id: 'RANGE' },\n GlobalSecondaryIndexes: [\n { id: 'HASH' },\n { published: 'HASH' },\n ], // sparse\n },\n}\n","import * as geojson from 'geojson';\nimport { Util, Poly, G } from '@dra2020/baseclient';\nimport * as DT from './vfeature';\nimport * as PF from './packedfields';\n\n// Given the topology for a precinct and a split, compute the feature data for the virtual feature.\n//\n\nexport function splitToGeoFeature(split: DT.SplitBlock, topoPrecinct: Poly.Topo, mbm: G.MultiBlockMapping): G.GeoFeature\n{\n let f = Poly.topoMerge(topoPrecinct, split.blocks);\n if (!f) return f;\n\n let contiguity = new Util.IndexedArray();\n let block_contiguity = new Util.IndexedArray();\n split.blocks.forEach(blockid => {\n let b = topoPrecinct.objects[blockid];\n if (b.properties.datasets)\n {\n if (! f.properties.datasets)\n f.properties.datasets = {};\n Util.deepAccum(f.properties.datasets, b.properties.datasets);\n }\n if (b.properties.packedFields)\n {\n if (! f.properties.packedFields)\n {\n f.properties.packedFields = PF.packedCopy(b.properties.packedFields);\n f.properties.getDatasetField = b.properties.getDatasetField;\n }\n else\n PF.aggregatePackedFields(f.properties.packedFields, b.properties.packedFields);\n }\n if (b.properties.contiguity)\n {\n b.properties.contiguity.forEach((id: string) => {\n if (id === 'OUT_OF_STATE')\n contiguity.set(id);\n else\n mbm.multimap(id).forEach(geoid => contiguity.set(geoid));\n });\n b.properties.contiguity.forEach((id: string) => {\n block_contiguity.set(id);\n });\n }\n });\n split.blocks.forEach(blockid => block_contiguity.clear(blockid));\n f.properties.id = DT.splitToVgeoid(split);\n f.properties.name = `Part of ${split.geoid} from ${split.blocks.length} blocks`;\n f.properties.contiguity = contiguity.asArray();\n f.properties.block_contiguity = block_contiguity.asArray();\n f.properties.blocks = split.blocks;\n f.properties.mbmstamp = mbm.stamp;\n return f;\n}\n","import * as DT from './dra-types';\n\nexport interface StateYearInfo\n{\n population: number,\n congress: {nDistricts: number}, \n upper: {nDistricts: number}, \n lower?: {nDistricts: number}, \n}\n\nexport interface StateInfo\n{\n '2010_VD': StateYearInfo,\n '2020_VD': StateYearInfo,\n}\n\nexport const StatePlanInfoMap: {[key: string]: StateInfo} = {\n \"AL\": {\"2010_VD\": {population: 4779736, congress: {nDistricts: 7}, upper: {nDistricts: 35}, lower: {nDistricts: 105}}, \"2020_VD\": { population: 0, congress: {nDistricts: 7}, upper: {nDistricts: 35}, lower: {nDistricts: 105}}},\n \"AK\": {\"2010_VD\": {population: 710231, congress: {nDistricts: 1}, upper: {nDistricts: 20}, lower: {nDistricts: 40}}, \"2020_VD\": {population: 0, congress: {nDistricts: 1}, upper: {nDistricts: 20}, lower: {nDistricts: 40}}},\n \"AZ\": {\"2010_VD\": {population: 6392017, congress: {nDistricts: 9}, upper: {nDistricts: 30}}, \"2020_VD\": {population: 6, congress: {nDistricts: 9}, upper: {nDistricts: 30}}},\n \"AR\": {\"2010_VD\": {population: 2915918, congress: {nDistricts: 4}, upper: {nDistricts: 35}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 35}, lower: {nDistricts: 100}}},\n \"CA\": {\"2010_VD\": {population: 37253956, congress: {nDistricts: 53}, upper: {nDistricts: 40}, lower: {nDistricts: 80}}, \"2020_VD\": {population: 6, congress: {nDistricts: 52}, upper: {nDistricts: 40}, lower: {nDistricts: 80}}},\n \"CO\": {\"2010_VD\": {population: 5029196, congress: {nDistricts: 7}, upper: {nDistricts: 35}, lower: {nDistricts: 65}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 35}, lower: {nDistricts: 65}}},\n \"CT\": {\"2010_VD\": {population: 3574097, congress: {nDistricts: 5}, upper: {nDistricts: 36}, lower: {nDistricts: 151}}, \"2020_VD\": {population: 6, congress: {nDistricts: 5}, upper: {nDistricts: 36}, lower: {nDistricts: 151}}},\n \"DE\": {\"2010_VD\": {population: 897934, congress: {nDistricts: 1}, upper: {nDistricts: 21}, lower: {nDistricts: 41}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 21}, lower: {nDistricts: 41}}},\n \"FL\": {\"2010_VD\": {population: 18801310, congress: {nDistricts: 27}, upper: {nDistricts: 40}, lower: {nDistricts: 120}}, \"2020_VD\": {population: 6, congress: {nDistricts: 28}, upper: {nDistricts: 40}, lower: {nDistricts: 120}}},\n \"GA\": {\"2010_VD\": {population: 9687653, congress: {nDistricts: 14}, upper: {nDistricts: 56}, lower: {nDistricts: 180}}, \"2020_VD\": {population: 6, congress: {nDistricts: 14}, upper: {nDistricts: 56}, lower: {nDistricts: 180}}},\n \"HI\": {\"2010_VD\": {population: 1360301, congress: {nDistricts: 2}, upper: {nDistricts: 25}, lower: {nDistricts: 51}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 25}, lower: {nDistricts: 51}}},\n \"ID\": {\"2010_VD\": {population: 1567582, congress: {nDistricts: 2}, upper: {nDistricts: 35}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 35}}},\n \"IL\": {\"2010_VD\": {population: 12830632, congress: {nDistricts: 18}, upper: {nDistricts: 59}, lower: {nDistricts: 118}}, \"2020_VD\": {population: 6, congress: {nDistricts: 17}, upper: {nDistricts: 59}, lower: {nDistricts: 118}}},\n \"IN\": {\"2010_VD\": {population: 6483802, congress: {nDistricts: 9}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 9}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}},\n \"IA\": {\"2010_VD\": {population: 3046355, congress: {nDistricts: 4}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}},\n \"KS\": {\"2010_VD\": {population: 2853118, congress: {nDistricts: 4}, upper: {nDistricts: 40}, lower: {nDistricts: 125}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 40}, lower: {nDistricts: 125}}},\n \"KY\": {\"2010_VD\": {population: 4339367, congress: {nDistricts: 6}, upper: {nDistricts: 38}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 6}, upper: {nDistricts: 38}, lower: {nDistricts: 100}}},\n \"LA\": {\"2010_VD\": {population: 4533372, congress: {nDistricts: 6}, upper: {nDistricts: 39}, lower: {nDistricts: 105}}, \"2020_VD\": {population: 6, congress: {nDistricts: 6}, upper: {nDistricts: 39}, lower: {nDistricts: 105}}},\n \"ME\": {\"2010_VD\": {population: 1328361, congress: {nDistricts: 2}, upper: {nDistricts: 35}, lower: {nDistricts: 151}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 35}, lower: {nDistricts: 151}}},\n \"MD\": {\"2010_VD\": {population: 5773552, congress: {nDistricts: 8}, upper: {nDistricts: 47}, lower: {nDistricts: 67}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 47}, lower: {nDistricts: 67}}},\n \"MA\": {\"2010_VD\": {population: 6547629, congress: {nDistricts: 9}, upper: {nDistricts: 40}, lower: {nDistricts: 160}}, \"2020_VD\": {population: 6, congress: {nDistricts: 9}, upper: {nDistricts: 40}, lower: {nDistricts: 160}}},\n \"MI\": {\"2010_VD\": {population: 9883640, congress: {nDistricts: 14}, upper: {nDistricts: 38}, lower: {nDistricts: 110}}, \"2020_VD\": {population: 6, congress: {nDistricts: 13}, upper: {nDistricts: 38}, lower: {nDistricts: 110}}},\n \"MN\": {\"2010_VD\": {population: 5303925, congress: {nDistricts: 8}, upper: {nDistricts: 67}, lower: {nDistricts: 134}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 67}, lower: {nDistricts: 134}}},\n \"MS\": {\"2010_VD\": {population: 2967297, congress: {nDistricts: 4}, upper: {nDistricts: 52}, lower: {nDistricts: 122}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 52}, lower: {nDistricts: 122}}},\n \"MO\": {\"2010_VD\": {population: 5988927, congress: {nDistricts: 8}, upper: {nDistricts: 34}, lower: {nDistricts: 163}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 34}, lower: {nDistricts: 163}}},\n \"MT\": {\"2010_VD\": {population: 989415, congress: {nDistricts: 1}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 50}, lower: {nDistricts: 100}}},\n \"NE\": {\"2010_VD\": {population: 1826341, congress: {nDistricts: 3}, upper: {nDistricts: 49}}, \"2020_VD\": {population: 6, congress: {nDistricts: 3}, upper: {nDistricts: 49}}},\n \"NV\": {\"2010_VD\": {population: 2700551, congress: {nDistricts: 4}, upper: {nDistricts: 21}, lower: {nDistricts: 42}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 21}, lower: {nDistricts: 42}}},\n \"NH\": {\"2010_VD\": {population: 1316470, congress: {nDistricts: 2}, upper: {nDistricts: 24}, lower: {nDistricts: 161}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 24}, lower: {nDistricts: 164}}},\n \"NJ\": {\"2010_VD\": {population: 8791894, congress: {nDistricts: 12}, upper: {nDistricts: 40}}, \"2020_VD\": {population: 6, congress: {nDistricts: 12}, upper: {nDistricts: 40}}},\n \"NM\": {\"2010_VD\": {population: 2059179, congress: {nDistricts: 3}, upper: {nDistricts: 42}, lower: {nDistricts: 70}}, \"2020_VD\": {population: 6, congress: {nDistricts: 3}, upper: {nDistricts: 42}, lower: {nDistricts: 70}}},\n \"NY\": {\"2010_VD\": {population: 19378102, congress: {nDistricts: 27}, upper: {nDistricts: 63}, lower: {nDistricts: 150}}, \"2020_VD\": {population: 6, congress: {nDistricts: 26}, upper: {nDistricts: 63}, lower: {nDistricts: 150}}},\n \"NC\": {\"2010_VD\": {population: 9535483, congress: {nDistricts: 13}, upper: {nDistricts: 50}, lower: {nDistricts: 120}}, \"2020_VD\": {population: 6, congress: {nDistricts: 14}, upper: {nDistricts: 50}, lower: {nDistricts: 120}}},\n \"ND\": {\"2010_VD\": {population: 672591, congress: {nDistricts: 1}, upper: {nDistricts: 47}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 47}, lower: {nDistricts: 49}}},\n \"OH\": {\"2010_VD\": {population: 11536504, congress: {nDistricts: 16}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}, \"2020_VD\": {population: 6, congress: {nDistricts: 15}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}},\n \"OK\": {\"2010_VD\": {population: 3751351, congress: {nDistricts: 5}, upper: {nDistricts: 48}, lower: {nDistricts: 101}}, \"2020_VD\": {population: 6, congress: {nDistricts: 5}, upper: {nDistricts: 48}, lower: {nDistricts: 101}}},\n \"OR\": {\"2010_VD\": {population: 3831074, congress: {nDistricts: 5}, upper: {nDistricts: 30}, lower: {nDistricts: 60}}, \"2020_VD\": {population: 6, congress: {nDistricts: 6}, upper: {nDistricts: 30}, lower: {nDistricts: 60}}},\n \"PA\": {\"2010_VD\": {population: 12702379, congress: {nDistricts: 18}, upper: {nDistricts: 50}, lower: {nDistricts: 203}}, \"2020_VD\": {population: 6, congress: {nDistricts: 17}, upper: {nDistricts: 50}, lower: {nDistricts: 203}}},\n \"RI\": {\"2010_VD\": {population: 1052567, congress: {nDistricts: 2}, upper: {nDistricts: 38}, lower: {nDistricts: 75}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 38}, lower: {nDistricts: 75}}},\n \"SC\": {\"2010_VD\": {population: 4625364, congress: {nDistricts: 7}, upper: {nDistricts: 46}, lower: {nDistricts: 124}}, \"2020_VD\": {population: 6, congress: {nDistricts: 7}, upper: {nDistricts: 46}, lower: {nDistricts: 124}}},\n \"SD\": {\"2010_VD\": {population: 814180, congress: {nDistricts: 1}, upper: {nDistricts: 35}, lower: {nDistricts: 37}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 35}, lower: {nDistricts: 37}}},\n \"TN\": {\"2010_VD\": {population: 6346105, congress: {nDistricts: 9}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}, \"2020_VD\": {population: 6, congress: {nDistricts: 9}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}},\n \"TX\": {\"2010_VD\": {population: 25145561, congress: {nDistricts: 36}, upper: {nDistricts: 31}, lower: {nDistricts: 150}}, \"2020_VD\": {population: 6, congress: {nDistricts: 38}, upper: {nDistricts: 31}, lower: {nDistricts: 150}}},\n \"UT\": {\"2010_VD\": {population: 2763885, congress: {nDistricts: 4}, upper: {nDistricts: 29}, lower: {nDistricts: 75}}, \"2020_VD\": {population: 6, congress: {nDistricts: 4}, upper: {nDistricts: 29}, lower: {nDistricts: 75}}},\n \"VT\": {\"2010_VD\": {population: 625741, congress: {nDistricts: 1}, upper: {nDistricts: 13}, lower: {nDistricts: 104}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 13}, lower: {nDistricts: 104}}},\n \"VA\": {\"2010_VD\": {population: 8001024, congress: {nDistricts: 11}, upper: {nDistricts: 40}, lower: {nDistricts: 100}}, \"2020_VD\": {population: 6, congress: {nDistricts: 11}, upper: {nDistricts: 40}, lower: {nDistricts: 100}}},\n \"WA\": {\"2010_VD\": {population: 6724540, congress: {nDistricts: 10}, upper: {nDistricts: 49}}, \"2020_VD\": {population: 6, congress: {nDistricts: 10}, upper: {nDistricts: 49}}},\n \"WV\": {\"2010_VD\": {population: 1852994, congress: {nDistricts: 3}, upper: {nDistricts: 17}, lower: {nDistricts: 67}}, \"2020_VD\": {population: 6, congress: {nDistricts: 2}, upper: {nDistricts: 17}, lower: {nDistricts: 100}}},\n \"WI\": {\"2010_VD\": {population: 5686986, congress: {nDistricts: 8}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}, \"2020_VD\": {population: 6, congress: {nDistricts: 8}, upper: {nDistricts: 33}, lower: {nDistricts: 99}}},\n \"WY\": {\"2010_VD\": {population: 563626, congress: {nDistricts: 1}, upper: {nDistricts: 30}, lower: {nDistricts: 60}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 31}, lower: {nDistricts: 62}}},\n \"DC\": {\"2010_VD\": {population: 601723, congress: {nDistricts: 1}, upper: {nDistricts: 8}}, \"2020_VD\": {population: 6, congress: {nDistricts: 1}, upper: {nDistricts: 8}}},\n \"PR\": {\"2010_VD\": {population: 0, congress: {nDistricts: 1}, upper: {nDistricts: 1}}, \"2020_VD\": {population: 0, congress: {nDistricts: 1}, upper: {nDistricts: 1}}},\n};\n\nexport function hasPlanType(stateCode: string, planType: DT.PlanType, is2020?: boolean): boolean\n{\n // handle unicameral states (hence no lower house districts)\n if ((stateCode === 'NE' || stateCode === 'DC') && planType === 'lower')\n return false;\n\n // handle states with only 1 congressional district (hence no plan)\n if (planType === 'congress' &&\n (stateCode === 'AK' || stateCode === 'DE' || stateCode === 'ND' || stateCode === 'SD' || stateCode === 'VT' || stateCode === 'WY' || stateCode === 'DC' ||\n (stateCode === 'MT' && !is2020)))\n {\n return false;\n }\n\n if (planType === 'county' || planType === 'city')\n return false;\n\n return true;\n}\n\nexport function hasOneLegislativePlanBothHouses(stateCode: string): boolean\n{\n return stateCode === 'AZ' || stateCode === 'ID' || stateCode === 'NJ' || stateCode === 'WA';\n}\n\nexport function getPlanDistrictCount(stateCode: string, planType: DT.PlanType, datasource: string): number\n{\n if (planType === 'coi')\n return 1;\n if (datasource === '2016_BG')\n datasource = '2010_VD';\n if ((datasource !== '2010_VD' && datasource !== '2020_VD') || (planType !== 'congress' && planType !== 'upper' && planType !== 'lower'))\n return 0;\n \n const stateYearInfo: StateYearInfo = StatePlanInfoMap[stateCode][datasource as ('2010_VD' | '2020_VD')];\n return stateYearInfo && stateYearInfo[planType] ? stateYearInfo[planType]['nDistricts'] : 0;\n}\n\n// TODO: This is not currently used (3/2/21). 2020_VD population numbers are not set; update them when apportionment happens \nexport function getStateYearTotalPop(stateCode: string, datasource: string): number\n{\n if (datasource === '2016_BG')\n datasource = '2010_VD';\n if ((datasource !== '2010_VD' && datasource !== '2020_VD'))\n return 0;\n\n const stateYearInfo: StateYearInfo = StatePlanInfoMap[stateCode][datasource as ('2010_VD' | '2020_VD')];\n return stateYearInfo ? stateYearInfo['population'] : 0;\n}\n\nexport function inferPlanType(stateCode: string, datasource: string, nDistricts: number, flex?: boolean): DT.PlanType\n{\n // Intended for datasource === '2020_VD'\n const congressCount: number = getPlanDistrictCount(stateCode, 'congress', datasource);\n const upperCount: number = getPlanDistrictCount(stateCode, 'upper', datasource);\n const lowerCount: number = getPlanDistrictCount(stateCode, 'lower', datasource);\n return (\n ((flex && nDistricts <= congressCount + 2 && nDistricts >= congressCount - 3) || nDistricts == congressCount) ? 'congress' :\n (nDistricts == upperCount) ? 'upper' :\n (nDistricts == lowerCount) ? 'lower' :\n 'other');\n}\n","// In constrast to logging, the stats manager is responsible for tracking live server status.\n// The results are stored in a compact database record which can be easily queried for current\n// status. Each server instance maintains its own field in the overall \"values\" record in the\n// stats database. The reporting tool aggregates all instances to report overall server activity.\n//\n// There are basically three kinds of values:\n// Sum - we want to sum the value across all server instances (e.g. number of connnected clients)\n// Avg - we just take average across all server instances (e.g. memory heap size)\n// Rate - we want to track the rate of some activity over some time period\n//\n\nexport type ValType = number;\nexport const ValTypeSum = 0;\nexport const ValTypeAvg = 1;\nexport const ValTypeRate = 2;\n\nconst ExpiryAge = 1000 * 60 * 60 * 24; // throw away instance record after this time period\n\nexport function statExpiryTime(): string\n{\n let time = new Date();\n time.setTime(time.getTime() + ExpiryAge);\n return time.toJSON();\n}\n\nexport interface StatRecord\n{\n id: string;\n production: boolean;\n expires: string;\n time: string;\n index: StatEntryIndex;\n}\n\nexport type StatEntry = StatValue | StatRate;\n\nexport type StatEntryIndex = { [name: string]: StatEntry };\n\nexport interface StatValue\n{\n valType?: ValType;\n cur?: number;\n min?: number;\n max?: number;\n tot?: number;\n cnt?: number;\n}\n\nexport interface StatRate\n{\n valType?: ValType;\n thisMin?: number;\n lastMin?: number;\n thisHour?: number;\n lastHour?: number;\n thisDay?: number;\n lastDay?: number;\n}\n\n// Aggregate running value. This applies both in memory (logging multiple times before\n// saving to database) as well as aggregating into an instance structure in the DB.\n\nexport function statValueRecord(sv: StatValue, cur: number, valType: ValType): StatValue\n{\n if (sv === undefined) sv = {};\n if (sv.min === undefined || cur < sv.min)\n sv.min = cur;\n if (sv.max === undefined || cur > sv.max)\n sv.max = cur;\n sv.cur = cur;\n sv.valType = valType;\n return sv;\n}\n\nexport function statRateIncr(sr: StatRate, incr: number = 1): StatRate\n{\n if (sr == null) sr = {};\n sr.valType = ValTypeRate;\n sr.thisMin = sr.thisMin === undefined ? incr : sr.thisMin+incr;\n sr.thisHour = sr.thisHour === undefined ? incr : sr.thisHour+incr;\n sr.thisDay = sr.thisDay === undefined ? incr : sr.thisDay+incr;\n return sr;\n}\n\nexport const OneMinute = 1000 * 60;\nexport const OneHour = OneMinute * 60;\nexport const OneDay = OneHour * 24;\n\nexport function statRateRollover(sr: StatRate, period: number): void\n{\n if ((period % OneMinute) == 0)\n {\n sr.lastMin = sr.thisMin;\n sr.thisMin = 0;\n }\n if ((period % OneHour) == 0)\n {\n sr.lastHour = sr.thisHour;\n sr.thisHour = 0;\n }\n if ((period % OneDay) == 0)\n {\n sr.lastDay = sr.thisDay;\n sr.thisDay = 0;\n }\n}\n\nexport function statEntryIndexMerge(accum: StatEntryIndex, si: StatEntryIndex): StatEntryIndex\n{\n if (accum == null) accum = {};\n\n // We just discard and replace old rate information\n Object.keys(accum).forEach((p: string) => { if (accum[p].valType == ValTypeRate) delete accum[p] });\n\n // But merge in all the other values\n Object.keys(si).forEach((p: string) => {\n let se = si[p];\n if (se.valType == ValTypeRate)\n accum[p] = se;\n else\n {\n let sv = se as StatValue;\n accum[p] = statValueRecord(se as StatValue, sv.cur, sv.valType);\n }\n });\n return accum;\n}\n\nexport function statEntryIndexRollover(si: StatEntryIndex, period: number): void\n{\n Object.keys(si).forEach((p: string) => {\n let se = si[p];\n if (se.valType == ValTypeRate)\n statRateRollover(se as StatRate, period);\n });\n}\n\nexport function statRecordMerge(accum: StatRecord, si: StatRecord): StatRecord\n{\n if (accum == null)\n accum = { id: si.id, production: si.production, time: si.time, expires: si.expires, index: {} };\n accum.expires = si.expires;\n accum.time = si.time;\n statEntryIndexMerge(accum.index, si.index);\n return accum;\n}\n\n// Accumulate a set of values together (e.g. from multiple running instances)\n// for reporting current state.\n//\n\nexport function statValueAccum(accum: StatValue, sv: StatValue): StatEntry\n{\n if (accum == null)\n {\n accum = {};\n accum.valType = sv.valType;\n }\n if (accum.min === undefined || sv.min < accum.min)\n accum.min = sv.min;\n if (accum.max === undefined || sv.max > accum.max)\n accum.max = sv.max;\n if (accum.valType === undefined)\n accum.valType = sv.valType;\n if (accum.valType == ValTypeSum)\n accum.cur = (accum.cur === undefined ? sv.cur : accum.cur+sv.cur);\n else if (accum.valType == ValTypeAvg)\n {\n accum.tot = (accum.tot === undefined ? 0 : accum.tot) + sv.cur;\n accum.cnt = (accum.cnt === undefined ? 0 : accum.cnt) + 1;\n accum.cur = accum.tot / accum.cnt;\n }\n return accum;\n}\n\nexport function statRateAccum(accum: StatRate, sr: StatRate): StatRate\n{\n if (accum == null)\n {\n accum = {};\n accum.valType = sr.valType;\n }\n accum.thisMin = accum.thisMin === undefined ? sr.thisMin : (accum.thisMin + (sr.thisMin === undefined ? 0 : sr.thisMin));\n accum.lastMin = accum.lastMin === undefined ? sr.lastMin : (accum.lastMin + (sr.lastMin === undefined ? 0 : sr.lastMin));\n accum.thisHour = accum.thisHour === undefined ? sr.thisHour : (accum.thisHour + (sr.thisHour === undefined ? 0 : sr.thisHour));\n accum.lastHour = accum.lastHour === undefined ? sr.lastHour : (accum.lastHour + (sr.lastHour === undefined ? 0 : sr.lastHour));\n accum.thisDay = accum.thisDay === undefined ? sr.thisDay : (accum.thisDay + (sr.thisDay === undefined ? 0 : sr.thisDay));\n accum.lastDay = accum.lastDay === undefined ? sr.lastDay : (accum.lastDay + (sr.lastDay === undefined ? 0 : sr.lastDay));\n return accum;\n}\n\nexport function statIndexAccum(accum: StatEntryIndex, si: StatEntryIndex): StatEntryIndex\n{\n if (accum == null) accum = {};\n Object.keys(si).forEach((p: string) => {\n let se = si[p];\n if (se.valType == ValTypeRate)\n accum[p] = statRateAccum(accum[p] as StatRate, se as StatRate);\n else\n accum[p] = statValueAccum(accum[p] as StatValue, se as StatValue);\n });\n return accum;\n}\n","// Public libraries\nimport * as Hash from 'object-hash';\n\nexport interface SplitBlock\n{\n id?: string;\n chunkKey?: string;\n chunkList?: string[];\n chunk?: string;\n state: string;\n datasource: string;\n geoid: string;\n blocks?: string[];\n bitset?: string;\n}\n\nexport interface SplitChunk\n{\n id?: string;\n recompute?: boolean;\n splits?: string[];\n}\n\nexport type DistrictToSplitBlock = { [districtID: string]: SplitBlock[] };\n\n// Canonical hashing of custom precinct\nexport function chash(o: any): string\n{\n return Hash(o, { respectType: false, unorderedArrays: true, unorderedObjects: true,\n excludeKeys: (k: string) => (k === 'id') });\n}\n\n// Is custom feature - 5 digit county id + 'cust' + hash\nlet reC = /^\\d\\d\\d\\d\\dcust.*$/;\n\nexport function isCfeature(id: string): boolean\n{\n return id && reC.test(id);\n}\n\n// Canonical hashing of splitblock data\nexport function vhash(o: any): string\n{\n return Hash(o,\n { respectType: false,\n unorderedArrays: true,\n unorderedObjects: true,\n // basically, include (state,datasource,geoid,blocks[])\n excludeKeys: (k: string) => (k === 'id' || k === 'chunk' || k === 'chunkList' || k === 'chunkKey')\n });\n}\n\n// old style \"vfeature_[geoid]_[numericchunk]_[id]\"\n// new style \"B_[geoid]_bitset\"\n\nexport function vgeoidToGeoid(vgeoid: string): string\n{\n let reNew = /^B_([^_]*)_.*/;\n let reOld = /^vfeature_([^_]*)_.*/;\n let a = reNew.exec(vgeoid);\n if (a == null || a.length != 2)\n {\n a = reOld.exec(vgeoid);\n if (a == null || a.length != 2)\n return '';\n }\n return a[1];\n}\n\nexport function splitToVgeoid(s: SplitBlock): string\n{\n // Newstyle\n if (s.bitset)\n return `B_${s.geoid}_${s.bitset}`;\n\n // oldstyle\n if (s.id === undefined)\n s.id = vhash(s);\n if (s.chunk === undefined)\n s.chunk = '0';\n return `vfeature_${s.geoid}_${s.chunk}_${s.id}`;\n}\n\nexport function splitCommitted(s: SplitBlock): boolean\n{\n return !!s.id || !!s.bitset;\n}\n\nexport function vgeoidToChunk(vgeoid: string): string\n{\n // vgeoid is string of form: \"vfeature_[geoid]_[chunkid]_[hash]\"\n // the contents are chunked into a file of form \"vfeature_chunk_[chunkid]\"\n // So extract the chunk ID and download that.\n let re = /^vfeature_([^_]*)_([^_*])_(.*)$/;\n let a = re.exec(vgeoid);\n if (a && a.length == 4)\n vgeoid = `vfeature_chunk_${a[2]}`;\n else\n vgeoid = null;\n\n return vgeoid;\n}\n\nexport function vgeoidToSplit(state: string, datasource: string, vgeoid: string): SplitBlock\n{\n let reNew = /^B_([^_]*)_(.*)$/;\n let reOld = /^vfeature_([^_]*)_([^_*])_(.*)$/;\n let a = reNew.exec(vgeoid);\n if (a)\n return { state: state, datasource: datasource, geoid: a[1], bitset: a[2] };\n a = reOld.exec(vgeoid);\n if (a)\n return { state: state, datasource: datasource, geoid: a[1], id: a[3], chunk: a[2], blocks: null };\n return null;\n}\n\nexport function vgeoidToHash(vgeoid: string): string\n{\n // vgeoid is string of form: \"vfeature_[geoid]_[chunkid]_[hash]\"\n let re = /^vfeature_([^_]*)_([^_*])_(.*)$/;\n let a = re.exec(vgeoid);\n if (a && a.length == 4)\n vgeoid = a[3];\n else\n vgeoid = null;\n\n return vgeoid;\n}\n\nexport function isVfeature(geoid: string): boolean\n{\n return geoid.indexOf('B') === 0 || geoid.indexOf('vfeature') === 0;\n}\n\nexport function splitToCacheKey(s: SplitBlock): string\n{\n if (s.bitset)\n return null;\n if (s.id === undefined)\n s.id = vhash(s);\n if (s.chunk === undefined)\n s.chunk = \"0\";\n\n return `_${s.state}_${s.datasource}_vfeature_${s.geoid}_${s.chunk}_${s.id}.geojson`;\n}\n\nexport function cacheKeyToSplit(s: string): SplitBlock\n{\n let re = /^_(..)_(.*)_vfeature_([^_]+)_([^_]+)_([^_]+).geojson$/\n let a = re.exec(s);\n if (a == null) return null;\n // 0: whole string, 1: statecode, 2: datasource, 3: geoid, 4: chunk, 5: id hash\n return { id: a[5], state: a[1], datasource: a[2], geoid: a[3], chunk: a[4], blocks: null };\n}\n\nexport function splitToChunkKey(s: SplitBlock): string\n{\n if (s.chunk === undefined)\n s.chunk = \"0\";\n\n return `_${s.state}_${s.datasource}_vfeature_chunk_${s.chunk}.geojson`;\n}\n\nexport function splitToPrefix(s: SplitBlock): string\n{\n if (s.blocks === undefined)\n {\n let re = /_([^_]*)_(.*)_vfeature.*\\.geojson$/;\n let a = re.exec(s.id);\n if (a && a.length == 3)\n return `_${a[1]}_${a[2]}`;\n return s.id;\n }\n return `_${s.state}_${s.datasource}`;\n}\n\nexport function cacheKeysToChunkHash(keys: string[]): string\n{\n return vhash(keys);\n}\n","export type WorkQueueFailure = 'hard' | 'soft';\n\nexport interface WorkQueueItem\n{\n id: string,\n functionName: string,\n params: any,\n priority: number,\n failType?: WorkQueueFailure,\n}\n","module.exports = require(\"@dra2020/baseclient\");","module.exports = require(\"object-hash\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./lib/all.ts\");\n",""],"names":[],"sourceRoot":""}
@@ -0,0 +1,5 @@
1
+ export type PackedFields = Float64Array;
2
+ export declare function allocPackedFields(length: number): PackedFields;
3
+ export declare function zeroPackedCopy(pf: PackedFields): PackedFields;
4
+ export declare function packedCopy(pf: PackedFields): PackedFields;
5
+ export declare function aggregatePackedFields(agg: PackedFields, pf: PackedFields): PackedFields;
package/lib/csv.ts CHANGED
@@ -220,6 +220,7 @@ export interface ConvertResult
220
220
  {
221
221
  inBlockMap: BlockMapping;
222
222
  inMbm: G.MultiBlockMapping;
223
+ outMbm: G.MultiBlockMapping;
223
224
  outValid: boolean;
224
225
  outState: string;
225
226
  outMap: BlockMapping;
@@ -239,6 +240,11 @@ export function blockmapToState(blockMap: BlockMapping): string
239
240
  return null;
240
241
  }
241
242
 
243
+ export function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMapping, altBlocks: AltBlockMapping): ConvertResult
244
+ {
245
+ return blockmapToVTDmapCustom(blockMap, mbm, mbm, altBlocks);
246
+ }
247
+
242
248
  // blockToVTD:
243
249
  // Take BlockMapping (simple map of GEOID to districtID) and a per-state map of block-level GEOID to VTD
244
250
  // and return the output mapping of VTD to districtID, as well a data structure that describes any VTD's
@@ -249,11 +255,16 @@ export function blockmapToState(blockMap: BlockMapping): string
249
255
  // not all specify the same state, the mapping is considered invalid and the outValid flag is set to false.
250
256
  //
251
257
 
252
- export function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMapping, altBlocks: AltBlockMapping): ConvertResult
258
+ export function blockmapToVTDmapCustom(
259
+ blockMap: BlockMapping,
260
+ inMbm: G.MultiBlockMapping,
261
+ outMbm: G.MultiBlockMapping,
262
+ altBlocks: AltBlockMapping): ConvertResult
253
263
  {
254
264
  let res: ConvertResult = {
255
265
  inBlockMap: blockMap,
256
- inMbm: mbm,
266
+ inMbm: inMbm,
267
+ outMbm: outMbm,
257
268
  outValid: true,
258
269
  outState: null,
259
270
  outMap: {},
@@ -270,6 +281,8 @@ export function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMappin
270
281
 
271
282
  let revBG: RevBlockMapping; // lazy create on demand
272
283
 
284
+ function isBlockID(b: string): boolean { return b.length >= 15 && (!inMbm || !!inMbm.map(b)) }
285
+
273
286
  if (altBlocks)
274
287
  {
275
288
  // Create reverse of altBlocks if they exist {altBlockid: {stdBlockid, pop}, ...}
@@ -287,7 +300,7 @@ export function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMappin
287
300
  for (var id in blockMap) if (blockMap.hasOwnProperty(id))
288
301
  {
289
302
  let n: number = id.length;
290
- if (n >= 15 && !(mbm && mbm.map(id) !== undefined) && revAltBlocks[id])
303
+ if (isBlockID(id) && revAltBlocks[id])
291
304
  {
292
305
  if (!bestAlt[revAltBlocks[id].blockid] || bestAlt[revAltBlocks[id].blockid].pop < revAltBlocks[id].pop)
293
306
  {
@@ -331,15 +344,15 @@ export function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMappin
331
344
 
332
345
  // Simple test for block id (vs. voting district or block group) id
333
346
  // Also skip longer custom precinct ids
334
- if (n >= 15 && (!mbm || !mbm.rev(id)))
347
+ if (isBlockID(id))
335
348
  {
336
349
  ids = [id];
337
- if (mbm && mbm.map(id) !== undefined)
338
- geoids = [mbm.map(id)];
350
+ if (outMbm && outMbm.map(id) !== undefined)
351
+ geoids = [outMbm.map(id)];
339
352
  else
340
353
  {
341
354
  geoids = [id.substr(0, 12)];
342
- if (mbm && !mbm.rev(geoids[0]))
355
+ if (outMbm && !outMbm.rev(geoids[0]))
343
356
  {
344
357
  res.outValid = false;
345
358
  break;
@@ -348,11 +361,11 @@ export function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMappin
348
361
  }
349
362
  else if (n == 12)
350
363
  {
351
- if (!revBG) revBG = reverseBlockgroupMapping(mbm);
364
+ if (!revBG) revBG = reverseBlockgroupMapping(outMbm);
352
365
  if (revBG[id])
353
366
  {
354
367
  ids = revBG[id];
355
- geoids = ids.map(id => mbm.map(id));
368
+ geoids = ids.map(id => outMbm.map(id));
356
369
  }
357
370
  else
358
371
  {
@@ -360,6 +373,12 @@ export function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMappin
360
373
  geoids = [id];
361
374
  }
362
375
  }
376
+ else if (inMbm.rev(id))
377
+ {
378
+ // Map down to blockids and then back up to geoids to handle both custom and default geoids
379
+ ids = inMbm.rev(id);
380
+ geoids = ids.map(blockid => outMbm.map(blockid));
381
+ }
363
382
  else
364
383
  {
365
384
  ids = [id];
@@ -392,7 +411,7 @@ export function blockmapToVTDmap(blockMap: BlockMapping, mbm: G.MultiBlockMappin
392
411
  if (Util.countKeys(districtToBlocks) == 1)
393
412
  {
394
413
  let blocks = Object.keys(districtToBlocks[Util.nthKey(districtToBlocks)]);
395
- if (blocks[0] === geoid || (mbm.rev(geoid) && blocks.length === mbm.rev(geoid).length))
414
+ if (blocks[0] === geoid || (outMbm.rev(geoid) && blocks.length === outMbm.rev(geoid).length))
396
415
  bWhole = true;
397
416
  }
398
417
  if (bWhole)
@@ -0,0 +1,47 @@
1
+ export type PackedFields = Float64Array;
2
+
3
+ export function allocPackedFields(length: number): PackedFields
4
+ {
5
+ let ab = new ArrayBuffer(8 * length);
6
+ let af = new Float64Array(ab);
7
+ return af;
8
+ }
9
+
10
+ // The first entry in the PackedFields aggregate is the count of items aggregated.
11
+ // Treat a null instance as just a single entry with no aggregates.
12
+ let abZero = new ArrayBuffer(8);
13
+ let afZero = new Float64Array(abZero);
14
+ afZero[0] = 0;
15
+
16
+ export function zeroPackedCopy(pf: PackedFields): PackedFields
17
+ {
18
+ if (pf == null) return afZero;
19
+ let af = allocPackedFields(pf.length);
20
+ for (let i = 0; i < af.length; i++)
21
+ af[i] = 0;
22
+ return af;
23
+ }
24
+
25
+ export function packedCopy(pf: PackedFields): PackedFields
26
+ {
27
+ if (pf == null) return null;
28
+ let af = allocPackedFields(pf.length);
29
+ for (let i = 0; i < pf.length; i++)
30
+ af[i] = pf[i];
31
+ return af;
32
+ }
33
+
34
+ export function aggregatePackedFields(agg: PackedFields, pf: PackedFields): PackedFields
35
+ {
36
+ if (agg == null || pf == null) return agg;
37
+ if (agg.length != pf.length)
38
+ {
39
+ return agg; // bug, but don't crash
40
+ //throw 'aggregatePackedFields: unexpected length mismatch';
41
+ }
42
+ let n = agg.length;
43
+ for (let i = 1; i < n; i++)
44
+ agg[i] += pf[i];
45
+ agg[0]++; // count of number of aggregates
46
+ return agg;
47
+ }
@@ -1,6 +1,7 @@
1
1
  import * as geojson from 'geojson';
2
2
  import { Util, Poly, G } from '@dra2020/baseclient';
3
3
  import * as DT from './vfeature';
4
+ import * as PF from './packedfields';
4
5
 
5
6
  // Given the topology for a precinct and a split, compute the feature data for the virtual feature.
6
7
  //
@@ -12,11 +13,24 @@ export function splitToGeoFeature(split: DT.SplitBlock, topoPrecinct: Poly.Topo,
12
13
 
13
14
  let contiguity = new Util.IndexedArray();
14
15
  let block_contiguity = new Util.IndexedArray();
15
- f.properties.datasets = {};
16
16
  split.blocks.forEach(blockid => {
17
17
  let b = topoPrecinct.objects[blockid];
18
18
  if (b.properties.datasets)
19
+ {
20
+ if (! f.properties.datasets)
21
+ f.properties.datasets = {};
19
22
  Util.deepAccum(f.properties.datasets, b.properties.datasets);
23
+ }
24
+ if (b.properties.packedFields)
25
+ {
26
+ if (! f.properties.packedFields)
27
+ {
28
+ f.properties.packedFields = PF.packedCopy(b.properties.packedFields);
29
+ f.properties.getDatasetField = b.properties.getDatasetField;
30
+ }
31
+ else
32
+ PF.aggregatePackedFields(f.properties.packedFields, b.properties.packedFields);
33
+ }
20
34
  if (b.properties.contiguity)
21
35
  {
22
36
  b.properties.contiguity.forEach((id: string) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dra2020/dra-types",
3
- "version": "1.8.80",
3
+ "version": "1.8.82",
4
4
  "description": "Shared types used between client, server and tools.",
5
5
  "main": "dist/dra-types.js",
6
6
  "types": "./dist/all.d.ts",