@map-colonies/mc-utils 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +0 -0
  2. package/dist/arrays/index.d.ts +0 -0
  3. package/dist/arrays/index.d.ts.map +0 -0
  4. package/dist/arrays/index.js +0 -0
  5. package/dist/arrays/index.js.map +0 -0
  6. package/dist/arrays/subGroups.d.ts +0 -0
  7. package/dist/arrays/subGroups.d.ts.map +0 -0
  8. package/dist/arrays/subGroups.js +20 -125
  9. package/dist/arrays/subGroups.js.map +1 -1
  10. package/dist/communication/http/httpClient.d.ts +0 -0
  11. package/dist/communication/http/httpClient.d.ts.map +1 -1
  12. package/dist/communication/http/httpClient.js +206 -311
  13. package/dist/communication/http/httpClient.js.map +1 -1
  14. package/dist/communication/http/index.d.ts +0 -0
  15. package/dist/communication/http/index.d.ts.map +0 -0
  16. package/dist/communication/http/index.js +0 -0
  17. package/dist/communication/http/index.js.map +0 -0
  18. package/dist/communication/index.d.ts +0 -0
  19. package/dist/communication/index.d.ts.map +0 -0
  20. package/dist/communication/index.js +0 -0
  21. package/dist/communication/index.js.map +0 -0
  22. package/dist/dateTime/getUTCDate.d.ts +0 -0
  23. package/dist/dateTime/getUTCDate.d.ts.map +0 -0
  24. package/dist/dateTime/getUTCDate.js +4 -4
  25. package/dist/dateTime/getUTCDate.js.map +1 -1
  26. package/dist/dateTime/index.d.ts +0 -0
  27. package/dist/dateTime/index.d.ts.map +0 -0
  28. package/dist/dateTime/index.js +0 -0
  29. package/dist/dateTime/index.js.map +0 -0
  30. package/dist/geo/bboxUtils.d.ts +0 -0
  31. package/dist/geo/bboxUtils.d.ts.map +0 -0
  32. package/dist/geo/bboxUtils.js +24 -24
  33. package/dist/geo/bboxUtils.js.map +1 -1
  34. package/dist/geo/geoConvertor.d.ts +0 -0
  35. package/dist/geo/geoConvertor.d.ts.map +0 -0
  36. package/dist/geo/geoConvertor.js +13 -15
  37. package/dist/geo/geoConvertor.js.map +1 -1
  38. package/dist/geo/geoHash.d.ts +0 -0
  39. package/dist/geo/geoHash.d.ts.map +0 -0
  40. package/dist/geo/geoHash.js +65 -205
  41. package/dist/geo/geoHash.js.map +1 -1
  42. package/dist/geo/geoIntersection.d.ts +0 -0
  43. package/dist/geo/geoIntersection.d.ts.map +0 -0
  44. package/dist/geo/geoIntersection.js +14 -14
  45. package/dist/geo/geoIntersection.js.map +1 -1
  46. package/dist/geo/index.d.ts +0 -0
  47. package/dist/geo/index.d.ts.map +0 -0
  48. package/dist/geo/index.js +0 -0
  49. package/dist/geo/index.js.map +0 -0
  50. package/dist/geo/tileBatcher.d.ts +0 -0
  51. package/dist/geo/tileBatcher.d.ts.map +0 -0
  52. package/dist/geo/tileBatcher.js +65 -161
  53. package/dist/geo/tileBatcher.js.map +1 -1
  54. package/dist/geo/tileRanger.d.ts +0 -0
  55. package/dist/geo/tileRanger.d.ts.map +0 -0
  56. package/dist/geo/tileRanger.js +165 -316
  57. package/dist/geo/tileRanger.js.map +1 -1
  58. package/dist/geo/tiles.d.ts +0 -0
  59. package/dist/geo/tiles.d.ts.map +0 -0
  60. package/dist/geo/tiles.js +29 -56
  61. package/dist/geo/tiles.js.map +1 -1
  62. package/dist/geo/tilesGenerator.d.ts +0 -0
  63. package/dist/geo/tilesGenerator.d.ts.map +0 -0
  64. package/dist/geo/tilesGenerator.js +11 -105
  65. package/dist/geo/tilesGenerator.js.map +1 -1
  66. package/dist/index.d.ts +1 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +1 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/models/enums/gdal/dataType.d.ts +0 -0
  71. package/dist/models/enums/gdal/dataType.d.ts.map +0 -0
  72. package/dist/models/enums/gdal/dataType.js +0 -0
  73. package/dist/models/enums/gdal/dataType.js.map +0 -0
  74. package/dist/models/enums/gdal/index.d.ts +0 -0
  75. package/dist/models/enums/gdal/index.d.ts.map +0 -0
  76. package/dist/models/enums/gdal/index.js +0 -0
  77. package/dist/models/enums/gdal/index.js.map +0 -0
  78. package/dist/models/enums/gdal/resamplingMethod.d.ts +0 -0
  79. package/dist/models/enums/gdal/resamplingMethod.d.ts.map +0 -0
  80. package/dist/models/enums/gdal/resamplingMethod.js +0 -0
  81. package/dist/models/enums/gdal/resamplingMethod.js.map +0 -0
  82. package/dist/models/enums/geo/index.d.ts +0 -0
  83. package/dist/models/enums/geo/index.d.ts.map +0 -0
  84. package/dist/models/enums/geo/index.js +0 -0
  85. package/dist/models/enums/geo/index.js.map +0 -0
  86. package/dist/models/enums/geo/tileOrigin.d.ts +0 -0
  87. package/dist/models/enums/geo/tileOrigin.d.ts.map +0 -0
  88. package/dist/models/enums/geo/tileOrigin.js +0 -0
  89. package/dist/models/enums/geo/tileOrigin.js.map +0 -0
  90. package/dist/models/enums/index.d.ts +0 -0
  91. package/dist/models/enums/index.d.ts.map +0 -0
  92. package/dist/models/enums/index.js +0 -0
  93. package/dist/models/enums/index.js.map +0 -0
  94. package/dist/models/index.d.ts +0 -0
  95. package/dist/models/index.d.ts.map +0 -0
  96. package/dist/models/index.js +0 -0
  97. package/dist/models/index.js.map +0 -0
  98. package/dist/models/interfaces/geo/iPoint.d.ts +0 -0
  99. package/dist/models/interfaces/geo/iPoint.d.ts.map +0 -0
  100. package/dist/models/interfaces/geo/iPoint.js +0 -0
  101. package/dist/models/interfaces/geo/iPoint.js.map +0 -0
  102. package/dist/models/interfaces/geo/iTile.d.ts +0 -0
  103. package/dist/models/interfaces/geo/iTile.d.ts.map +0 -0
  104. package/dist/models/interfaces/geo/iTile.js +0 -0
  105. package/dist/models/interfaces/geo/iTile.js.map +0 -0
  106. package/dist/models/interfaces/geo/index.d.ts +0 -0
  107. package/dist/models/interfaces/geo/index.d.ts.map +0 -0
  108. package/dist/models/interfaces/geo/index.js +0 -0
  109. package/dist/models/interfaces/geo/index.js.map +0 -0
  110. package/dist/models/interfaces/index.d.ts +0 -0
  111. package/dist/models/interfaces/index.d.ts.map +0 -0
  112. package/dist/models/interfaces/index.js +0 -0
  113. package/dist/models/interfaces/index.js.map +0 -0
  114. package/dist/utils/index.d.ts +2 -0
  115. package/dist/utils/index.d.ts.map +1 -0
  116. package/dist/utils/index.js +18 -0
  117. package/dist/utils/index.js.map +1 -0
  118. package/dist/utils/timeout.d.ts +3 -0
  119. package/dist/utils/timeout.d.ts.map +1 -1
  120. package/dist/utils/timeout.js +18 -43
  121. package/dist/utils/timeout.js.map +1 -1
  122. package/package.json +2 -2
@@ -1,72 +1,10 @@
1
1
  "use strict";
2
- var __generator = (this && this.__generator) || function (thisArg, body) {
3
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
4
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
5
- function verb(n) { return function (v) { return step([n, v]); }; }
6
- function step(op) {
7
- if (f) throw new TypeError("Generator is already executing.");
8
- while (_) try {
9
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
10
- if (y = 0, t) op = [op[0] & 2, t.value];
11
- switch (op[0]) {
12
- case 0: case 1: t = op; break;
13
- case 4: _.label++; return { value: op[1], done: false };
14
- case 5: _.label++; y = op[1]; op = [0]; continue;
15
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
16
- default:
17
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
18
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
19
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
20
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
21
- if (t[2]) _.ops.pop();
22
- _.trys.pop(); continue;
23
- }
24
- op = body.call(thisArg, _);
25
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
26
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
27
- }
28
- };
29
- var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
30
- var __asyncValues = (this && this.__asyncValues) || function (o) {
31
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
32
- var m = o[Symbol.asyncIterator], i;
33
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
34
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
35
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
36
- };
37
- var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
38
- var i, p;
39
- return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
40
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
41
- };
42
- var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
43
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
44
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
45
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
46
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
47
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
48
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
49
- function fulfill(value) { resume("next", value); }
50
- function reject(value) { resume("throw", value); }
51
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
52
- };
53
- var __values = (this && this.__values) || function(o) {
54
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
55
- if (m) return m.call(o);
56
- if (o && typeof o.length === "number") return {
57
- next: function () {
58
- if (o && i >= o.length) o = void 0;
59
- return { value: o && o[i++], done: !o };
60
- }
61
- };
62
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
63
- };
64
2
  Object.defineProperty(exports, "__esModule", { value: true });
65
3
  exports.TileRanger = void 0;
66
- var turf_1 = require("@turf/turf");
67
- var bboxUtils_1 = require("./bboxUtils");
68
- var tiles_1 = require("./tiles");
69
- var tilesGenerator_1 = require("./tilesGenerator");
4
+ const turf_1 = require("@turf/turf");
5
+ const bboxUtils_1 = require("./bboxUtils");
6
+ const tiles_1 = require("./tiles");
7
+ const tilesGenerator_1 = require("./tilesGenerator");
70
8
  var TileIntersectionState;
71
9
  (function (TileIntersectionState) {
72
10
  TileIntersectionState["FULL"] = "full";
@@ -76,127 +14,82 @@ var TileIntersectionState;
76
14
  /**
77
15
  * class for generating and decoding tile hashes
78
16
  */
79
- var TileRanger = /** @class */ (function () {
80
- function TileRanger() {
81
- this.tileFootprintIntersection = function (tile, intersectionParams) {
82
- var tileBbox = (0, tiles_1.tileToBbox)(tile);
83
- var tilePoly = (0, turf_1.bboxPolygon)(tileBbox);
84
- var intersection = (0, turf_1.intersect)(intersectionParams.footprint, tilePoly);
85
- if (intersection === null) {
86
- return TileIntersectionState.NONE;
87
- }
88
- // stop condition
89
- if (tile.zoom === intersectionParams.maxZoom) {
90
- return TileIntersectionState.FULL;
91
- }
92
- var intArea = (0, turf_1.area)(intersection);
93
- var hashArea = (0, turf_1.area)(tilePoly);
94
- if (intArea == hashArea) {
95
- return TileIntersectionState.FULL;
96
- }
97
- return TileIntersectionState.PARTIAL;
98
- };
99
- }
17
+ class TileRanger {
100
18
  /**
101
19
  * converts tile to tile range of specified zoom level
102
20
  * @param tile
103
21
  * @param zoom target tile range zoom
104
22
  * @returns
105
23
  */
106
- TileRanger.prototype.tileToRange = function (tile, zoom) {
107
- var minX, minY, maxX, maxY;
24
+ tileToRange(tile, zoom) {
25
+ let minX, minY, maxX, maxY;
108
26
  minX = tile.x;
109
27
  maxX = tile.x + 1;
110
28
  minY = tile.y;
111
29
  maxY = tile.y + 1;
112
30
  if (tile.zoom < zoom) {
113
- var dz = zoom - tile.zoom;
31
+ const dz = zoom - tile.zoom;
114
32
  minX = minX << dz;
115
33
  maxX = maxX << dz;
116
34
  minY = minY << dz;
117
35
  maxY = maxY << dz;
118
36
  }
119
37
  else if (tile.zoom > zoom) {
120
- var dz = tile.zoom - zoom;
38
+ const dz = tile.zoom - zoom;
121
39
  minX = minX >> dz;
122
40
  minY = minY >> dz;
123
41
  maxX = minX + 1;
124
42
  maxY = minY + 1;
125
43
  }
126
44
  return {
127
- minX: minX,
128
- minY: minY,
129
- maxX: maxX,
130
- maxY: maxY,
131
- zoom: zoom,
45
+ minX,
46
+ minY,
47
+ maxX,
48
+ maxY,
49
+ zoom,
132
50
  };
133
- };
51
+ }
134
52
  /**
135
53
  * generate tile hashes
136
54
  * @param footprint footprint to cover with generated tile hashes
137
55
  * @param zoom max hash zoom
138
56
  * @returns
139
57
  */
140
- TileRanger.prototype.encodeFootprint = function (footprint, zoom, verbose) {
141
- if (verbose === void 0) { verbose = false; }
142
- return __asyncGenerator(this, arguments, function encodeFootprint_1() {
143
- var bbox, tileRange, intersectionParams;
144
- return __generator(this, function (_a) {
145
- switch (_a.label) {
146
- case 0:
147
- ////////////////////////////////
148
- /// Step 1: check if the footprint is identical to its bbox
149
- ////////////////////////////////
150
- if (verbose) {
151
- console.log('encode footprint');
152
- }
153
- bbox = (0, turf_1.bbox)(footprint);
154
- if (!this.isBbox(footprint)) return [3 /*break*/, 4];
155
- tileRange = (0, bboxUtils_1.bboxToTileRange)(bbox, zoom);
156
- if (verbose) {
157
- console.log("footprint is identical to its bbox - return BBOX tile range zoom: ".concat(tileRange.zoom, " : X ").concat(tileRange.minX, " - ").concat(tileRange.maxX, " : Y ").concat(tileRange.minY, " - ").concat(tileRange.maxY));
158
- }
159
- return [4 /*yield*/, __await(Promise.resolve(tileRange))];
160
- case 1: return [4 /*yield*/, __await.apply(void 0, [_a.sent()])];
161
- case 2: return [4 /*yield*/, _a.sent()];
162
- case 3:
163
- _a.sent();
164
- return [3 /*break*/, 8];
165
- case 4:
166
- intersectionParams = {
167
- footprint: footprint,
168
- maxZoom: zoom,
169
- };
170
- if (verbose) {
171
- console.log('footprint is different from its bbox - generateRanges');
172
- }
173
- return [4 /*yield*/, __await(Promise.resolve(this.generateRanges(bbox, zoom, intersectionParams, this.tileFootprintIntersection, verbose)))];
174
- case 5: return [5 /*yield**/, __values(__asyncDelegator.apply(void 0, [__asyncValues.apply(void 0, [_a.sent()])]))];
175
- case 6: return [4 /*yield*/, __await.apply(void 0, [_a.sent()])];
176
- case 7:
177
- _a.sent();
178
- _a.label = 8;
179
- case 8: return [2 /*return*/];
180
- }
181
- });
182
- });
183
- };
184
- TileRanger.prototype.generateTiles = function (area, zoom) {
185
- var gen;
58
+ async *encodeFootprint(footprint, zoom, verbose = false) {
59
+ ////////////////////////////////
60
+ /// Step 1: check if the footprint is identical to its bbox
61
+ ////////////////////////////////
62
+ if (verbose) {
63
+ console.log('encode footprint');
64
+ }
65
+ ////////////////////////////////
66
+ /// Step 2: convert footprint to BBOX
67
+ ////////////////////////////////
68
+ const bbox = (0, turf_1.bbox)(footprint);
69
+ if (this.isBbox(footprint)) {
70
+ // if it is convert its bbox directly to tile range and return it (bbox to tiles conversion is fast and direct mathematical conversion)
71
+ const tileRange = (0, bboxUtils_1.bboxToTileRange)(bbox, zoom);
72
+ if (verbose) {
73
+ console.log(`footprint is identical to its bbox - return BBOX tile range zoom: ${tileRange.zoom} : X ${tileRange.minX} - ${tileRange.maxX} : Y ${tileRange.minY} - ${tileRange.maxY}`);
74
+ }
75
+ yield await Promise.resolve(tileRange);
76
+ }
77
+ else {
78
+ const intersectionParams = {
79
+ footprint,
80
+ maxZoom: zoom,
81
+ };
82
+ if (verbose) {
83
+ console.log('footprint is different from its bbox - generateRanges');
84
+ }
85
+ yield* await Promise.resolve(this.generateRanges(bbox, zoom, intersectionParams, this.tileFootprintIntersection, verbose));
86
+ }
87
+ }
88
+ generateTiles(area, zoom) {
89
+ let gen;
186
90
  if (Array.isArray(area)) {
187
- var tileRangeGen = function tileRangeGenerator() {
188
- return __asyncGenerator(this, arguments, function tileRangeGenerator_1() {
189
- return __generator(this, function (_a) {
190
- switch (_a.label) {
191
- case 0: return [4 /*yield*/, __await(Promise.resolve((0, bboxUtils_1.bboxToTileRange)(area, zoom)))];
192
- case 1: return [4 /*yield*/, __await.apply(void 0, [_a.sent()])];
193
- case 2: return [4 /*yield*/, _a.sent()];
194
- case 3:
195
- _a.sent();
196
- return [2 /*return*/];
197
- }
198
- });
199
- });
91
+ const tileRangeGen = async function* tileRangeGenerator() {
92
+ yield await Promise.resolve((0, bboxUtils_1.bboxToTileRange)(area, zoom));
200
93
  };
201
94
  gen = tileRangeGen();
202
95
  }
@@ -204,99 +97,72 @@ var TileRanger = /** @class */ (function () {
204
97
  gen = this.encodeFootprint(area, zoom);
205
98
  }
206
99
  return (0, tilesGenerator_1.tilesGenerator)(gen);
207
- };
208
- TileRanger.prototype.generateRanges = function (bbox, zoom, intersectionTarget, intersectionFunction, verbose) {
209
- if (verbose === void 0) { verbose = false; }
210
- return __asyncGenerator(this, arguments, function generateRanges_1() {
211
- var boundingRange, bboxString, dx, dy, minXZoom, minYZoom, minZoom, minimalRange, x, y, tile, intersection, tileRange;
212
- return __generator(this, function (_a) {
213
- switch (_a.label) {
214
- case 0:
215
- /////////////////////////////////////////////////////////////////////////////////////////////////
216
- /// Step 3: Convert the bbox to tile range of the requested zoom
217
- /////////////////////////////////////////////////////////////////////////////////////////////////
218
- if (verbose) {
219
- console.log('Convert the bbox to tile range of the requested zoom');
220
- }
221
- boundingRange = (0, bboxUtils_1.bboxToTileRange)(bbox, zoom);
222
- if (verbose) {
223
- bboxString = "BBOX[0]: ".concat(bbox[0], ", BBOX[1]: ").concat(bbox[1], ", BBOX[2]: ").concat(bbox[2], ", BBOX[3]: ").concat(bbox[3]);
224
- console.log("".concat(bboxString, ", Zoom: ").concat(zoom, ", bounding range: minX: ").concat(boundingRange.minX, ", maxX: ").concat(boundingRange.maxX, ", minY: ").concat(boundingRange.minY, ", maxY: ").concat(boundingRange.maxY));
225
- }
226
- /////////////////////////////////////////////////////////////////////////////////////////////////
227
- /// Step 4: Use range size to calculate zoom level where the target area is smaller then 1 tile
228
- /// (use zoom zero in-case there is no such zoom, for example in global bbox).
229
- /////////////////////////////////////////////////////////////////////////////////////////////////
230
- // find minimal zoom where the the area can be converted by area the size of single tile to skip levels that can't have full hashes
231
- if (verbose) {
232
- console.log("find minimal zoom where the the area can be converted by area the size of single tile to skip levels that can't have full hashes");
233
- }
234
- dx = boundingRange.maxX - boundingRange.minX;
235
- dy = boundingRange.maxY - boundingRange.minY;
236
- minXZoom = Math.max(Math.floor(Math.log2(1 << (zoom + 1)) / dx) - 1, 0);
237
- minYZoom = Math.max(Math.floor(Math.log2(1 << zoom) / dy), 0);
238
- minZoom = Math.min(minXZoom, minYZoom);
239
- if (verbose) {
240
- console.log("MinZoom: ".concat(minZoom));
241
- }
242
- minimalRange = (0, bboxUtils_1.bboxToTileRange)(bbox, minZoom);
243
- x = minimalRange.minX;
244
- _a.label = 1;
245
- case 1:
246
- if (!(x < minimalRange.maxX)) return [3 /*break*/, 12];
247
- y = minimalRange.minY;
248
- _a.label = 2;
249
- case 2:
250
- if (!(y < minimalRange.maxY)) return [3 /*break*/, 11];
251
- tile = { x: x, y: y, zoom: minimalRange.zoom };
252
- intersection = intersectionFunction(tile, intersectionTarget);
253
- if (verbose) {
254
- console.log("Tile X: ".concat(tile.x, ", Y: ").concat(tile.y, " zoom ").concat(tile.zoom, ", intersection: ").concat(intersection));
255
- }
256
- if (!(intersection === TileIntersectionState.FULL)) return [3 /*break*/, 6];
257
- tileRange = this.tileToRange(tile, zoom);
258
- if (verbose) {
259
- console.log("return BBOX tile range zoom: ".concat(tileRange.zoom, " : X ").concat(tileRange.minX, " - ").concat(tileRange.maxX, " : Y ").concat(tileRange.minY, " - ").concat(tileRange.maxY));
260
- }
261
- return [4 /*yield*/, __await(Promise.resolve(tileRange))];
262
- case 3: return [4 /*yield*/, __await.apply(void 0, [_a.sent()])];
263
- case 4: return [4 /*yield*/, _a.sent()];
264
- case 5:
265
- _a.sent();
266
- return [3 /*break*/, 10];
267
- case 6:
268
- if (!(intersection === TileIntersectionState.PARTIAL)) return [3 /*break*/, 10];
269
- return [4 /*yield*/, __await(Promise.resolve(this.optimizeHash(tile, zoom, intersectionTarget, intersectionFunction, verbose)))];
270
- case 7:
271
- /// if it partly covered:
272
- // calculate the sub tiles contained in the current tile (in the next zoom level)
273
- // for every sub tile recursively run step 6
274
- //optimize partial base hashes
275
- return [5 /*yield**/, __values(__asyncDelegator.apply(void 0, [__asyncValues.apply(void 0, [_a.sent()])]))];
276
- case 8:
100
+ }
101
+ async *generateRanges(bbox, zoom, intersectionTarget, intersectionFunction, verbose = false) {
102
+ /////////////////////////////////////////////////////////////////////////////////////////////////
103
+ /// Step 3: Convert the bbox to tile range of the requested zoom
104
+ /////////////////////////////////////////////////////////////////////////////////////////////////
105
+ if (verbose) {
106
+ console.log('Convert the bbox to tile range of the requested zoom');
107
+ }
108
+ const boundingRange = (0, bboxUtils_1.bboxToTileRange)(bbox, zoom);
109
+ if (verbose) {
110
+ const bboxString = `BBOX[0]: ${bbox[0]}, BBOX[1]: ${bbox[1]}, BBOX[2]: ${bbox[2]}, BBOX[3]: ${bbox[3]}`;
111
+ console.log(`${bboxString}, Zoom: ${zoom}, bounding range: minX: ${boundingRange.minX}, maxX: ${boundingRange.maxX}, minY: ${boundingRange.minY}, maxY: ${boundingRange.maxY}`);
112
+ }
113
+ /////////////////////////////////////////////////////////////////////////////////////////////////
114
+ /// Step 4: Use range size to calculate zoom level where the target area is smaller then 1 tile
115
+ /// (use zoom zero in-case there is no such zoom, for example in global bbox).
116
+ /////////////////////////////////////////////////////////////////////////////////////////////////
117
+ // find minimal zoom where the the area can be converted by area the size of single tile to skip levels that can't have full hashes
118
+ if (verbose) {
119
+ console.log("find minimal zoom where the the area can be converted by area the size of single tile to skip levels that can't have full hashes");
120
+ }
121
+ const dx = boundingRange.maxX - boundingRange.minX;
122
+ const dy = boundingRange.maxY - boundingRange.minY;
123
+ const minXZoom = Math.max(Math.floor(Math.log2(1 << (zoom + 1)) / dx) - 1, 0);
124
+ const minYZoom = Math.max(Math.floor(Math.log2(1 << zoom) / dy), 0);
125
+ const minZoom = Math.min(minXZoom, minYZoom);
126
+ if (verbose) {
127
+ console.log(`MinZoom: ${minZoom}`);
128
+ }
129
+ /////////////////////////////////////////////////////////////////////////////////////////////////
130
+ /// Step 5: convert the requested bbox to to tile range of the zoom level calculated in step 3 (this reduce the iteration required for the calculation)
131
+ /////////////////////////////////////////////////////////////////////////////////////////////////
132
+ //find base hashes
133
+ const minimalRange = (0, bboxUtils_1.bboxToTileRange)(bbox, minZoom);
134
+ for (let x = minimalRange.minX; x < minimalRange.maxX; x++) {
135
+ for (let y = minimalRange.minY; y < minimalRange.maxY; y++) {
136
+ /////////////////////////////////////////////////////////////////////////////////////////////////
137
+ /// Step 6: for every tile in the current range:
138
+ /// Step 7: check the tile intersection with the footprint
139
+ /////////////////////////////////////////////////////////////////////////////////////////////////
140
+ const tile = { x, y, zoom: minimalRange.zoom };
141
+ const intersection = intersectionFunction(tile, intersectionTarget);
142
+ if (verbose) {
143
+ console.log(`Tile X: ${tile.x}, Y: ${tile.y} zoom ${tile.zoom}, intersection: ${intersection}`);
144
+ }
145
+ /// if it is completely covered or the tile is in the requested zoom:
146
+ if (intersection === TileIntersectionState.FULL) {
147
+ /// convert it to tile range of the requested resolution
148
+ /// add the range to the result set (yield is used for lazy calculation to improve memory usage)
149
+ const tileRange = this.tileToRange(tile, zoom);
150
+ if (verbose) {
151
+ console.log(`return BBOX tile range zoom: ${tileRange.zoom} : X ${tileRange.minX} - ${tileRange.maxX} : Y ${tileRange.minY} - ${tileRange.maxY}`);
152
+ }
153
+ yield await Promise.resolve(tileRange);
154
+ }
155
+ else if (intersection === TileIntersectionState.PARTIAL) {
277
156
  /// if it partly covered:
278
157
  // calculate the sub tiles contained in the current tile (in the next zoom level)
279
158
  // for every sub tile recursively run step 6
280
159
  //optimize partial base hashes
281
- return [4 /*yield*/, __await.apply(void 0, [_a.sent()])];
282
- case 9:
283
- /// if it partly covered:
284
- // calculate the sub tiles contained in the current tile (in the next zoom level)
285
- // for every sub tile recursively run step 6
286
- //optimize partial base hashes
287
- _a.sent();
288
- _a.label = 10;
289
- case 10:
290
- y++;
291
- return [3 /*break*/, 2];
292
- case 11:
293
- x++;
294
- return [3 /*break*/, 1];
295
- case 12: return [2 /*return*/];
160
+ yield* await Promise.resolve(this.optimizeHash(tile, zoom, intersectionTarget, intersectionFunction, verbose));
296
161
  }
297
- });
298
- });
299
- };
162
+ /// else do nothing as this tiles aren't intersected with the original footprint
163
+ }
164
+ }
165
+ }
300
166
  /**
301
167
  * generate tile
302
168
  * @param tile tile to get all intersecting tiles from
@@ -304,81 +170,64 @@ var TileRanger = /** @class */ (function () {
304
170
  * @param intersectionTarget original zoom level and footprint to intersect
305
171
  * @param intersectionFunction the intersection function to be called
306
172
  */
307
- TileRanger.prototype.optimizeHash = function (tile, targetZoom, intersectionTarget, intersectionFunction, verbose) {
308
- var tiles, tiles_2, tiles_2_1, subTile, intersection, tileRange, e_1_1;
309
- var e_1, _a;
310
- if (verbose === void 0) { verbose = false; }
311
- return __generator(this, function (_b) {
312
- switch (_b.label) {
313
- case 0:
314
- /// generate from a tile the next zoom level tiles that compose the tile
315
- if (verbose) {
316
- console.log("optimizeHash: Tile X: ".concat(tile.x, ", Y: ").concat(tile.y, " zoom ").concat(tile.zoom, ", intersectionTarget ").concat(intersectionTarget.maxZoom, ", - generate from a tile the next zoom level tiles that compose the tile"));
317
- }
318
- tiles = this.generateSubTiles(tile);
319
- _b.label = 1;
320
- case 1:
321
- _b.trys.push([1, 8, 9, 10]);
322
- tiles_2 = __values(tiles), tiles_2_1 = tiles_2.next();
323
- _b.label = 2;
324
- case 2:
325
- if (!!tiles_2_1.done) return [3 /*break*/, 7];
326
- subTile = tiles_2_1.value;
327
- intersection = intersectionFunction(subTile, intersectionTarget);
328
- if (verbose) {
329
- console.log("Tile X: ".concat(subTile.x, ", Y: ").concat(subTile.y, " zoom ").concat(subTile.zoom, ", intersection: ").concat(intersection));
330
- }
331
- if (!(intersection === TileIntersectionState.FULL)) return [3 /*break*/, 4];
332
- tileRange = this.tileToRange(subTile, targetZoom);
333
- if (verbose) {
334
- console.log("return BBOX tile range zoom: ".concat(tileRange.zoom, " : X ").concat(tileRange.minX, " - ").concat(tileRange.maxX, " : Y ").concat(tileRange.minY, " - ").concat(tileRange.maxY));
335
- }
336
- return [4 /*yield*/, tileRange];
337
- case 3:
338
- _b.sent();
339
- return [3 /*break*/, 6];
340
- case 4:
341
- if (!(intersection === TileIntersectionState.PARTIAL)) return [3 /*break*/, 6];
342
- /// if it partly covered:
343
- // calculate the sub tiles contained in the current tile (in the next zoom level) - recursive
344
- return [5 /*yield**/, __values(this.optimizeHash(subTile, targetZoom, intersectionTarget, intersectionFunction, verbose))];
345
- case 5:
346
- /// if it partly covered:
347
- // calculate the sub tiles contained in the current tile (in the next zoom level) - recursive
348
- _b.sent();
349
- _b.label = 6;
350
- case 6:
351
- tiles_2_1 = tiles_2.next();
352
- return [3 /*break*/, 2];
353
- case 7: return [3 /*break*/, 10];
354
- case 8:
355
- e_1_1 = _b.sent();
356
- e_1 = { error: e_1_1 };
357
- return [3 /*break*/, 10];
358
- case 9:
359
- try {
360
- if (tiles_2_1 && !tiles_2_1.done && (_a = tiles_2.return)) _a.call(tiles_2);
361
- }
362
- finally { if (e_1) throw e_1.error; }
363
- return [7 /*endfinally*/];
364
- case 10: return [2 /*return*/];
173
+ *optimizeHash(tile, targetZoom, intersectionTarget, intersectionFunction, verbose = false) {
174
+ /// generate from a tile the next zoom level tiles that compose the tile
175
+ if (verbose) {
176
+ console.log(`optimizeHash: Tile X: ${tile.x}, Y: ${tile.y} zoom ${tile.zoom}, intersectionTarget ${intersectionTarget.maxZoom}, - generate from a tile the next zoom level tiles that compose the tile`);
177
+ }
178
+ const tiles = this.generateSubTiles(tile);
179
+ for (const subTile of tiles) {
180
+ const intersection = intersectionFunction(subTile, intersectionTarget);
181
+ if (verbose) {
182
+ console.log(`Tile X: ${subTile.x}, Y: ${subTile.y} zoom ${subTile.zoom}, intersection: ${intersection}`);
365
183
  }
366
- });
367
- };
368
- TileRanger.prototype.generateSubTiles = function (tile) {
369
- var tile0 = { x: tile.x << 1, y: tile.y << 1, zoom: tile.zoom + 1 };
370
- var tile1 = { x: tile0.x + 1, y: tile0.y, zoom: tile0.zoom };
371
- var tile2 = { x: tile0.x, y: tile0.y + 1, zoom: tile0.zoom };
372
- var tile3 = { x: tile0.x + 1, y: tile0.y + 1, zoom: tile0.zoom };
373
- var tiles = [tile0, tile1, tile2, tile3];
184
+ if (intersection === TileIntersectionState.FULL) {
185
+ /// convert it to tile range of the requested resolution
186
+ /// add the range to the result set (yield is used for lazy calculation to improve memory usage)
187
+ const tileRange = this.tileToRange(subTile, targetZoom);
188
+ if (verbose) {
189
+ console.log(`return BBOX tile range zoom: ${tileRange.zoom} : X ${tileRange.minX} - ${tileRange.maxX} : Y ${tileRange.minY} - ${tileRange.maxY}`);
190
+ }
191
+ yield tileRange;
192
+ }
193
+ else if (intersection === TileIntersectionState.PARTIAL) {
194
+ /// if it partly covered:
195
+ // calculate the sub tiles contained in the current tile (in the next zoom level) - recursive
196
+ yield* this.optimizeHash(subTile, targetZoom, intersectionTarget, intersectionFunction, verbose);
197
+ }
198
+ }
199
+ }
200
+ generateSubTiles(tile) {
201
+ const tile0 = { x: tile.x << 1, y: tile.y << 1, zoom: tile.zoom + 1 };
202
+ const tile1 = { x: tile0.x + 1, y: tile0.y, zoom: tile0.zoom };
203
+ const tile2 = { x: tile0.x, y: tile0.y + 1, zoom: tile0.zoom };
204
+ const tile3 = { x: tile0.x + 1, y: tile0.y + 1, zoom: tile0.zoom };
205
+ const tiles = [tile0, tile1, tile2, tile3];
374
206
  return tiles;
207
+ }
208
+ tileFootprintIntersection = (tile, intersectionParams) => {
209
+ const tileBbox = (0, tiles_1.tileToBbox)(tile);
210
+ const tilePoly = (0, turf_1.bboxPolygon)(tileBbox);
211
+ const intersection = (0, turf_1.intersect)(intersectionParams.footprint, tilePoly);
212
+ if (intersection === null) {
213
+ return TileIntersectionState.NONE;
214
+ }
215
+ // stop condition
216
+ if (tile.zoom === intersectionParams.maxZoom) {
217
+ return TileIntersectionState.FULL;
218
+ }
219
+ const intArea = (0, turf_1.area)(intersection);
220
+ const hashArea = (0, turf_1.area)(tilePoly);
221
+ if (intArea == hashArea) {
222
+ return TileIntersectionState.FULL;
223
+ }
224
+ return TileIntersectionState.PARTIAL;
375
225
  };
376
- TileRanger.prototype.isBbox = function (footprint) {
377
- var bbox = (0, turf_1.bbox)(footprint);
378
- var bboxPoly = (0, turf_1.bboxPolygon)(bbox);
226
+ isBbox(footprint) {
227
+ const bbox = (0, turf_1.bbox)(footprint);
228
+ const bboxPoly = (0, turf_1.bboxPolygon)(bbox);
379
229
  return (0, turf_1.booleanEqual)(footprint, bboxPoly);
380
- };
381
- return TileRanger;
382
- }());
230
+ }
231
+ }
383
232
  exports.TileRanger = TileRanger;
384
233
  //# sourceMappingURL=tileRanger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tileRanger.js","sourceRoot":"","sources":["../../src/geo/tileRanger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tileRanger.js","sourceRoot":"","sources":["../../src/geo/tileRanger.ts"],"names":[],"mappings":";;;AACA,qCAA+H;AAE/H,2CAA8C;AAC9C,mCAAqC;AACrC,qDAAkD;AAIlD,IAAK,qBAIJ;AAJD,WAAK,qBAAqB;IACxB,sCAAa,CAAA;IACb,4CAAmB,CAAA;IACnB,sCAAa,CAAA;AACf,CAAC,EAJI,qBAAqB,KAArB,qBAAqB,QAIzB;AAOD;;GAEG;AACH,MAAa,UAAU;IACrB;;;;;OAKG;IACI,WAAW,CAAC,IAAW,EAAE,IAAY;QAC1C,IAAI,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY,CAAC;QAC3D,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QACd,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QACd,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE;YACpB,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC5B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;SACnB;aAAM,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAC5B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;YAChB,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;SACjB;QACD,OAAO;YACL,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;SACL,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,CAAC,eAAe,CAAC,SAAoD,EAAE,IAAY,EAAE,OAAO,GAAG,KAAK;QAC/G,gCAAgC;QAChC,2DAA2D;QAC3D,gCAAgC;QAChC,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;SACjC;QAED,gCAAgC;QAChC,qCAAqC;QACrC,gCAAgC;QAChC,MAAM,IAAI,GAAG,IAAA,WAAa,EAAC,SAAS,CAAW,CAAC;QAChD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YAC1B,uIAAuI;YACvI,MAAM,SAAS,GAAG,IAAA,2BAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,GAAG,CACT,qEAAqE,SAAS,CAAC,IAAI,QAAQ,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,IAAI,QAAQ,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,IAAI,EAAE,CAC1K,CAAC;aACH;YACD,MAAM,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SACxC;aAAM;YACL,MAAM,kBAAkB,GAAiC;gBACvD,SAAS;gBACT,OAAO,EAAE,IAAI;aACd,CAAC;YACF,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;aACtE;YACD,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC;SAC5H;IACH,CAAC;IAcM,aAAa,CAAC,IAAwD,EAAE,IAAY;QACzF,IAAI,GAA8B,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,MAAM,YAAY,GAAG,KAAK,SAAS,CAAC,CAAC,kBAAkB;gBACrD,MAAM,MAAM,OAAO,CAAC,OAAO,CAAC,IAAA,2BAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC;YACF,GAAG,GAAG,YAAY,EAAE,CAAC;SACtB;aAAM;YACL,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACxC;QACD,OAAO,IAAA,+BAAc,EAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,CAAC,cAAc,CAC3B,IAAY,EACZ,IAAY,EACZ,kBAAqB,EACrB,oBAAiD,EACjD,OAAO,GAAG,KAAK;QAEf,iGAAiG;QACjG,gEAAgE;QAChE,iGAAiG;QACjG,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;SACrE;QACD,MAAM,aAAa,GAAG,IAAA,2BAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE;YACX,MAAM,UAAU,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO,CAAC,GAAG,CACT,GAAG,UAAU,WAAW,IAAI,2BAA2B,aAAa,CAAC,IAAI,WAAW,aAAa,CAAC,IAAI,WAAW,aAAa,CAAC,IAAI,WAAW,aAAa,CAAC,IAAI,EAAE,CACnK,CAAC;SACH;QACD,iGAAiG;QACjG,+FAA+F;QAC/F,sFAAsF;QACtF,iGAAiG;QACjG,mIAAmI;QACnI,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,kIAAkI,CAAC,CAAC;SACjJ;QACD,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QACnD,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE7C,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;SACpC;QACD,iGAAiG;QACjG,uJAAuJ;QACvJ,iGAAiG;QACjG,kBAAkB;QAClB,MAAM,YAAY,GAAG,IAAA,2BAAe,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC1D,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC1D,iGAAiG;gBACjG,gDAAgD;gBAChD,0DAA0D;gBAC1D,iGAAiG;gBACjG,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;gBACpE,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,mBAAmB,YAAY,EAAE,CAAC,CAAC;iBACjG;gBACD,qEAAqE;gBACrE,IAAI,YAAY,KAAK,qBAAqB,CAAC,IAAI,EAAE;oBAC/C,wDAAwD;oBACxD,gGAAgG;oBAEhG,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC/C,IAAI,OAAO,EAAE;wBACX,OAAO,CAAC,GAAG,CACT,gCAAgC,SAAS,CAAC,IAAI,QAAQ,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,IAAI,QAAQ,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,IAAI,EAAE,CACrI,CAAC;qBACH;oBACD,MAAM,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;iBACxC;qBAAM,IAAI,YAAY,KAAK,qBAAqB,CAAC,OAAO,EAAE;oBACzD,yBAAyB;oBACzB,iFAAiF;oBACjF,4CAA4C;oBAC5C,8BAA8B;oBAC9B,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;iBAChH;gBACD,gFAAgF;aACjF;SACF;IACH,CAAC;IAED;;;;;;OAMG;IACK,CAAC,YAAY,CACnB,IAAW,EACX,UAAkB,EAClB,kBAAqB,EACrB,oBAAiD,EACjD,OAAO,GAAG,KAAK;QAEf,wEAAwE;QACxE,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,GAAG,CACT,yBAAyB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,wBAC5D,kBAAqD,CAAC,OACzD,0EAA0E,CAC3E,CAAC;SACH;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE;YAC3B,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACvE,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,mBAAmB,YAAY,EAAE,CAAC,CAAC;aAC1G;YACD,IAAI,YAAY,KAAK,qBAAqB,CAAC,IAAI,EAAE;gBAC/C,wDAAwD;gBACxD,gGAAgG;gBAEhG,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACxD,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,GAAG,CACT,gCAAgC,SAAS,CAAC,IAAI,QAAQ,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,IAAI,QAAQ,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,IAAI,EAAE,CACrI,CAAC;iBACH;gBACD,MAAM,SAAS,CAAC;aACjB;iBAAM,IAAI,YAAY,KAAK,qBAAqB,CAAC,OAAO,EAAE;gBACzD,yBAAyB;gBACzB,6FAA6F;gBAC7F,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;aAClG;SACF;IACH,CAAC;IAEO,gBAAgB,CAAC,IAAW;QAClC,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAEgB,yBAAyB,GAAG,CAAC,IAAW,EAAE,kBAAgD,EAAyB,EAAE;QACpI,MAAM,QAAQ,GAAG,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAA,kBAAW,EAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,IAAA,gBAAS,EAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvE,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,OAAO,qBAAqB,CAAC,IAAI,CAAC;SACnC;QACD,iBAAiB;QACjB,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,EAAE;YAC5C,OAAO,qBAAqB,CAAC,IAAI,CAAC;SACnC;QACD,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,YAAY,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,OAAO,IAAI,QAAQ,EAAE;YACvB,OAAO,qBAAqB,CAAC,IAAI,CAAC;SACnC;QACD,OAAO,qBAAqB,CAAC,OAAO,CAAC;IACvC,CAAC,CAAC;IAEM,MAAM,CAAC,SAAoD;QACjE,MAAM,IAAI,GAAG,IAAA,WAAa,EAAC,SAAS,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,kBAAW,EAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAA,mBAAY,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;CACF;AAhQD,gCAgQC"}
File without changes
File without changes