@fscharter/flowmap-data 8.0.2-fsc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/FlowmapAggregateAccessors.d.ts +16 -0
  2. package/dist/FlowmapAggregateAccessors.d.ts.map +1 -0
  3. package/dist/FlowmapAggregateAccessors.js +53 -0
  4. package/dist/FlowmapSelectors.d.ts +143 -0
  5. package/dist/FlowmapSelectors.d.ts.map +1 -0
  6. package/dist/FlowmapSelectors.js +881 -0
  7. package/dist/FlowmapState.d.ts +31 -0
  8. package/dist/FlowmapState.d.ts.map +1 -0
  9. package/dist/FlowmapState.js +7 -0
  10. package/dist/cluster/ClusterIndex.d.ts +42 -0
  11. package/dist/cluster/ClusterIndex.d.ts.map +1 -0
  12. package/dist/cluster/ClusterIndex.js +166 -0
  13. package/dist/cluster/cluster.d.ts +51 -0
  14. package/dist/cluster/cluster.d.ts.map +1 -0
  15. package/dist/cluster/cluster.js +267 -0
  16. package/dist/colors.d.ts +103 -0
  17. package/dist/colors.d.ts.map +1 -0
  18. package/dist/colors.js +487 -0
  19. package/dist/getViewStateForLocations.d.ts +23 -0
  20. package/dist/getViewStateForLocations.d.ts.map +1 -0
  21. package/dist/getViewStateForLocations.js +54 -0
  22. package/dist/index.d.ts +14 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +18 -0
  25. package/dist/provider/FlowmapDataProvider.d.ts +21 -0
  26. package/dist/provider/FlowmapDataProvider.d.ts.map +1 -0
  27. package/dist/provider/FlowmapDataProvider.js +22 -0
  28. package/dist/provider/LocalFlowmapDataProvider.d.ts +31 -0
  29. package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
  30. package/dist/provider/LocalFlowmapDataProvider.js +115 -0
  31. package/dist/selector-functions.d.ts +10 -0
  32. package/dist/selector-functions.d.ts.map +1 -0
  33. package/dist/selector-functions.js +65 -0
  34. package/dist/time.d.ts +24 -0
  35. package/dist/time.d.ts.map +1 -0
  36. package/dist/time.js +131 -0
  37. package/dist/types.d.ts +120 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +28 -0
  40. package/dist/util.d.ts +5 -0
  41. package/dist/util.d.ts.map +1 -0
  42. package/dist/util.js +16 -0
  43. package/package.json +48 -0
  44. package/src/FlowmapAggregateAccessors.ts +76 -0
  45. package/src/FlowmapSelectors.ts +1539 -0
  46. package/src/FlowmapState.ts +40 -0
  47. package/src/cluster/ClusterIndex.ts +261 -0
  48. package/src/cluster/cluster.ts +394 -0
  49. package/src/colors.ts +771 -0
  50. package/src/getViewStateForLocations.ts +86 -0
  51. package/src/index.ts +19 -0
  52. package/src/provider/FlowmapDataProvider.ts +81 -0
  53. package/src/provider/LocalFlowmapDataProvider.ts +185 -0
  54. package/src/selector-functions.ts +93 -0
  55. package/src/time.ts +166 -0
  56. package/src/types.ts +172 -0
  57. package/src/util.ts +17 -0
  58. package/tsconfig.json +11 -0
  59. package/typings.d.ts +1 -0
@@ -0,0 +1,120 @@
1
+ export type FlowmapData<L, F> = {
2
+ locations: Iterable<L> | undefined;
3
+ flows: Iterable<F> | undefined;
4
+ clusterLevels?: ClusterLevels;
5
+ };
6
+ export interface ViewState {
7
+ latitude: number;
8
+ longitude: number;
9
+ zoom: number;
10
+ bearing?: number;
11
+ pitch?: number;
12
+ altitude?: number;
13
+ }
14
+ export type FlowAccessor<F, T> = (flow: F) => T;
15
+ export type LocationAccessor<L, T> = (location: L) => T;
16
+ export interface FlowAccessors<F> {
17
+ getFlowOriginId: FlowAccessor<F, string | number>;
18
+ getFlowDestId: FlowAccessor<F, string | number>;
19
+ getFlowMagnitude: FlowAccessor<F, number>;
20
+ getFlowTime?: FlowAccessor<F, Date>;
21
+ }
22
+ export interface LocationAccessors<L> {
23
+ getLocationId: LocationAccessor<L, string | number>;
24
+ getLocationName?: LocationAccessor<L, string>;
25
+ getLocationLat: LocationAccessor<L, number>;
26
+ getLocationLon: LocationAccessor<L, number>;
27
+ getLocationClusterName?: (locationIds: (string | number)[]) => string;
28
+ }
29
+ export type FlowmapDataAccessors<L, F> = LocationAccessors<L> & FlowAccessors<F>;
30
+ export interface LocationTotals {
31
+ incomingCount: number;
32
+ outgoingCount: number;
33
+ internalCount: number;
34
+ }
35
+ export interface CountByTime {
36
+ time: Date;
37
+ count: number;
38
+ }
39
+ export interface ViewportProps {
40
+ width: number;
41
+ height: number;
42
+ latitude: number;
43
+ longitude: number;
44
+ zoom?: number;
45
+ bearing?: number;
46
+ pitch?: number;
47
+ altitude?: number;
48
+ maxZoom?: number;
49
+ minZoom?: number;
50
+ maxPitch?: number;
51
+ minPitch?: number;
52
+ transitionDuration?: number | 'auto';
53
+ transitionInterpolator?: any;
54
+ transitionInterruption?: any;
55
+ transitionEasing?: any;
56
+ }
57
+ export interface ClusterNode {
58
+ id: string | number;
59
+ zoom: number;
60
+ lat: number;
61
+ lon: number;
62
+ }
63
+ export interface ClusterLevel {
64
+ zoom: number;
65
+ nodes: ClusterNode[];
66
+ }
67
+ export type ClusterLevels = ClusterLevel[];
68
+ export interface Cluster extends ClusterNode {
69
+ name?: string;
70
+ children: string[];
71
+ }
72
+ export declare function isCluster(c: ClusterNode): c is Cluster;
73
+ export declare function isLocationClusterNode<L>(l: L | ClusterNode): l is ClusterNode;
74
+ export interface AggregateFlow {
75
+ origin: string | number;
76
+ dest: string | number;
77
+ count: number;
78
+ aggregate: true;
79
+ }
80
+ export declare function isAggregateFlow(flow: Record<string, any>): flow is AggregateFlow;
81
+ export interface FlowCountsMapReduce<F, T = any> {
82
+ map: (flow: F) => T;
83
+ reduce: (accumulated: T, val: T) => T;
84
+ }
85
+ export declare enum LocationFilterMode {
86
+ ALL = "ALL",
87
+ INCOMING = "INCOMING",
88
+ OUTGOING = "OUTGOING",
89
+ BETWEEN = "BETWEEN"
90
+ }
91
+ export interface FlowCirclesLayerAttributes {
92
+ length: number;
93
+ attributes: {
94
+ getPosition: LayersDataAttrValues<Float32Array>;
95
+ getColor: LayersDataAttrValues<Uint8Array>;
96
+ getInRadius: LayersDataAttrValues<Float32Array>;
97
+ getOutRadius: LayersDataAttrValues<Float32Array>;
98
+ };
99
+ }
100
+ export interface FlowLinesLayerAttributes {
101
+ length: number;
102
+ attributes: {
103
+ getSourcePosition: LayersDataAttrValues<Float32Array>;
104
+ getTargetPosition: LayersDataAttrValues<Float32Array>;
105
+ getThickness: LayersDataAttrValues<Float32Array>;
106
+ getColor: LayersDataAttrValues<Uint8Array>;
107
+ getEndpointOffsets: LayersDataAttrValues<Float32Array>;
108
+ getStaggering?: LayersDataAttrValues<Float32Array>;
109
+ };
110
+ }
111
+ export interface LayersData {
112
+ circleAttributes: FlowCirclesLayerAttributes;
113
+ lineAttributes: FlowLinesLayerAttributes;
114
+ locationLabels?: string[];
115
+ }
116
+ export type LayersDataAttrValues<T> = {
117
+ value: T;
118
+ size: number;
119
+ };
120
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export function isCluster(c) {
7
+ const { children } = c;
8
+ return children && children.length > 0;
9
+ }
10
+ export function isLocationClusterNode(l) {
11
+ const { zoom } = l;
12
+ return zoom !== undefined;
13
+ }
14
+ export function isAggregateFlow(flow) {
15
+ return (flow &&
16
+ // flow.origin !== undefined &&
17
+ // flow.dest !== undefined &&
18
+ // flow.count !== undefined &&
19
+ (flow.aggregate ? true : false));
20
+ }
21
+ export var LocationFilterMode;
22
+ (function (LocationFilterMode) {
23
+ LocationFilterMode["ALL"] = "ALL";
24
+ LocationFilterMode["INCOMING"] = "INCOMING";
25
+ LocationFilterMode["OUTGOING"] = "OUTGOING";
26
+ LocationFilterMode["BETWEEN"] = "BETWEEN";
27
+ })(LocationFilterMode || (LocationFilterMode = {}));
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQWtHSCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQWM7SUFDdEMsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLENBQVksQ0FBQztJQUNoQyxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFJLENBQWtCO0lBQ3pELE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxDQUFnQixDQUFDO0lBQ2hDLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUM1QixDQUFDO0FBU0QsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsSUFBeUI7SUFFekIsT0FBTyxDQUNMLElBQUk7UUFDSiwrQkFBK0I7UUFDL0IsNkJBQTZCO1FBQzdCLDhCQUE4QjtRQUM5QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQ2hDLENBQUM7QUFDSixDQUFDO0FBT0QsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUM1QixpQ0FBVyxDQUFBO0lBQ1gsMkNBQXFCLENBQUE7SUFDckIsMkNBQXFCLENBQUE7SUFDckIseUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSBGbG93bWFwLmdsIGNvbnRyaWJ1dG9yc1xuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAgVGVyYWx5dGljc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5leHBvcnQgdHlwZSBGbG93bWFwRGF0YTxMLCBGPiA9IHtcbiAgbG9jYXRpb25zOiBJdGVyYWJsZTxMPiB8IHVuZGVmaW5lZDtcbiAgZmxvd3M6IEl0ZXJhYmxlPEY+IHwgdW5kZWZpbmVkO1xuICBjbHVzdGVyTGV2ZWxzPzogQ2x1c3RlckxldmVscztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld1N0YXRlIHtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gIHpvb206IG51bWJlcjtcbiAgYmVhcmluZz86IG51bWJlcjtcbiAgcGl0Y2g/OiBudW1iZXI7XG4gIGFsdGl0dWRlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBGbG93QWNjZXNzb3I8RiwgVD4gPSAoZmxvdzogRikgPT4gVDsgLy8gb2JqZWN0SW5mbz86IEFjY2Vzc29yT2JqZWN0SW5mbyxcbmV4cG9ydCB0eXBlIExvY2F0aW9uQWNjZXNzb3I8TCwgVD4gPSAobG9jYXRpb246IEwpID0+IFQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FjY2Vzc29yczxGPiB7XG4gIGdldEZsb3dPcmlnaW5JZDogRmxvd0FjY2Vzc29yPEYsIHN0cmluZyB8IG51bWJlcj47XG4gIGdldEZsb3dEZXN0SWQ6IEZsb3dBY2Nlc3NvcjxGLCBzdHJpbmcgfCBudW1iZXI+O1xuICBnZXRGbG93TWFnbml0dWRlOiBGbG93QWNjZXNzb3I8RiwgbnVtYmVyPjtcbiAgZ2V0Rmxvd1RpbWU/OiBGbG93QWNjZXNzb3I8RiwgRGF0ZT47IC8vIFRPRE86IHVzZSBudW1iZXIgaW5zdGVhZCBvZiBEYXRlXG4gIC8vIGdldEZsb3dDb2xvcj86IEZsb3dBY2Nlc3NvcjxzdHJpbmcgfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQWNjZXNzb3JzPEw+IHtcbiAgZ2V0TG9jYXRpb25JZDogTG9jYXRpb25BY2Nlc3NvcjxMLCBzdHJpbmcgfCBudW1iZXI+O1xuICBnZXRMb2NhdGlvbk5hbWU/OiBMb2NhdGlvbkFjY2Vzc29yPEwsIHN0cmluZz47XG4gIGdldExvY2F0aW9uTGF0OiBMb2NhdGlvbkFjY2Vzc29yPEwsIG51bWJlcj47XG4gIGdldExvY2F0aW9uTG9uOiBMb2NhdGlvbkFjY2Vzc29yPEwsIG51bWJlcj47XG4gIGdldExvY2F0aW9uQ2x1c3Rlck5hbWU/OiAobG9jYXRpb25JZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IHN0cmluZztcbiAgLy8gZ2V0TG9jYXRpb25Ub3RhbEluPzogTG9jYXRpb25BY2Nlc3NvcjxudW1iZXI+O1xuICAvLyBnZXRMb2NhdGlvblRvdGFsT3V0PzogTG9jYXRpb25BY2Nlc3NvcjxudW1iZXI+O1xuICAvLyBnZXRMb2NhdGlvblRvdGFsSW50ZXJuYWw/OiBMb2NhdGlvbkFjY2Vzc29yPG51bWJlcj47XG59XG5cbmV4cG9ydCB0eXBlIEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+ID0gTG9jYXRpb25BY2Nlc3NvcnM8TD4gJlxuICBGbG93QWNjZXNzb3JzPEY+O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uVG90YWxzIHtcbiAgaW5jb21pbmdDb3VudDogbnVtYmVyO1xuICBvdXRnb2luZ0NvdW50OiBudW1iZXI7XG4gIGludGVybmFsQ291bnQ6IG51bWJlcjtcbn1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbnNUb3RhbHMge1xuLy8gICBpbmNvbWluZzoge1tpZDogc3RyaW5nXTogbnVtYmVyfTtcbi8vICAgb3V0Z29pbmc6IHtbaWQ6IHN0cmluZ106IG51bWJlcn07XG4vLyAgIGludGVybmFsOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9O1xuLy8gfVxuXG5leHBvcnQgaW50ZXJmYWNlIENvdW50QnlUaW1lIHtcbiAgdGltZTogRGF0ZTtcbiAgY291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydFByb3BzIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xuICB6b29tPzogbnVtYmVyO1xuICBiZWFyaW5nPzogbnVtYmVyO1xuICBwaXRjaD86IG51bWJlcjtcbiAgYWx0aXR1ZGU/OiBudW1iZXI7XG4gIG1heFpvb20/OiBudW1iZXI7XG4gIG1pblpvb20/OiBudW1iZXI7XG4gIG1heFBpdGNoPzogbnVtYmVyO1xuICBtaW5QaXRjaD86IG51bWJlcjtcbiAgdHJhbnNpdGlvbkR1cmF0aW9uPzogbnVtYmVyIHwgJ2F1dG8nO1xuICB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yPzogYW55O1xuICB0cmFuc2l0aW9uSW50ZXJydXB0aW9uPzogYW55O1xuICB0cmFuc2l0aW9uRWFzaW5nPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJOb2RlIHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgem9vbTogbnVtYmVyO1xuICBsYXQ6IG51bWJlcjtcbiAgbG9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlckxldmVsIHtcbiAgem9vbTogbnVtYmVyO1xuICBub2RlczogQ2x1c3Rlck5vZGVbXTtcbn1cblxuZXhwb3J0IHR5cGUgQ2x1c3RlckxldmVscyA9IENsdXN0ZXJMZXZlbFtdO1xuXG4vLyBub24tbGVhZiBjbHVzdGVyIG5vZGVcbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlciBleHRlbmRzIENsdXN0ZXJOb2RlIHtcbiAgbmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW46IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDbHVzdGVyKGM6IENsdXN0ZXJOb2RlKTogYyBpcyBDbHVzdGVyIHtcbiAgY29uc3Qge2NoaWxkcmVufSA9IGMgYXMgQ2x1c3RlcjtcbiAgcmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xvY2F0aW9uQ2x1c3Rlck5vZGU8TD4obDogTCB8IENsdXN0ZXJOb2RlKTogbCBpcyBDbHVzdGVyTm9kZSB7XG4gIGNvbnN0IHt6b29tfSA9IGwgYXMgQ2x1c3Rlck5vZGU7XG4gIHJldHVybiB6b29tICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdncmVnYXRlRmxvdyB7XG4gIG9yaWdpbjogc3RyaW5nIHwgbnVtYmVyO1xuICBkZXN0OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG4gIGFnZ3JlZ2F0ZTogdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWdncmVnYXRlRmxvdyhcbiAgZmxvdzogUmVjb3JkPHN0cmluZywgYW55Pixcbik6IGZsb3cgaXMgQWdncmVnYXRlRmxvdyB7XG4gIHJldHVybiAoXG4gICAgZmxvdyAmJlxuICAgIC8vIGZsb3cub3JpZ2luICE9PSB1bmRlZmluZWQgJiZcbiAgICAvLyBmbG93LmRlc3QgIT09IHVuZGVmaW5lZCAmJlxuICAgIC8vIGZsb3cuY291bnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIChmbG93LmFnZ3JlZ2F0ZSA/IHRydWUgOiBmYWxzZSlcbiAgKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q291bnRzTWFwUmVkdWNlPEYsIFQgPSBhbnk+IHtcbiAgbWFwOiAoZmxvdzogRikgPT4gVDtcbiAgcmVkdWNlOiAoYWNjdW11bGF0ZWQ6IFQsIHZhbDogVCkgPT4gVDtcbn1cblxuZXhwb3J0IGVudW0gTG9jYXRpb25GaWx0ZXJNb2RlIHtcbiAgQUxMID0gJ0FMTCcsXG4gIElOQ09NSU5HID0gJ0lOQ09NSU5HJyxcbiAgT1VUR09JTkcgPSAnT1VUR09JTkcnLFxuICBCRVRXRUVOID0gJ0JFVFdFRU4nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIGF0dHJpYnV0ZXM6IHtcbiAgICBnZXRQb3NpdGlvbjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRDb2xvcjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8VWludDhBcnJheT47XG4gICAgZ2V0SW5SYWRpdXM6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0T3V0UmFkaXVzOiBMYXllcnNEYXRhQXR0clZhbHVlczxGbG9hdDMyQXJyYXk+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dMaW5lc0xheWVyQXR0cmlidXRlcyB7XG4gIGxlbmd0aDogbnVtYmVyO1xuICBhdHRyaWJ1dGVzOiB7XG4gICAgZ2V0U291cmNlUG9zaXRpb246IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0VGFyZ2V0UG9zaXRpb246IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0VGhpY2tuZXNzOiBMYXllcnNEYXRhQXR0clZhbHVlczxGbG9hdDMyQXJyYXk+O1xuICAgIGdldENvbG9yOiBMYXllcnNEYXRhQXR0clZhbHVlczxVaW50OEFycmF5PjtcbiAgICBnZXRFbmRwb2ludE9mZnNldHM6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0U3RhZ2dlcmluZz86IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5ZXJzRGF0YSB7XG4gIGNpcmNsZUF0dHJpYnV0ZXM6IEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzO1xuICBsaW5lQXR0cmlidXRlczogRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzO1xuICBsb2NhdGlvbkxhYmVscz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBMYXllcnNEYXRhQXR0clZhbHVlczxUPiA9IHt2YWx1ZTogVDsgc2l6ZTogbnVtYmVyfTtcbiJdfQ==
package/dist/util.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { defaultMemoize } from 'reselect';
2
+ export declare const createDebugSelector: import("reselect").CreateSelectorFunction<(...args: unknown[]) => unknown, typeof defaultMemoize, [equalityCheckOrOptions?: import("reselect").EqualityFn | import("reselect").DefaultMemoizeOptions | undefined], {
3
+ clearCache: () => void;
4
+ }>;
5
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAMA,OAAO,EAAwB,cAAc,EAAC,MAAM,UAAU,CAAC;AAE/D,eAAO,MAAM,mBAAmB;;EAQ9B,CAAC"}
package/dist/util.js ADDED
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { createSelectorCreator, defaultMemoize } from 'reselect';
7
+ export const createDebugSelector = createSelectorCreator(defaultMemoize, {
8
+ equalityCheck: (previousVal, currentVal) => {
9
+ const rv = currentVal === previousVal;
10
+ if (!rv) {
11
+ console.log('Selector param value changed', currentVal);
12
+ }
13
+ return rv;
14
+ },
15
+ });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDLGNBQWMsRUFBRTtJQUN2RSxhQUFhLEVBQUUsQ0FBQyxXQUFnQixFQUFFLFVBQWUsRUFBRSxFQUFFO1FBQ25ELE1BQU0sRUFBRSxHQUFHLFVBQVUsS0FBSyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgRmxvd21hcC5nbCBjb250cmlidXRvcnNcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFRlcmFseXRpY3NcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtjcmVhdGVTZWxlY3RvckNyZWF0b3IsIGRlZmF1bHRNZW1vaXplfSBmcm9tICdyZXNlbGVjdCc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWJ1Z1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3JDcmVhdG9yKGRlZmF1bHRNZW1vaXplLCB7XG4gIGVxdWFsaXR5Q2hlY2s6IChwcmV2aW91c1ZhbDogYW55LCBjdXJyZW50VmFsOiBhbnkpID0+IHtcbiAgICBjb25zdCBydiA9IGN1cnJlbnRWYWwgPT09IHByZXZpb3VzVmFsO1xuICAgIGlmICghcnYpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZWxlY3RvciBwYXJhbSB2YWx1ZSBjaGFuZ2VkJywgY3VycmVudFZhbCk7XG4gICAgfVxuICAgIHJldHVybiBydjtcbiAgfSxcbn0pO1xuIl19
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@fscharter/flowmap-data",
3
+ "version": "8.0.2-fsc.1",
4
+ "main": "dist/index.js",
5
+ "module": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "repository": "git@github.com:visgl/flowmap.gl.git",
8
+ "author": "Ilya Boyandin <ilya@boyandin.me>",
9
+ "license": "Apache-2.0",
10
+ "type": "module",
11
+ "scripts": {
12
+ "dev": "tsc --watch",
13
+ "build": "rm -rf dist && tsc",
14
+ "prepare": "yarn build"
15
+ },
16
+ "dependencies": {
17
+ "d3-array": "^3.2.4",
18
+ "d3-color": "2 - 3",
19
+ "d3-geo": "^3.1.0",
20
+ "d3-interpolate": "2 - 3",
21
+ "d3-scale": "3 - 4",
22
+ "d3-scale-chromatic": "2 - 3",
23
+ "d3-time": "^3.1.0",
24
+ "d3-time-format": "3 - 4",
25
+ "kdbush": "^4.0.2",
26
+ "reselect": "^4.1.6",
27
+ "seedrandom": "^3.0.5"
28
+ },
29
+ "devDependencies": {
30
+ "@types/d3-array": "^3.0.7",
31
+ "@types/d3-collection": "^1.0.10",
32
+ "@types/d3-color": "^3.1.0",
33
+ "@types/d3-geo": "^3.0.4",
34
+ "@types/d3-interpolate": "^3.0.1",
35
+ "@types/d3-scale": "^4.0.4",
36
+ "@types/d3-scale-chromatic": "^3.0.0",
37
+ "@types/d3-time": "^3.0.0",
38
+ "@types/d3-time-format": "^4.0.0",
39
+ "@types/geojson": "^7946.0.10",
40
+ "@types/kdbush": "^3.0.3",
41
+ "@types/mapbox__geo-viewport": "^0.5.0",
42
+ "@types/seedrandom": "^3.0.5"
43
+ },
44
+ "gitHead": "66e2235c27734094d45099c1746e0d334be4972d",
45
+ "publishConfig": {
46
+ "access": "public"
47
+ }
48
+ }
@@ -0,0 +1,76 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import {
8
+ AggregateFlow,
9
+ ClusterNode,
10
+ FlowmapDataAccessors,
11
+ isAggregateFlow,
12
+ isCluster,
13
+ isLocationClusterNode,
14
+ } from './types';
15
+
16
+ export default class FlowmapAggregateAccessors<
17
+ L extends Record<string, any>,
18
+ F extends Record<string, any>,
19
+ > {
20
+ private accessors: FlowmapDataAccessors<L, F>;
21
+ constructor(accessors: FlowmapDataAccessors<L, F>) {
22
+ this.accessors = accessors;
23
+ }
24
+
25
+ setAccessors(accessors: FlowmapDataAccessors<L, F>) {
26
+ this.accessors = accessors;
27
+ }
28
+
29
+ getFlowmapDataAccessors() {
30
+ return this.accessors;
31
+ }
32
+
33
+ getLocationId = (location: L | ClusterNode): string | number =>
34
+ isLocationClusterNode(location)
35
+ ? location.id
36
+ : this.accessors.getLocationId(location);
37
+
38
+ getLocationName = (location: L | ClusterNode): string => {
39
+ let name;
40
+ if (isLocationClusterNode(location) && isCluster(location)) {
41
+ name = location.name;
42
+ } else if (this.accessors.getLocationName) {
43
+ name = this.accessors.getLocationName(location as L);
44
+ }
45
+ if (!name) name = `${this.getLocationId(location)}`;
46
+ return name;
47
+ };
48
+
49
+ getLocationLat = (location: L | ClusterNode): number =>
50
+ isLocationClusterNode(location)
51
+ ? location.lat
52
+ : this.accessors.getLocationLat(location);
53
+
54
+ getLocationLon = (location: L | ClusterNode): number =>
55
+ isLocationClusterNode(location)
56
+ ? location.lon
57
+ : this.accessors.getLocationLon(location);
58
+
59
+ getFlowOriginId = (f: F | AggregateFlow) => {
60
+ return isAggregateFlow(f) ? f.origin : this.accessors.getFlowOriginId(f);
61
+ };
62
+
63
+ getFlowDestId = (f: F | AggregateFlow) => {
64
+ return isAggregateFlow(f) ? f.dest : this.accessors.getFlowDestId(f);
65
+ };
66
+
67
+ getFlowMagnitude = (f: F | AggregateFlow) => {
68
+ return isAggregateFlow(f) ? f.count : this.accessors.getFlowMagnitude(f);
69
+ };
70
+
71
+ // Note: Aggregate flows have no time
72
+ getFlowTime = (f: F) => {
73
+ const {getFlowTime} = this.accessors;
74
+ return getFlowTime ? getFlowTime(f) : undefined;
75
+ };
76
+ }