@flowmap.gl/data 8.0.0-alpha.2 → 8.0.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/FlowmapAggregateAccessors.d.ts +16 -0
  2. package/dist/FlowmapAggregateAccessors.d.ts.map +1 -0
  3. package/dist/FlowmapAggregateAccessors.js +46 -0
  4. package/dist/{FlowMapSelectors.d.ts → FlowmapSelectors.d.ts} +87 -70
  5. package/dist/FlowmapSelectors.d.ts.map +1 -0
  6. package/dist/FlowmapSelectors.js +888 -0
  7. package/dist/{FlowMapState.d.ts → FlowmapState.d.ts} +11 -8
  8. package/dist/FlowmapState.d.ts.map +1 -0
  9. package/dist/FlowmapState.js +2 -0
  10. package/dist/cluster/cluster.d.ts +6 -5
  11. package/dist/cluster/cluster.d.ts.map +1 -1
  12. package/dist/cluster/cluster.js +76 -20
  13. package/dist/colors.d.ts +7 -7
  14. package/dist/colors.d.ts.map +1 -1
  15. package/dist/colors.js +55 -20
  16. package/dist/getViewStateForLocations.d.ts +18 -11
  17. package/dist/getViewStateForLocations.d.ts.map +1 -1
  18. package/dist/getViewStateForLocations.js +37 -23
  19. package/dist/index.d.ts +9 -6
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +9 -6
  22. package/dist/provider/FlowmapDataProvider.d.ts +21 -0
  23. package/dist/provider/FlowmapDataProvider.d.ts.map +1 -0
  24. package/dist/provider/FlowmapDataProvider.js +17 -0
  25. package/dist/provider/LocalFlowmapDataProvider.d.ts +21 -0
  26. package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
  27. package/dist/provider/LocalFlowmapDataProvider.js +104 -0
  28. package/dist/selector-functions.d.ts +4 -0
  29. package/dist/selector-functions.d.ts.map +1 -0
  30. package/dist/selector-functions.js +20 -0
  31. package/dist/types.d.ts +12 -9
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/types.js +4 -4
  34. package/dist/util.d.ts +0 -1
  35. package/dist/util.d.ts.map +1 -1
  36. package/dist/util.js +1 -4
  37. package/package.json +10 -12
  38. package/src/{FlowMapAggregateAccessors.ts → FlowmapAggregateAccessors.ts} +14 -9
  39. package/src/{FlowMapSelectors.ts → FlowmapSelectors.ts} +349 -282
  40. package/src/{FlowMapState.ts → FlowmapState.ts} +10 -7
  41. package/src/cluster/cluster.ts +95 -34
  42. package/src/colors.ts +70 -28
  43. package/src/getViewStateForLocations.ts +56 -40
  44. package/src/index.ts +9 -6
  45. package/src/provider/{FlowMapDataProvider.ts → FlowmapDataProvider.ts} +27 -17
  46. package/src/provider/LocalFlowmapDataProvider.ts +129 -0
  47. package/src/selector-functions.ts +34 -0
  48. package/src/types.ts +15 -12
  49. package/src/util.ts +0 -4
  50. package/dist/FlowMapAggregateAccessors.d.ts +0 -15
  51. package/dist/FlowMapAggregateAccessors.d.ts.map +0 -1
  52. package/dist/FlowMapAggregateAccessors.js +0 -43
  53. package/dist/FlowMapSelectors.d.ts.map +0 -1
  54. package/dist/FlowMapSelectors.js +0 -834
  55. package/dist/FlowMapState.d.ts.map +0 -1
  56. package/dist/FlowMapState.js +0 -2
  57. package/dist/provider/FlowMapDataProvider.d.ts +0 -16
  58. package/dist/provider/FlowMapDataProvider.d.ts.map +0 -1
  59. package/dist/provider/FlowMapDataProvider.js +0 -17
  60. package/dist/provider/LocalFlowMapDataProvider.d.ts +0 -20
  61. package/dist/provider/LocalFlowMapDataProvider.d.ts.map +0 -1
  62. package/dist/provider/LocalFlowMapDataProvider.js +0 -87
  63. package/src/provider/LocalFlowMapDataProvider.ts +0 -105
@@ -1,21 +1,23 @@
1
1
  import {AggregateFlow, Cluster, LocationAccessors, LocationTotals} from '..';
2
- import {FlowMapState} from '../FlowMapState';
2
+ import {FlowmapState} from '../FlowmapState';
3
3
  import {
4
4
  ClusterNode,
5
- FlowMapData,
6
- FlowMapDataAccessors,
5
+ FlowmapData,
6
+ FlowmapDataAccessors,
7
7
  LayersData,
8
8
  ViewportProps,
9
9
  } from '../types';
10
10
 
11
- export default interface FlowMapDataProvider<L, F> {
12
- setAccessors(accessors: FlowMapDataAccessors<L, F>): void;
11
+ export default interface FlowmapDataProvider<L, F> {
12
+ setAccessors(accessors: FlowmapDataAccessors<L, F>): void;
13
13
 
14
- setFlowMapState(flowMapState: FlowMapState): Promise<void>;
14
+ setFlowmapState(flowmapState: FlowmapState): Promise<void>;
15
15
 
16
16
  // clearData(): void;
17
17
 
18
- getViewportForLocations(dims: [number, number]): Promise<ViewportProps>;
18
+ getViewportForLocations(
19
+ dims: [number, number],
20
+ ): Promise<ViewportProps | undefined>;
19
21
 
20
22
  // getFlowTotals(): Promise<FlowTotals>;
21
23
 
@@ -34,26 +36,34 @@ export default interface FlowMapDataProvider<L, F> {
34
36
  // getLocationsForSearchBox(): Promise<(FlowLocation | ClusterNode)[] | undefined>;
35
37
 
36
38
  getLayersData(): Promise<LayersData | undefined>;
39
+
40
+ /**
41
+ * This is to give the data provider control over when/how often layersData
42
+ * is updated which leads to the flowmap being redrawn.
43
+ */
44
+ updateLayersData(
45
+ setLayersData: (layersData: LayersData | undefined) => void,
46
+ changeFlags: Record<string, boolean>,
47
+ ): Promise<void>;
37
48
  }
38
49
 
39
- export function isFlowMapData<L, F>(
50
+ export function isFlowmapData<L, F>(
40
51
  data: Record<string, any>,
41
- ): data is FlowMapData<L, F> {
52
+ ): data is FlowmapData<L, F> {
42
53
  return (
43
- data &&
44
- data.locations &&
45
- data.flows &&
46
- Array.isArray(data.locations) &&
47
- Array.isArray(data.flows)
54
+ data && data.locations && data.flows
55
+ // TODO: test that they are iterable
56
+ // Array.isArray(data.locations) &&
57
+ // Array.isArray(data.flows)
48
58
  );
49
59
  }
50
60
 
51
- export function isFlowMapDataProvider<L, F>(
61
+ export function isFlowmapDataProvider<L, F>(
52
62
  dataProvider: Record<string, any>,
53
- ): dataProvider is FlowMapDataProvider<L, F> {
63
+ ): dataProvider is FlowmapDataProvider<L, F> {
54
64
  return (
55
65
  dataProvider &&
56
- typeof dataProvider.setFlowMapState === 'function' &&
66
+ typeof dataProvider.setFlowmapState === 'function' &&
57
67
  typeof dataProvider.getViewportForLocations === 'function' &&
58
68
  typeof dataProvider.getFlowByIndex === 'function' &&
59
69
  typeof dataProvider.getLocationById === 'function' &&
@@ -0,0 +1,129 @@
1
+ import type FlowmapDataProvider from './FlowmapDataProvider';
2
+ import type {
3
+ Cluster,
4
+ ClusterNode,
5
+ FlowmapData,
6
+ FlowmapDataAccessors,
7
+ LayersData,
8
+ LocationTotals,
9
+ ViewportProps,
10
+ AggregateFlow,
11
+ } from '../types';
12
+ import {FlowmapState} from '../FlowmapState';
13
+ import FlowmapSelectors from '../FlowmapSelectors';
14
+ import {
15
+ GetViewStateOptions,
16
+ getViewStateForLocations,
17
+ } from '../getViewStateForLocations';
18
+
19
+ export default class LocalFlowmapDataProvider<L, F>
20
+ implements FlowmapDataProvider<L, F>
21
+ {
22
+ private selectors: FlowmapSelectors<L, F>;
23
+ private flowmapData: FlowmapData<L, F> | undefined;
24
+ private flowmapState: FlowmapState | undefined;
25
+
26
+ constructor(accessors: FlowmapDataAccessors<L, F>) {
27
+ // scope selectors to the concrete instance of FlowmapDataProvider
28
+ this.selectors = new FlowmapSelectors<L, F>(accessors);
29
+ this.flowmapData = undefined;
30
+ this.flowmapState = undefined;
31
+ }
32
+
33
+ setAccessors(accessors: FlowmapDataAccessors<L, F>) {
34
+ this.selectors.setAccessors(accessors);
35
+ }
36
+
37
+ async setFlowmapData(flowmapData: FlowmapData<L, F>): Promise<void> {
38
+ this.flowmapData = flowmapData;
39
+ }
40
+
41
+ async setFlowmapState(flowmapState: FlowmapState): Promise<void> {
42
+ this.flowmapState = flowmapState;
43
+ }
44
+
45
+ async getFlowByIndex(idx: number): Promise<F | AggregateFlow | undefined> {
46
+ if (!this.flowmapState || !this.flowmapData) {
47
+ return undefined;
48
+ }
49
+ const flows = this.selectors.getFlowsForFlowmapLayer(
50
+ this.flowmapState,
51
+ this.flowmapData,
52
+ );
53
+ return flows?.[idx];
54
+ }
55
+
56
+ // TODO: this is unreliable, should replace by unqiue ID
57
+ async getLocationByIndex(idx: number): Promise<L | ClusterNode | undefined> {
58
+ if (!this.flowmapState || !this.flowmapData) {
59
+ return undefined;
60
+ }
61
+ const locations = this.selectors.getLocationsForFlowmapLayer(
62
+ this.flowmapState,
63
+ this.flowmapData,
64
+ );
65
+ return locations?.[idx];
66
+ }
67
+
68
+ async getLayersData(): Promise<LayersData | undefined> {
69
+ if (!this.flowmapState || !this.flowmapData) {
70
+ return undefined;
71
+ }
72
+ return this.selectors.getLayersData(this.flowmapState, this.flowmapData);
73
+ }
74
+
75
+ async getLocationById(id: string): Promise<L | Cluster | undefined> {
76
+ if (!this.flowmapState || !this.flowmapData) {
77
+ return undefined;
78
+ }
79
+ const clusterIndex = this.selectors.getClusterIndex(
80
+ this.flowmapState,
81
+ this.flowmapData,
82
+ );
83
+ if (clusterIndex) {
84
+ const cluster = clusterIndex.getClusterById(id);
85
+ if (cluster) {
86
+ return cluster;
87
+ }
88
+ }
89
+ const locationsById = this.selectors.getLocationsById(
90
+ this.flowmapState,
91
+ this.flowmapData,
92
+ );
93
+ return locationsById?.get(id);
94
+ }
95
+
96
+ async getTotalsForLocation(id: string): Promise<LocationTotals | undefined> {
97
+ if (!this.flowmapState || !this.flowmapData) {
98
+ return undefined;
99
+ }
100
+ return this.selectors
101
+ .getLocationTotals(this.flowmapState, this.flowmapData)
102
+ ?.get(id);
103
+ }
104
+
105
+ async getViewportForLocations(
106
+ dims: [number, number],
107
+ opts?: GetViewStateOptions,
108
+ ): Promise<ViewportProps | undefined> {
109
+ if (!this.flowmapData?.locations) {
110
+ return undefined;
111
+ }
112
+ // @ts-ignore
113
+ return getViewStateForLocations(
114
+ this.flowmapData.locations,
115
+ (loc) => [
116
+ this.selectors.accessors.getLocationLon(loc),
117
+ this.selectors.accessors.getLocationLat(loc),
118
+ ],
119
+ dims,
120
+ opts,
121
+ );
122
+ }
123
+
124
+ async updateLayersData(
125
+ setLayersData: (layersData: LayersData | undefined) => void,
126
+ ) {
127
+ setLayersData(await this.getLayersData());
128
+ }
129
+ }
@@ -0,0 +1,34 @@
1
+ import {WebMercatorViewport} from '@math.gl/web-mercator';
2
+ import {ViewportProps} from './types';
3
+ import {scaleLinear} from 'd3-scale';
4
+
5
+ // TODO: use re-reselect
6
+
7
+ export const getViewportBoundingBox = (
8
+ viewport: ViewportProps,
9
+ maxLocationCircleSize = 0,
10
+ ): [number, number, number, number] => {
11
+ const pad = maxLocationCircleSize;
12
+ const bounds = new WebMercatorViewport({
13
+ ...viewport,
14
+ width: viewport.width + pad * 2,
15
+ height: viewport.height + pad * 2,
16
+ }).getBounds();
17
+ return [bounds[0][0], bounds[0][1], bounds[1][0], bounds[1][1]];
18
+ };
19
+
20
+ export const getFlowThicknessScale = (
21
+ magnitudeExtent: [number, number] | undefined,
22
+ ) => {
23
+ if (!magnitudeExtent) return undefined;
24
+ return scaleLinear()
25
+ .range([0.025, 0.5])
26
+ .domain([
27
+ 0,
28
+ // should support diff mode too
29
+ Math.max.apply(
30
+ null,
31
+ magnitudeExtent.map((x: number | undefined) => Math.abs(x || 0)),
32
+ ),
33
+ ]);
34
+ };
package/src/types.ts CHANGED
@@ -1,6 +1,7 @@
1
- export type FlowMapData<L, F> = {
2
- locations: L[] | undefined;
3
- flows: F[] | undefined;
1
+ export type FlowmapData<L, F> = {
2
+ locations: Iterable<L> | undefined;
3
+ flows: Iterable<F> | undefined;
4
+ clusterLevels?: ClusterLevels;
4
5
  };
5
6
 
6
7
  export interface ViewState {
@@ -26,14 +27,15 @@ export interface FlowAccessors<F> {
26
27
  export interface LocationAccessors<L> {
27
28
  getLocationId: LocationAccessor<L, string>;
28
29
  getLocationName?: LocationAccessor<L, string>;
29
- getLocationCentroid: LocationAccessor<L, [number, number]>;
30
+ getLocationLat: LocationAccessor<L, number>;
31
+ getLocationLon: LocationAccessor<L, number>;
30
32
  getLocationClusterName?: (locationIds: string[]) => string;
31
33
  // getLocationTotalIn?: LocationAccessor<number>;
32
34
  // getLocationTotalOut?: LocationAccessor<number>;
33
35
  // getLocationTotalInternal?: LocationAccessor<number>;
34
36
  }
35
37
 
36
- export type FlowMapDataAccessors<L, F> = LocationAccessors<L> &
38
+ export type FlowmapDataAccessors<L, F> = LocationAccessors<L> &
37
39
  FlowAccessors<F>;
38
40
 
39
41
  export interface LocationTotals {
@@ -58,9 +60,9 @@ export interface ViewportProps {
58
60
  height: number;
59
61
  latitude: number;
60
62
  longitude: number;
61
- zoom: number;
62
- bearing: number;
63
- pitch: number;
63
+ zoom?: number;
64
+ bearing?: number;
65
+ pitch?: number;
64
66
  altitude?: number;
65
67
  maxZoom?: number;
66
68
  minZoom?: number;
@@ -75,7 +77,8 @@ export interface ViewportProps {
75
77
  export interface ClusterNode {
76
78
  id: string;
77
79
  zoom: number;
78
- centroid: [number, number];
80
+ lat: number;
81
+ lon: number;
79
82
  }
80
83
 
81
84
  export interface ClusterLevel {
@@ -113,9 +116,9 @@ export function isAggregateFlow(
113
116
  ): flow is AggregateFlow {
114
117
  return (
115
118
  flow &&
116
- flow.origin !== undefined &&
117
- flow.dest !== undefined &&
118
- flow.count !== undefined &&
119
+ // flow.origin !== undefined &&
120
+ // flow.dest !== undefined &&
121
+ // flow.count !== undefined &&
119
122
  (flow.aggregate ? true : false)
120
123
  );
121
124
  }
package/src/util.ts CHANGED
@@ -1,9 +1,5 @@
1
1
  import {createSelectorCreator, defaultMemoize} from 'reselect';
2
2
 
3
- export function flatMap<S, T>(xs: S[], f: (item: S) => T | T[]): T[] {
4
- return xs.reduce((acc: T[], x: S) => acc.concat(f(x)), []);
5
- }
6
-
7
3
  export const createDebugSelector = createSelectorCreator(defaultMemoize, {
8
4
  equalityCheck: (previousVal: any, currentVal: any) => {
9
5
  const rv = currentVal === previousVal;
@@ -1,15 +0,0 @@
1
- import { AggregateFlow, ClusterNode, FlowMapDataAccessors } from './types';
2
- export default class FlowMapAggregateAccessors<L, F> {
3
- private accessors;
4
- constructor(accessors: FlowMapDataAccessors<L, F>);
5
- setAccessors(accessors: FlowMapDataAccessors<L, F>): void;
6
- getFlowMapDataAccessors(): FlowMapDataAccessors<L, F>;
7
- getLocationId: (location: L | ClusterNode) => string;
8
- getLocationName: (location: L | ClusterNode) => string;
9
- getLocationCentroid: (location: L | ClusterNode) => [number, number];
10
- getFlowOriginId: (f: F | AggregateFlow) => string;
11
- getFlowDestId: (f: F | AggregateFlow) => string;
12
- getFlowMagnitude: (f: F | AggregateFlow) => number;
13
- getFlowTime: (f: F) => Date | undefined;
14
- }
15
- //# sourceMappingURL=FlowMapAggregateAccessors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FlowMapAggregateAccessors.d.ts","sourceRoot":"","sources":["../src/FlowMapAggregateAccessors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,WAAW,EACX,oBAAoB,EAIrB,MAAM,SAAS,CAAC;AAEjB,MAAM,CAAC,OAAO,OAAO,yBAAyB,CAAC,CAAC,EAAE,CAAC;IACjD,OAAO,CAAC,SAAS,CAA6B;gBAClC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAIjD,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAIlD,uBAAuB;IAIvB,aAAa,aAAc,CAAC,GAAG,WAAW,KAAG,MAAM,CAGN;IAE7C,eAAe,aAAc,CAAC,GAAG,WAAW,KAAG,MAAM,CAGJ;IAMjD,mBAAmB,aAAc,CAAC,GAAG,WAAW,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGhB;IAEnD,eAAe,MAAO,CAAC,GAAG,aAAa,YAErC;IAEF,aAAa,MAAO,CAAC,GAAG,aAAa,YAEnC;IAEF,gBAAgB,MAAO,CAAC,GAAG,aAAa,YAEtC;IAGF,WAAW,MAAO,CAAC,sBAGjB;CACH"}
@@ -1,43 +0,0 @@
1
- import { isAggregateFlow, isCluster, isLocationClusterNode, } from './types';
2
- export default class FlowMapAggregateAccessors {
3
- constructor(accessors) {
4
- this.getLocationId = (location) => isLocationClusterNode(location)
5
- ? location.id
6
- : this.accessors.getLocationId(location);
7
- this.getLocationName = (location) => {
8
- var _a;
9
- return (_a = (isLocationClusterNode(location) && isCluster(location)
10
- ? location.name
11
- : undefined)) !== null && _a !== void 0 ? _a : this.getLocationId(location);
12
- };
13
- // ? location.name // TODO getLocationName for locations and clusters
14
- // : this.accessors.getLocationName
15
- // ? this.accessors.getLocationName(location)
16
- // : this.getLocationId(location);
17
- this.getLocationCentroid = (location) => isLocationClusterNode(location)
18
- ? location.centroid
19
- : this.accessors.getLocationCentroid(location);
20
- this.getFlowOriginId = (f) => {
21
- return isAggregateFlow(f) ? f.origin : this.accessors.getFlowOriginId(f);
22
- };
23
- this.getFlowDestId = (f) => {
24
- return isAggregateFlow(f) ? f.dest : this.accessors.getFlowDestId(f);
25
- };
26
- this.getFlowMagnitude = (f) => {
27
- return isAggregateFlow(f) ? f.count : this.accessors.getFlowMagnitude(f);
28
- };
29
- // Note: Aggregate flows have no time
30
- this.getFlowTime = (f) => {
31
- const { getFlowTime } = this.accessors;
32
- return getFlowTime ? getFlowTime(f) : undefined;
33
- };
34
- this.accessors = accessors;
35
- }
36
- setAccessors(accessors) {
37
- this.accessors = accessors;
38
- }
39
- getFlowMapDataAccessors() {
40
- return this.accessors;
41
- }
42
- }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd01hcEFnZ3JlZ2F0ZUFjY2Vzc29ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9GbG93TWFwQWdncmVnYXRlQWNjZXNzb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxlQUFlLEVBQ2YsU0FBUyxFQUNULHFCQUFxQixHQUN0QixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLENBQUMsT0FBTyxPQUFPLHlCQUF5QjtJQUU1QyxZQUFZLFNBQXFDO1FBWWpELGtCQUFhLEdBQUcsQ0FBQyxRQUF5QixFQUFVLEVBQUUsQ0FDcEQscUJBQXFCLENBQUMsUUFBUSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3QyxvQkFBZSxHQUFHLENBQUMsUUFBeUIsRUFBVSxFQUFFOztZQUN0RCxPQUFBLE1BQUEsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNyRCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQ2YsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxtQ0FBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBQUEsQ0FBQztRQUNqRCxxRUFBcUU7UUFDckUsbUNBQW1DO1FBQ25DLDZDQUE2QztRQUM3QyxrQ0FBa0M7UUFFbEMsd0JBQW1CLEdBQUcsQ0FBQyxRQUF5QixFQUFvQixFQUFFLENBQ3BFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztZQUM3QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbkQsb0JBQWUsR0FBRyxDQUFDLENBQW9CLEVBQUUsRUFBRTtZQUN6QyxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDO1FBRUYsa0JBQWEsR0FBRyxDQUFDLENBQW9CLEVBQUUsRUFBRTtZQUN2QyxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDO1FBRUYscUJBQWdCLEdBQUcsQ0FBQyxDQUFvQixFQUFFLEVBQUU7WUFDMUMsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDO1FBRUYscUNBQXFDO1FBQ3JDLGdCQUFXLEdBQUcsQ0FBQyxDQUFJLEVBQUUsRUFBRTtZQUNyQixNQUFNLEVBQUMsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNyQyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbEQsQ0FBQyxDQUFDO1FBOUNBLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBcUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQXNDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFnZ3JlZ2F0ZUZsb3csXG4gIENsdXN0ZXJOb2RlLFxuICBGbG93TWFwRGF0YUFjY2Vzc29ycyxcbiAgaXNBZ2dyZWdhdGVGbG93LFxuICBpc0NsdXN0ZXIsXG4gIGlzTG9jYXRpb25DbHVzdGVyTm9kZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3dNYXBBZ2dyZWdhdGVBY2Nlc3NvcnM8TCwgRj4ge1xuICBwcml2YXRlIGFjY2Vzc29yczogRmxvd01hcERhdGFBY2Nlc3NvcnM8TCwgRj47XG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yczogRmxvd01hcERhdGFBY2Nlc3NvcnM8TCwgRj4pIHtcbiAgICB0aGlzLmFjY2Vzc29ycyA9IGFjY2Vzc29ycztcbiAgfVxuXG4gIHNldEFjY2Vzc29ycyhhY2Nlc3NvcnM6IEZsb3dNYXBEYXRhQWNjZXNzb3JzPEwsIEY+KSB7XG4gICAgdGhpcy5hY2Nlc3NvcnMgPSBhY2Nlc3NvcnM7XG4gIH1cblxuICBnZXRGbG93TWFwRGF0YUFjY2Vzc29ycygpIHtcbiAgICByZXR1cm4gdGhpcy5hY2Nlc3NvcnM7XG4gIH1cblxuICBnZXRMb2NhdGlvbklkID0gKGxvY2F0aW9uOiBMIHwgQ2x1c3Rlck5vZGUpOiBzdHJpbmcgPT5cbiAgICBpc0xvY2F0aW9uQ2x1c3Rlck5vZGUobG9jYXRpb24pXG4gICAgICA/IGxvY2F0aW9uLmlkXG4gICAgICA6IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuXG4gIGdldExvY2F0aW9uTmFtZSA9IChsb2NhdGlvbjogTCB8IENsdXN0ZXJOb2RlKTogc3RyaW5nID0+XG4gICAgKGlzTG9jYXRpb25DbHVzdGVyTm9kZShsb2NhdGlvbikgJiYgaXNDbHVzdGVyKGxvY2F0aW9uKVxuICAgICAgPyBsb2NhdGlvbi5uYW1lXG4gICAgICA6IHVuZGVmaW5lZCkgPz8gdGhpcy5nZXRMb2NhdGlvbklkKGxvY2F0aW9uKTtcbiAgLy8gPyBsb2NhdGlvbi5uYW1lIC8vIFRPRE8gZ2V0TG9jYXRpb25OYW1lIGZvciBsb2NhdGlvbnMgYW5kIGNsdXN0ZXJzXG4gIC8vIDogdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25OYW1lXG4gIC8vID8gdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25OYW1lKGxvY2F0aW9uKVxuICAvLyA6IHRoaXMuZ2V0TG9jYXRpb25JZChsb2NhdGlvbik7XG5cbiAgZ2V0TG9jYXRpb25DZW50cm9pZCA9IChsb2NhdGlvbjogTCB8IENsdXN0ZXJOb2RlKTogW251bWJlciwgbnVtYmVyXSA9PlxuICAgIGlzTG9jYXRpb25DbHVzdGVyTm9kZShsb2NhdGlvbilcbiAgICAgID8gbG9jYXRpb24uY2VudHJvaWRcbiAgICAgIDogdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25DZW50cm9pZChsb2NhdGlvbik7XG5cbiAgZ2V0Rmxvd09yaWdpbklkID0gKGY6IEYgfCBBZ2dyZWdhdGVGbG93KSA9PiB7XG4gICAgcmV0dXJuIGlzQWdncmVnYXRlRmxvdyhmKSA/IGYub3JpZ2luIDogdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGYpO1xuICB9O1xuXG4gIGdldEZsb3dEZXN0SWQgPSAoZjogRiB8IEFnZ3JlZ2F0ZUZsb3cpID0+IHtcbiAgICByZXR1cm4gaXNBZ2dyZWdhdGVGbG93KGYpID8gZi5kZXN0IDogdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmKTtcbiAgfTtcblxuICBnZXRGbG93TWFnbml0dWRlID0gKGY6IEYgfCBBZ2dyZWdhdGVGbG93KSA9PiB7XG4gICAgcmV0dXJuIGlzQWdncmVnYXRlRmxvdyhmKSA/IGYuY291bnQgOiB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGYpO1xuICB9O1xuXG4gIC8vIE5vdGU6IEFnZ3JlZ2F0ZSBmbG93cyBoYXZlIG5vIHRpbWVcbiAgZ2V0Rmxvd1RpbWUgPSAoZjogRikgPT4ge1xuICAgIGNvbnN0IHtnZXRGbG93VGltZX0gPSB0aGlzLmFjY2Vzc29ycztcbiAgICByZXR1cm4gZ2V0Rmxvd1RpbWUgPyBnZXRGbG93VGltZShmKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"FlowMapSelectors.d.ts","sourceRoot":"","sources":["../src/FlowMapSelectors.ts"],"names":[],"mappings":"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"}