@xyo-network/quadkey 2.74.4 → 2.75.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 (74) hide show
  1. package/dist/browser/Quadkey.cjs +388 -0
  2. package/dist/browser/Quadkey.cjs.map +1 -0
  3. package/dist/{Quadkey.d.mts → browser/Quadkey.d.mts} +1 -0
  4. package/dist/browser/Quadkey.d.mts.map +1 -0
  5. package/dist/{Quadkey.d.ts → browser/Quadkey.d.ts} +1 -0
  6. package/dist/browser/Quadkey.d.ts.map +1 -0
  7. package/dist/browser/Quadkey.js +375 -0
  8. package/dist/browser/Quadkey.js.map +1 -0
  9. package/dist/browser/RelativeDirectionConstantLookup.cjs +32 -0
  10. package/dist/browser/RelativeDirectionConstantLookup.cjs.map +1 -0
  11. package/dist/browser/RelativeDirectionConstantLookup.d.mts.map +1 -0
  12. package/dist/browser/RelativeDirectionConstantLookup.d.ts.map +1 -0
  13. package/dist/browser/RelativeDirectionConstantLookup.js +11 -0
  14. package/dist/browser/RelativeDirectionConstantLookup.js.map +1 -0
  15. package/dist/{index.js → browser/index.cjs} +1 -9
  16. package/dist/browser/index.cjs.map +1 -0
  17. package/dist/{index.d.mts.map → browser/index.d.mts.map} +1 -1
  18. package/dist/{index.d.ts.map → browser/index.d.ts.map} +1 -1
  19. package/dist/{index.mjs → browser/index.js} +1 -1
  20. package/dist/browser/index.js.map +1 -0
  21. package/dist/browser/utils.cjs +65 -0
  22. package/dist/browser/utils.cjs.map +1 -0
  23. package/dist/{utils.d.mts → browser/utils.d.mts} +1 -0
  24. package/dist/browser/utils.d.mts.map +1 -0
  25. package/dist/{utils.d.ts → browser/utils.d.ts} +1 -0
  26. package/dist/browser/utils.d.ts.map +1 -0
  27. package/dist/browser/utils.js +44 -0
  28. package/dist/browser/utils.js.map +1 -0
  29. package/dist/node/Quadkey.d.mts +92 -0
  30. package/dist/node/Quadkey.d.mts.map +1 -0
  31. package/dist/node/Quadkey.d.ts +92 -0
  32. package/dist/node/Quadkey.d.ts.map +1 -0
  33. package/dist/node/Quadkey.js +344 -0
  34. package/dist/node/Quadkey.js.map +1 -0
  35. package/dist/node/Quadkey.mjs +325 -0
  36. package/dist/node/Quadkey.mjs.map +1 -0
  37. package/dist/node/RelativeDirectionConstantLookup.d.mts +2 -0
  38. package/dist/node/RelativeDirectionConstantLookup.d.mts.map +1 -0
  39. package/dist/node/RelativeDirectionConstantLookup.d.ts +2 -0
  40. package/dist/node/RelativeDirectionConstantLookup.d.ts.map +1 -0
  41. package/dist/node/RelativeDirectionConstantLookup.js +34 -0
  42. package/dist/node/RelativeDirectionConstantLookup.js.map +1 -0
  43. package/dist/node/RelativeDirectionConstantLookup.mjs +10 -0
  44. package/dist/node/RelativeDirectionConstantLookup.mjs.map +1 -0
  45. package/dist/node/index.d.mts +2 -0
  46. package/dist/node/index.d.mts.map +1 -0
  47. package/dist/node/index.d.ts +2 -0
  48. package/dist/node/index.d.ts.map +1 -0
  49. package/dist/node/index.js +23 -0
  50. package/dist/node/index.js.map +1 -0
  51. package/dist/node/index.mjs +2 -0
  52. package/dist/node/index.mjs.map +1 -0
  53. package/dist/node/utils.d.mts +6 -0
  54. package/dist/node/utils.d.mts.map +1 -0
  55. package/dist/node/utils.d.ts +6 -0
  56. package/dist/node/utils.d.ts.map +1 -0
  57. package/dist/node/utils.js +69 -0
  58. package/dist/node/utils.js.map +1 -0
  59. package/dist/node/utils.mjs +43 -0
  60. package/dist/node/utils.mjs.map +1 -0
  61. package/package.json +27 -24
  62. package/dist/Quadkey.d.mts.map +0 -1
  63. package/dist/Quadkey.d.ts.map +0 -1
  64. package/dist/RelativeDirectionConstantLookup.d.mts.map +0 -1
  65. package/dist/RelativeDirectionConstantLookup.d.ts.map +0 -1
  66. package/dist/docs.json +0 -3977
  67. package/dist/index.js.map +0 -1
  68. package/dist/index.mjs.map +0 -1
  69. package/dist/utils.d.mts.map +0 -1
  70. package/dist/utils.d.ts.map +0 -1
  71. /package/dist/{RelativeDirectionConstantLookup.d.mts → browser/RelativeDirectionConstantLookup.d.mts} +0 -0
  72. /package/dist/{RelativeDirectionConstantLookup.d.ts → browser/RelativeDirectionConstantLookup.d.ts} +0 -0
  73. /package/dist/{index.d.mts → browser/index.d.mts} +0 -0
  74. /package/dist/{index.d.ts → browser/index.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Quadkey.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BigNumber } from '@xylabs/bignumber'\nimport { Buffer } from '@xylabs/buffer'\nimport {\n boundingBoxToCenter,\n GeoJson,\n MercatorBoundingBox,\n MercatorTile,\n tileFromPoint,\n tileFromQuadkey,\n tilesFromBoundingBox,\n tileToBoundingBox,\n tileToQuadkey,\n} from '@xyo-network/sdk-geo'\nimport { LngLat, LngLatLike } from 'mapbox-gl'\n\nimport { RelativeDirectionConstantLookup } from './RelativeDirectionConstantLookup'\nimport { bitShiftLeft, bitShiftRight, padHex } from './utils'\n\nexport * from './utils'\n\nconst MAX_ZOOM = 124\n\nexport const isQuadkey = (obj: { type: string }) => obj?.type === Quadkey.type\n\nexport class Quadkey {\n static Zero = Quadkey.from(0, Buffer.alloc(31, 0))\n static root = new Quadkey()\n static type = 'Quadkey'\n\n type = Quadkey.type\n\n private _geoJson?: GeoJson\n private key = Buffer.alloc(32)\n\n constructor(key = Buffer.alloc(32)) {\n key.copy(this.key, this.key.length - key.length)\n this.guessZoom()\n }\n\n get base10String() {\n return this.bigNumber.toString(10)\n }\n\n get base4Hash() {\n const bn = new BigNumber(this.id.toString('hex'), 16)\n const zoom = this.zoom\n if (zoom === 0) {\n return ''\n }\n let quadkeySimple = bn.toString(4)\n while (quadkeySimple.length < zoom) {\n quadkeySimple = `0${quadkeySimple}`\n }\n return quadkeySimple\n }\n\n get base4HashLabel() {\n const hash = this.base4Hash\n return hash.length === 0 ? 'fhr' : hash\n }\n\n get bigNumber() {\n return new BigNumber(`${this.key.toString('hex')}`, 'hex')\n }\n\n get boundingBox(): MercatorBoundingBox {\n return tileToBoundingBox(this.tile)\n }\n\n get buffer() {\n return this.key\n }\n\n get center() {\n const result = boundingBoxToCenter(this.boundingBox)\n return new LngLat(result[0], result[1])\n }\n\n get children() {\n assertEx(this.zoom < MAX_ZOOM - 1, 'Can not get children of bottom tiles')\n const result: Quadkey[] = []\n const shiftedId = bitShiftLeft(bitShiftLeft(this.id))\n for (let i = 0; i < 4; i++) {\n const currentLastByte = shiftedId.readUInt8(shiftedId.length - 1)\n shiftedId.writeUInt8((currentLastByte & 0xfc) | i, shiftedId.length - 1)\n result.push(new Quadkey().setId(shiftedId).setZoom(this.zoom + 1))\n }\n return result\n }\n\n get gridLocation() {\n const tileData = tileFromQuadkey(this.base4Hash)\n\n return {\n col: 2 ** tileData[2] - tileData[1] - 1,\n row: tileData[0],\n zoom: tileData[2],\n }\n }\n\n get hex() {\n return `0x${this.key.toString('hex')}`\n }\n\n get id() {\n return this.buffer.slice(1)\n }\n\n get parent(): Quadkey | undefined {\n if (this.zoom > 0) {\n return new Quadkey().setId(bitShiftRight(bitShiftRight(this.id))).setZoom(this.zoom - 1)\n }\n }\n\n get siblings() {\n const siblings = assertEx(this.parent?.children, `siblings: parentChildren ${this.base4Hash}`)\n const filteredSiblings = siblings.filter((quadkey) => this.compareTo(quadkey) !== 0)\n assertEx(filteredSiblings.length === 3, `siblings: expected 3 [${filteredSiblings.length}]`)\n return filteredSiblings\n }\n\n get tile(): MercatorTile {\n return tileFromQuadkey(this.base4Hash)\n }\n\n get valid() {\n const zoom = this.zoom\n const shift = (MAX_ZOOM - zoom) * 2\n const id = this.id\n let testId = id\n for (let i = 0; i < shift; i++) {\n testId = bitShiftLeft(testId)\n }\n for (let i = 0; i < shift; i++) {\n testId = bitShiftRight(testId)\n }\n return testId.compare(id) === 0\n }\n\n get zoom() {\n return this.buffer.readUInt8(0)\n }\n\n static from(zoom: number, id: Buffer) {\n return new Quadkey().setId(id).setZoom(zoom)\n }\n\n static fromBase10String(value: string) {\n return new Quadkey(Buffer.from(padHex(new BigNumber(value, 10).toString(16)), 'hex'))\n }\n\n static fromBase16String(value: string) {\n const valueToUse = value.startsWith('0x') ? value.slice(2) : value\n return new Quadkey(Buffer.from(padHex(valueToUse), 'hex'))\n }\n\n static fromBase4String(value?: string) {\n if (value === 'fhr' || value === '') {\n return Quadkey.root\n }\n if (value && value.length && value.length > 0) {\n const quadkey = new Quadkey(Buffer.from(padHex(new BigNumber(value, 4).toString(16)), 'hex')).setZoom(value.length)\n return quadkey.valid ? quadkey : undefined\n }\n }\n\n static fromBoundingBox(boundingBox: MercatorBoundingBox, zoom: number) {\n const tiles = tilesFromBoundingBox(boundingBox, Math.floor(zoom))\n const result: Quadkey[] = []\n for (const tile of tiles) {\n result.push(assertEx(Quadkey.fromTile(tile), 'Bad Quadkey'))\n }\n\n return result\n }\n\n static fromBuffer(value: Buffer) {\n return Quadkey.fromBase16String(value.toString('hex'))\n }\n\n static fromLngLat(point: LngLatLike, zoom: number) {\n const tile = tileFromPoint(LngLat.convert(point), zoom)\n const quadkeyString = tileToQuadkey(tile)\n return Quadkey.fromBase4String(quadkeyString)\n }\n\n static fromString(zoom: number, id: string, base = 10) {\n switch (base) {\n case 10:\n return Quadkey.fromBase10String(id)?.setZoom(zoom)\n case 16:\n return Quadkey.fromBase16String(id).setZoom(zoom)\n default:\n throw Error(`Invalid base [${base}]`)\n }\n }\n\n static fromTile(tile: MercatorTile) {\n return Quadkey.fromBase4String(tileToQuadkey(tile))\n }\n\n childrenByZoom(zoom: number) {\n // if we are limiting by zoom, and we are already at that limit, just return this quadkey\n if (zoom && zoom === this.zoom) {\n return [this]\n }\n\n // recursively get children\n let deepResult: Quadkey[] = []\n for (const quadkey of this.children) {\n deepResult = deepResult.concat(quadkey.childrenByZoom(zoom))\n }\n return deepResult\n }\n\n clone() {\n return Quadkey.fromBase10String(this.base10String)\n }\n\n compareTo(quadkey: Quadkey) {\n return this.bigNumber.cmp(quadkey.bigNumber)\n }\n\n equals(obj: Quadkey): boolean {\n return obj.base4HashLabel == this.base4HashLabel\n }\n\n geoJson() {\n this._geoJson = this._geoJson ?? new GeoJson(this.base4Hash)\n return this._geoJson\n }\n\n getGridBoundingBox(size: number) {\n const hash = this.base4Hash\n let index = 0\n let left = 0\n let top = 0\n let blockSize = size\n while (index < hash.length) {\n blockSize >>= 1\n switch (hash[index]) {\n case '1':\n left += blockSize\n break\n case '2':\n top += blockSize\n break\n case '3':\n left += blockSize\n top += blockSize\n break\n }\n index++\n }\n if (blockSize < 2) {\n blockSize = 2\n }\n return {\n height: blockSize,\n left,\n top,\n width: blockSize,\n }\n }\n\n /** @deprecated use .gridLocation instead */\n getGridLocation() {\n return this.gridLocation\n }\n\n isInBoundingBox(boundingBox: MercatorBoundingBox) {\n const tileBoundingBox = tileToBoundingBox(this.tile)\n return (\n boundingBox.contains(tileBoundingBox.getNorthEast()) ||\n boundingBox.contains(tileBoundingBox.getNorthWest()) ||\n boundingBox.contains(tileBoundingBox.getSouthEast()) ||\n boundingBox.contains(tileBoundingBox.getSouthWest())\n )\n }\n\n relative(direction: string) {\n const directionConstant = assertEx(RelativeDirectionConstantLookup[direction], 'Invalid direction')\n let quadkey = this.base4Hash\n if (quadkey.length === 0) {\n return this\n }\n let index = quadkey.length - 1\n while (index >= 0) {\n let number = parseInt(quadkey.charAt(index))\n number += directionConstant\n if (number > 3) {\n number -= 4\n quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1)\n index--\n } else if (number < 0) {\n number += 4\n quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1)\n index--\n } else {\n index = -1\n }\n }\n return Quadkey.fromBase4String(quadkey)\n }\n\n setId(id: Buffer) {\n this.setKey(this.zoom, id)\n return this\n }\n\n setKey(zoom: number, id: Buffer) {\n id.copy(this.key, this.key.length - id.length)\n this.key.writeUInt8(zoom, 0)\n return this\n }\n\n setZoom(zoom: number) {\n assertEx(zoom < MAX_ZOOM, `Invalid zoom [${zoom}] max=${MAX_ZOOM}`)\n this.setKey(zoom, this.id)\n return this\n }\n\n /** @deprecated use .base10String*/\n toBase10String() {\n return this.base10String\n }\n\n /** @deprecated use .base4Hash */\n toBase4Hash() {\n return this.base4Hash\n }\n\n /** @deprecated use .base4HashLabel */\n toBase4HashLabel() {\n const hash = this.base4HashLabel\n return hash.length === 0 ? 'fhr' : hash\n }\n\n /** @deprecated use .bigNumber */\n toBigNumber() {\n return this.bigNumber\n }\n\n /** @deprecated use .boundingBox */\n toBoundingBox(): MercatorBoundingBox {\n return this.boundingBox\n }\n\n /** @deprecated use .buffer */\n toBuffer() {\n return this.buffer\n }\n\n /** @deprecated use .center */\n toCenter() {\n return this.center\n }\n\n /** @deprecated use .hex instead */\n toHex() {\n return this.hex\n }\n\n toJSON(): string {\n return this.base4HashLabel\n }\n\n toShortString() {\n const buffer = this.buffer\n const part1 = buffer.slice(0, 2)\n const part2 = buffer.slice(buffer.length - 2, buffer.length)\n return `${part1.toString('hex')}...${part2.toString('hex')}`\n }\n\n toString() {\n return `0x${padHex(this.bigNumber.toString(16))}`\n }\n\n /** @deprecated use .tile instead */\n toTile(): MercatorTile {\n return this.tile\n }\n\n protected guessZoom() {\n const bn = new BigNumber(this.id.toString('hex'), 16)\n const quadkeySimple = bn.toString(4)\n this.setZoom(quadkeySimple.length)\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,325 @@
1
+ import { assertEx } from "@xylabs/assert";
2
+ import { BigNumber } from "@xylabs/bignumber";
3
+ import { Buffer } from "@xylabs/buffer";
4
+ import {
5
+ boundingBoxToCenter,
6
+ GeoJson,
7
+ tileFromPoint,
8
+ tileFromQuadkey,
9
+ tilesFromBoundingBox,
10
+ tileToBoundingBox,
11
+ tileToQuadkey
12
+ } from "@xyo-network/sdk-geo";
13
+ import { LngLat } from "mapbox-gl";
14
+ import { RelativeDirectionConstantLookup } from "./RelativeDirectionConstantLookup";
15
+ import { bitShiftLeft, bitShiftRight, padHex } from "./utils";
16
+ export * from "./utils";
17
+ const MAX_ZOOM = 124;
18
+ const isQuadkey = (obj) => obj?.type === Quadkey.type;
19
+ class Quadkey {
20
+ static Zero = Quadkey.from(0, Buffer.alloc(31, 0));
21
+ static root = new Quadkey();
22
+ static type = "Quadkey";
23
+ type = Quadkey.type;
24
+ _geoJson;
25
+ key = Buffer.alloc(32);
26
+ constructor(key = Buffer.alloc(32)) {
27
+ key.copy(this.key, this.key.length - key.length);
28
+ this.guessZoom();
29
+ }
30
+ get base10String() {
31
+ return this.bigNumber.toString(10);
32
+ }
33
+ get base4Hash() {
34
+ const bn = new BigNumber(this.id.toString("hex"), 16);
35
+ const zoom = this.zoom;
36
+ if (zoom === 0) {
37
+ return "";
38
+ }
39
+ let quadkeySimple = bn.toString(4);
40
+ while (quadkeySimple.length < zoom) {
41
+ quadkeySimple = `0${quadkeySimple}`;
42
+ }
43
+ return quadkeySimple;
44
+ }
45
+ get base4HashLabel() {
46
+ const hash = this.base4Hash;
47
+ return hash.length === 0 ? "fhr" : hash;
48
+ }
49
+ get bigNumber() {
50
+ return new BigNumber(`${this.key.toString("hex")}`, "hex");
51
+ }
52
+ get boundingBox() {
53
+ return tileToBoundingBox(this.tile);
54
+ }
55
+ get buffer() {
56
+ return this.key;
57
+ }
58
+ get center() {
59
+ const result = boundingBoxToCenter(this.boundingBox);
60
+ return new LngLat(result[0], result[1]);
61
+ }
62
+ get children() {
63
+ assertEx(this.zoom < MAX_ZOOM - 1, "Can not get children of bottom tiles");
64
+ const result = [];
65
+ const shiftedId = bitShiftLeft(bitShiftLeft(this.id));
66
+ for (let i = 0; i < 4; i++) {
67
+ const currentLastByte = shiftedId.readUInt8(shiftedId.length - 1);
68
+ shiftedId.writeUInt8(currentLastByte & 252 | i, shiftedId.length - 1);
69
+ result.push(new Quadkey().setId(shiftedId).setZoom(this.zoom + 1));
70
+ }
71
+ return result;
72
+ }
73
+ get gridLocation() {
74
+ const tileData = tileFromQuadkey(this.base4Hash);
75
+ return {
76
+ col: 2 ** tileData[2] - tileData[1] - 1,
77
+ row: tileData[0],
78
+ zoom: tileData[2]
79
+ };
80
+ }
81
+ get hex() {
82
+ return `0x${this.key.toString("hex")}`;
83
+ }
84
+ get id() {
85
+ return this.buffer.slice(1);
86
+ }
87
+ get parent() {
88
+ if (this.zoom > 0) {
89
+ return new Quadkey().setId(bitShiftRight(bitShiftRight(this.id))).setZoom(this.zoom - 1);
90
+ }
91
+ }
92
+ get siblings() {
93
+ const siblings = assertEx(this.parent?.children, `siblings: parentChildren ${this.base4Hash}`);
94
+ const filteredSiblings = siblings.filter((quadkey) => this.compareTo(quadkey) !== 0);
95
+ assertEx(filteredSiblings.length === 3, `siblings: expected 3 [${filteredSiblings.length}]`);
96
+ return filteredSiblings;
97
+ }
98
+ get tile() {
99
+ return tileFromQuadkey(this.base4Hash);
100
+ }
101
+ get valid() {
102
+ const zoom = this.zoom;
103
+ const shift = (MAX_ZOOM - zoom) * 2;
104
+ const id = this.id;
105
+ let testId = id;
106
+ for (let i = 0; i < shift; i++) {
107
+ testId = bitShiftLeft(testId);
108
+ }
109
+ for (let i = 0; i < shift; i++) {
110
+ testId = bitShiftRight(testId);
111
+ }
112
+ return testId.compare(id) === 0;
113
+ }
114
+ get zoom() {
115
+ return this.buffer.readUInt8(0);
116
+ }
117
+ static from(zoom, id) {
118
+ return new Quadkey().setId(id).setZoom(zoom);
119
+ }
120
+ static fromBase10String(value) {
121
+ return new Quadkey(Buffer.from(padHex(new BigNumber(value, 10).toString(16)), "hex"));
122
+ }
123
+ static fromBase16String(value) {
124
+ const valueToUse = value.startsWith("0x") ? value.slice(2) : value;
125
+ return new Quadkey(Buffer.from(padHex(valueToUse), "hex"));
126
+ }
127
+ static fromBase4String(value) {
128
+ if (value === "fhr" || value === "") {
129
+ return Quadkey.root;
130
+ }
131
+ if (value && value.length && value.length > 0) {
132
+ const quadkey = new Quadkey(Buffer.from(padHex(new BigNumber(value, 4).toString(16)), "hex")).setZoom(value.length);
133
+ return quadkey.valid ? quadkey : void 0;
134
+ }
135
+ }
136
+ static fromBoundingBox(boundingBox, zoom) {
137
+ const tiles = tilesFromBoundingBox(boundingBox, Math.floor(zoom));
138
+ const result = [];
139
+ for (const tile of tiles) {
140
+ result.push(assertEx(Quadkey.fromTile(tile), "Bad Quadkey"));
141
+ }
142
+ return result;
143
+ }
144
+ static fromBuffer(value) {
145
+ return Quadkey.fromBase16String(value.toString("hex"));
146
+ }
147
+ static fromLngLat(point, zoom) {
148
+ const tile = tileFromPoint(LngLat.convert(point), zoom);
149
+ const quadkeyString = tileToQuadkey(tile);
150
+ return Quadkey.fromBase4String(quadkeyString);
151
+ }
152
+ static fromString(zoom, id, base = 10) {
153
+ switch (base) {
154
+ case 10:
155
+ return Quadkey.fromBase10String(id)?.setZoom(zoom);
156
+ case 16:
157
+ return Quadkey.fromBase16String(id).setZoom(zoom);
158
+ default:
159
+ throw Error(`Invalid base [${base}]`);
160
+ }
161
+ }
162
+ static fromTile(tile) {
163
+ return Quadkey.fromBase4String(tileToQuadkey(tile));
164
+ }
165
+ childrenByZoom(zoom) {
166
+ if (zoom && zoom === this.zoom) {
167
+ return [this];
168
+ }
169
+ let deepResult = [];
170
+ for (const quadkey of this.children) {
171
+ deepResult = deepResult.concat(quadkey.childrenByZoom(zoom));
172
+ }
173
+ return deepResult;
174
+ }
175
+ clone() {
176
+ return Quadkey.fromBase10String(this.base10String);
177
+ }
178
+ compareTo(quadkey) {
179
+ return this.bigNumber.cmp(quadkey.bigNumber);
180
+ }
181
+ equals(obj) {
182
+ return obj.base4HashLabel == this.base4HashLabel;
183
+ }
184
+ geoJson() {
185
+ this._geoJson = this._geoJson ?? new GeoJson(this.base4Hash);
186
+ return this._geoJson;
187
+ }
188
+ getGridBoundingBox(size) {
189
+ const hash = this.base4Hash;
190
+ let index = 0;
191
+ let left = 0;
192
+ let top = 0;
193
+ let blockSize = size;
194
+ while (index < hash.length) {
195
+ blockSize >>= 1;
196
+ switch (hash[index]) {
197
+ case "1":
198
+ left += blockSize;
199
+ break;
200
+ case "2":
201
+ top += blockSize;
202
+ break;
203
+ case "3":
204
+ left += blockSize;
205
+ top += blockSize;
206
+ break;
207
+ }
208
+ index++;
209
+ }
210
+ if (blockSize < 2) {
211
+ blockSize = 2;
212
+ }
213
+ return {
214
+ height: blockSize,
215
+ left,
216
+ top,
217
+ width: blockSize
218
+ };
219
+ }
220
+ /** @deprecated use .gridLocation instead */
221
+ getGridLocation() {
222
+ return this.gridLocation;
223
+ }
224
+ isInBoundingBox(boundingBox) {
225
+ const tileBoundingBox = tileToBoundingBox(this.tile);
226
+ return boundingBox.contains(tileBoundingBox.getNorthEast()) || boundingBox.contains(tileBoundingBox.getNorthWest()) || boundingBox.contains(tileBoundingBox.getSouthEast()) || boundingBox.contains(tileBoundingBox.getSouthWest());
227
+ }
228
+ relative(direction) {
229
+ const directionConstant = assertEx(RelativeDirectionConstantLookup[direction], "Invalid direction");
230
+ let quadkey = this.base4Hash;
231
+ if (quadkey.length === 0) {
232
+ return this;
233
+ }
234
+ let index = quadkey.length - 1;
235
+ while (index >= 0) {
236
+ let number = parseInt(quadkey.charAt(index));
237
+ number += directionConstant;
238
+ if (number > 3) {
239
+ number -= 4;
240
+ quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1);
241
+ index--;
242
+ } else if (number < 0) {
243
+ number += 4;
244
+ quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1);
245
+ index--;
246
+ } else {
247
+ index = -1;
248
+ }
249
+ }
250
+ return Quadkey.fromBase4String(quadkey);
251
+ }
252
+ setId(id) {
253
+ this.setKey(this.zoom, id);
254
+ return this;
255
+ }
256
+ setKey(zoom, id) {
257
+ id.copy(this.key, this.key.length - id.length);
258
+ this.key.writeUInt8(zoom, 0);
259
+ return this;
260
+ }
261
+ setZoom(zoom) {
262
+ assertEx(zoom < MAX_ZOOM, `Invalid zoom [${zoom}] max=${MAX_ZOOM}`);
263
+ this.setKey(zoom, this.id);
264
+ return this;
265
+ }
266
+ /** @deprecated use .base10String*/
267
+ toBase10String() {
268
+ return this.base10String;
269
+ }
270
+ /** @deprecated use .base4Hash */
271
+ toBase4Hash() {
272
+ return this.base4Hash;
273
+ }
274
+ /** @deprecated use .base4HashLabel */
275
+ toBase4HashLabel() {
276
+ const hash = this.base4HashLabel;
277
+ return hash.length === 0 ? "fhr" : hash;
278
+ }
279
+ /** @deprecated use .bigNumber */
280
+ toBigNumber() {
281
+ return this.bigNumber;
282
+ }
283
+ /** @deprecated use .boundingBox */
284
+ toBoundingBox() {
285
+ return this.boundingBox;
286
+ }
287
+ /** @deprecated use .buffer */
288
+ toBuffer() {
289
+ return this.buffer;
290
+ }
291
+ /** @deprecated use .center */
292
+ toCenter() {
293
+ return this.center;
294
+ }
295
+ /** @deprecated use .hex instead */
296
+ toHex() {
297
+ return this.hex;
298
+ }
299
+ toJSON() {
300
+ return this.base4HashLabel;
301
+ }
302
+ toShortString() {
303
+ const buffer = this.buffer;
304
+ const part1 = buffer.slice(0, 2);
305
+ const part2 = buffer.slice(buffer.length - 2, buffer.length);
306
+ return `${part1.toString("hex")}...${part2.toString("hex")}`;
307
+ }
308
+ toString() {
309
+ return `0x${padHex(this.bigNumber.toString(16))}`;
310
+ }
311
+ /** @deprecated use .tile instead */
312
+ toTile() {
313
+ return this.tile;
314
+ }
315
+ guessZoom() {
316
+ const bn = new BigNumber(this.id.toString("hex"), 16);
317
+ const quadkeySimple = bn.toString(4);
318
+ this.setZoom(quadkeySimple.length);
319
+ }
320
+ }
321
+ export {
322
+ Quadkey,
323
+ isQuadkey
324
+ };
325
+ //# sourceMappingURL=Quadkey.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Quadkey.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BigNumber } from '@xylabs/bignumber'\nimport { Buffer } from '@xylabs/buffer'\nimport {\n boundingBoxToCenter,\n GeoJson,\n MercatorBoundingBox,\n MercatorTile,\n tileFromPoint,\n tileFromQuadkey,\n tilesFromBoundingBox,\n tileToBoundingBox,\n tileToQuadkey,\n} from '@xyo-network/sdk-geo'\nimport { LngLat, LngLatLike } from 'mapbox-gl'\n\nimport { RelativeDirectionConstantLookup } from './RelativeDirectionConstantLookup'\nimport { bitShiftLeft, bitShiftRight, padHex } from './utils'\n\nexport * from './utils'\n\nconst MAX_ZOOM = 124\n\nexport const isQuadkey = (obj: { type: string }) => obj?.type === Quadkey.type\n\nexport class Quadkey {\n static Zero = Quadkey.from(0, Buffer.alloc(31, 0))\n static root = new Quadkey()\n static type = 'Quadkey'\n\n type = Quadkey.type\n\n private _geoJson?: GeoJson\n private key = Buffer.alloc(32)\n\n constructor(key = Buffer.alloc(32)) {\n key.copy(this.key, this.key.length - key.length)\n this.guessZoom()\n }\n\n get base10String() {\n return this.bigNumber.toString(10)\n }\n\n get base4Hash() {\n const bn = new BigNumber(this.id.toString('hex'), 16)\n const zoom = this.zoom\n if (zoom === 0) {\n return ''\n }\n let quadkeySimple = bn.toString(4)\n while (quadkeySimple.length < zoom) {\n quadkeySimple = `0${quadkeySimple}`\n }\n return quadkeySimple\n }\n\n get base4HashLabel() {\n const hash = this.base4Hash\n return hash.length === 0 ? 'fhr' : hash\n }\n\n get bigNumber() {\n return new BigNumber(`${this.key.toString('hex')}`, 'hex')\n }\n\n get boundingBox(): MercatorBoundingBox {\n return tileToBoundingBox(this.tile)\n }\n\n get buffer() {\n return this.key\n }\n\n get center() {\n const result = boundingBoxToCenter(this.boundingBox)\n return new LngLat(result[0], result[1])\n }\n\n get children() {\n assertEx(this.zoom < MAX_ZOOM - 1, 'Can not get children of bottom tiles')\n const result: Quadkey[] = []\n const shiftedId = bitShiftLeft(bitShiftLeft(this.id))\n for (let i = 0; i < 4; i++) {\n const currentLastByte = shiftedId.readUInt8(shiftedId.length - 1)\n shiftedId.writeUInt8((currentLastByte & 0xfc) | i, shiftedId.length - 1)\n result.push(new Quadkey().setId(shiftedId).setZoom(this.zoom + 1))\n }\n return result\n }\n\n get gridLocation() {\n const tileData = tileFromQuadkey(this.base4Hash)\n\n return {\n col: 2 ** tileData[2] - tileData[1] - 1,\n row: tileData[0],\n zoom: tileData[2],\n }\n }\n\n get hex() {\n return `0x${this.key.toString('hex')}`\n }\n\n get id() {\n return this.buffer.slice(1)\n }\n\n get parent(): Quadkey | undefined {\n if (this.zoom > 0) {\n return new Quadkey().setId(bitShiftRight(bitShiftRight(this.id))).setZoom(this.zoom - 1)\n }\n }\n\n get siblings() {\n const siblings = assertEx(this.parent?.children, `siblings: parentChildren ${this.base4Hash}`)\n const filteredSiblings = siblings.filter((quadkey) => this.compareTo(quadkey) !== 0)\n assertEx(filteredSiblings.length === 3, `siblings: expected 3 [${filteredSiblings.length}]`)\n return filteredSiblings\n }\n\n get tile(): MercatorTile {\n return tileFromQuadkey(this.base4Hash)\n }\n\n get valid() {\n const zoom = this.zoom\n const shift = (MAX_ZOOM - zoom) * 2\n const id = this.id\n let testId = id\n for (let i = 0; i < shift; i++) {\n testId = bitShiftLeft(testId)\n }\n for (let i = 0; i < shift; i++) {\n testId = bitShiftRight(testId)\n }\n return testId.compare(id) === 0\n }\n\n get zoom() {\n return this.buffer.readUInt8(0)\n }\n\n static from(zoom: number, id: Buffer) {\n return new Quadkey().setId(id).setZoom(zoom)\n }\n\n static fromBase10String(value: string) {\n return new Quadkey(Buffer.from(padHex(new BigNumber(value, 10).toString(16)), 'hex'))\n }\n\n static fromBase16String(value: string) {\n const valueToUse = value.startsWith('0x') ? value.slice(2) : value\n return new Quadkey(Buffer.from(padHex(valueToUse), 'hex'))\n }\n\n static fromBase4String(value?: string) {\n if (value === 'fhr' || value === '') {\n return Quadkey.root\n }\n if (value && value.length && value.length > 0) {\n const quadkey = new Quadkey(Buffer.from(padHex(new BigNumber(value, 4).toString(16)), 'hex')).setZoom(value.length)\n return quadkey.valid ? quadkey : undefined\n }\n }\n\n static fromBoundingBox(boundingBox: MercatorBoundingBox, zoom: number) {\n const tiles = tilesFromBoundingBox(boundingBox, Math.floor(zoom))\n const result: Quadkey[] = []\n for (const tile of tiles) {\n result.push(assertEx(Quadkey.fromTile(tile), 'Bad Quadkey'))\n }\n\n return result\n }\n\n static fromBuffer(value: Buffer) {\n return Quadkey.fromBase16String(value.toString('hex'))\n }\n\n static fromLngLat(point: LngLatLike, zoom: number) {\n const tile = tileFromPoint(LngLat.convert(point), zoom)\n const quadkeyString = tileToQuadkey(tile)\n return Quadkey.fromBase4String(quadkeyString)\n }\n\n static fromString(zoom: number, id: string, base = 10) {\n switch (base) {\n case 10:\n return Quadkey.fromBase10String(id)?.setZoom(zoom)\n case 16:\n return Quadkey.fromBase16String(id).setZoom(zoom)\n default:\n throw Error(`Invalid base [${base}]`)\n }\n }\n\n static fromTile(tile: MercatorTile) {\n return Quadkey.fromBase4String(tileToQuadkey(tile))\n }\n\n childrenByZoom(zoom: number) {\n // if we are limiting by zoom, and we are already at that limit, just return this quadkey\n if (zoom && zoom === this.zoom) {\n return [this]\n }\n\n // recursively get children\n let deepResult: Quadkey[] = []\n for (const quadkey of this.children) {\n deepResult = deepResult.concat(quadkey.childrenByZoom(zoom))\n }\n return deepResult\n }\n\n clone() {\n return Quadkey.fromBase10String(this.base10String)\n }\n\n compareTo(quadkey: Quadkey) {\n return this.bigNumber.cmp(quadkey.bigNumber)\n }\n\n equals(obj: Quadkey): boolean {\n return obj.base4HashLabel == this.base4HashLabel\n }\n\n geoJson() {\n this._geoJson = this._geoJson ?? new GeoJson(this.base4Hash)\n return this._geoJson\n }\n\n getGridBoundingBox(size: number) {\n const hash = this.base4Hash\n let index = 0\n let left = 0\n let top = 0\n let blockSize = size\n while (index < hash.length) {\n blockSize >>= 1\n switch (hash[index]) {\n case '1':\n left += blockSize\n break\n case '2':\n top += blockSize\n break\n case '3':\n left += blockSize\n top += blockSize\n break\n }\n index++\n }\n if (blockSize < 2) {\n blockSize = 2\n }\n return {\n height: blockSize,\n left,\n top,\n width: blockSize,\n }\n }\n\n /** @deprecated use .gridLocation instead */\n getGridLocation() {\n return this.gridLocation\n }\n\n isInBoundingBox(boundingBox: MercatorBoundingBox) {\n const tileBoundingBox = tileToBoundingBox(this.tile)\n return (\n boundingBox.contains(tileBoundingBox.getNorthEast()) ||\n boundingBox.contains(tileBoundingBox.getNorthWest()) ||\n boundingBox.contains(tileBoundingBox.getSouthEast()) ||\n boundingBox.contains(tileBoundingBox.getSouthWest())\n )\n }\n\n relative(direction: string) {\n const directionConstant = assertEx(RelativeDirectionConstantLookup[direction], 'Invalid direction')\n let quadkey = this.base4Hash\n if (quadkey.length === 0) {\n return this\n }\n let index = quadkey.length - 1\n while (index >= 0) {\n let number = parseInt(quadkey.charAt(index))\n number += directionConstant\n if (number > 3) {\n number -= 4\n quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1)\n index--\n } else if (number < 0) {\n number += 4\n quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1)\n index--\n } else {\n index = -1\n }\n }\n return Quadkey.fromBase4String(quadkey)\n }\n\n setId(id: Buffer) {\n this.setKey(this.zoom, id)\n return this\n }\n\n setKey(zoom: number, id: Buffer) {\n id.copy(this.key, this.key.length - id.length)\n this.key.writeUInt8(zoom, 0)\n return this\n }\n\n setZoom(zoom: number) {\n assertEx(zoom < MAX_ZOOM, `Invalid zoom [${zoom}] max=${MAX_ZOOM}`)\n this.setKey(zoom, this.id)\n return this\n }\n\n /** @deprecated use .base10String*/\n toBase10String() {\n return this.base10String\n }\n\n /** @deprecated use .base4Hash */\n toBase4Hash() {\n return this.base4Hash\n }\n\n /** @deprecated use .base4HashLabel */\n toBase4HashLabel() {\n const hash = this.base4HashLabel\n return hash.length === 0 ? 'fhr' : hash\n }\n\n /** @deprecated use .bigNumber */\n toBigNumber() {\n return this.bigNumber\n }\n\n /** @deprecated use .boundingBox */\n toBoundingBox(): MercatorBoundingBox {\n return this.boundingBox\n }\n\n /** @deprecated use .buffer */\n toBuffer() {\n return this.buffer\n }\n\n /** @deprecated use .center */\n toCenter() {\n return this.center\n }\n\n /** @deprecated use .hex instead */\n toHex() {\n return this.hex\n }\n\n toJSON(): string {\n return this.base4HashLabel\n }\n\n toShortString() {\n const buffer = this.buffer\n const part1 = buffer.slice(0, 2)\n const part2 = buffer.slice(buffer.length - 2, buffer.length)\n return `${part1.toString('hex')}...${part2.toString('hex')}`\n }\n\n toString() {\n return `0x${padHex(this.bigNumber.toString(16))}`\n }\n\n /** @deprecated use .tile instead */\n toTile(): MercatorTile {\n return this.tile\n }\n\n protected guessZoom() {\n const bn = new BigNumber(this.id.toString('hex'), 16)\n const quadkeySimple = bn.toString(4)\n this.setZoom(quadkeySimple.length)\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,2 @@
1
+ export declare const RelativeDirectionConstantLookup: Record<string, number>;
2
+ //# sourceMappingURL=RelativeDirectionConstantLookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelativeDirectionConstantLookup.d.ts","sourceRoot":"","sources":["../../src/RelativeDirectionConstantLookup.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKlE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const RelativeDirectionConstantLookup: Record<string, number>;
2
+ //# sourceMappingURL=RelativeDirectionConstantLookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelativeDirectionConstantLookup.d.ts","sourceRoot":"","sources":["../../src/RelativeDirectionConstantLookup.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKlE,CAAA"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var RelativeDirectionConstantLookup_exports = {};
20
+ __export(RelativeDirectionConstantLookup_exports, {
21
+ RelativeDirectionConstantLookup: () => RelativeDirectionConstantLookup
22
+ });
23
+ module.exports = __toCommonJS(RelativeDirectionConstantLookup_exports);
24
+ const RelativeDirectionConstantLookup = {
25
+ e: 1,
26
+ n: -2,
27
+ s: 2,
28
+ w: -1
29
+ };
30
+ // Annotate the CommonJS export names for ESM import in node:
31
+ 0 && (module.exports = {
32
+ RelativeDirectionConstantLookup
33
+ });
34
+ //# sourceMappingURL=RelativeDirectionConstantLookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/RelativeDirectionConstantLookup.ts"],"sourcesContent":["export const RelativeDirectionConstantLookup: Record<string, number> = {\n e: 1,\n n: -2,\n s: 2,\n w: -1,\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,kCAA0D;AAAA,EACrE,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;","names":[]}
@@ -0,0 +1,10 @@
1
+ const RelativeDirectionConstantLookup = {
2
+ e: 1,
3
+ n: -2,
4
+ s: 2,
5
+ w: -1
6
+ };
7
+ export {
8
+ RelativeDirectionConstantLookup
9
+ };
10
+ //# sourceMappingURL=RelativeDirectionConstantLookup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/RelativeDirectionConstantLookup.ts"],"sourcesContent":["export const RelativeDirectionConstantLookup: Record<string, number> = {\n e: 1,\n n: -2,\n s: 2,\n w: -1,\n}\n"],"mappings":"AAAO,MAAM,kCAA0D;AAAA,EACrE,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;","names":[]}
@@ -0,0 +1,2 @@
1
+ export * from './Quadkey';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './Quadkey';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var src_exports = {};
17
+ module.exports = __toCommonJS(src_exports);
18
+ __reExport(src_exports, require("./Quadkey"), module.exports);
19
+ // Annotate the CommonJS export names for ESM import in node:
20
+ 0 && (module.exports = {
21
+ ...require("./Quadkey")
22
+ });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './Quadkey'\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,sBAAd;","names":[]}
@@ -0,0 +1,2 @@
1
+ export * from "./Quadkey";
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './Quadkey'\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ import { Buffer } from '@xylabs/buffer';
3
+ export declare const padHex: (hex: string, byteCount?: number) => string;
4
+ export declare const bitShiftLeft: (buffer: Buffer) => Buffer;
5
+ export declare const bitShiftRight: (buffer: Buffer) => Buffer;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,eAAO,MAAM,MAAM,QAAS,MAAM,cAAc,MAAM,WAWrD,CAAA;AAED,eAAO,MAAM,YAAY,WAAY,MAAM,WAW1C,CAAA;AAED,eAAO,MAAM,aAAa,WAAY,MAAM,WAW3C,CAAA"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ import { Buffer } from '@xylabs/buffer';
3
+ export declare const padHex: (hex: string, byteCount?: number) => string;
4
+ export declare const bitShiftLeft: (buffer: Buffer) => Buffer;
5
+ export declare const bitShiftRight: (buffer: Buffer) => Buffer;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,eAAO,MAAM,MAAM,QAAS,MAAM,cAAc,MAAM,WAWrD,CAAA;AAED,eAAO,MAAM,YAAY,WAAY,MAAM,WAW1C,CAAA;AAED,eAAO,MAAM,aAAa,WAAY,MAAM,WAW3C,CAAA"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var utils_exports = {};
20
+ __export(utils_exports, {
21
+ bitShiftLeft: () => bitShiftLeft,
22
+ bitShiftRight: () => bitShiftRight,
23
+ padHex: () => padHex
24
+ });
25
+ module.exports = __toCommonJS(utils_exports);
26
+ var import_buffer = require("@xylabs/buffer");
27
+ const padHex = (hex, byteCount) => {
28
+ let result = hex;
29
+ if (hex.length % 2 !== 0) {
30
+ result = `0${hex}`;
31
+ }
32
+ if (byteCount) {
33
+ while (result.length / 2 < byteCount) {
34
+ result = `00${result}`;
35
+ }
36
+ }
37
+ return result;
38
+ };
39
+ const bitShiftLeft = (buffer) => {
40
+ const shifted = import_buffer.Buffer.alloc(buffer.length);
41
+ const last = buffer.length - 1;
42
+ for (let index = 0; index < last; index++) {
43
+ shifted[index] = buffer[index] << 1;
44
+ if (buffer[index + 1] & 128) {
45
+ shifted[index] += 1;
46
+ }
47
+ }
48
+ shifted[last] = buffer[last] << 1;
49
+ return shifted;
50
+ };
51
+ const bitShiftRight = (buffer) => {
52
+ const shifted = import_buffer.Buffer.alloc(buffer.length);
53
+ const last = buffer.length - 1;
54
+ for (let index = last; index > 0; index--) {
55
+ shifted[index] = buffer[index] >> 1;
56
+ if (buffer[index - 1] & 1) {
57
+ shifted[index] += 128;
58
+ }
59
+ }
60
+ shifted[0] = buffer[0] >> 1;
61
+ return shifted;
62
+ };
63
+ // Annotate the CommonJS export names for ESM import in node:
64
+ 0 && (module.exports = {
65
+ bitShiftLeft,
66
+ bitShiftRight,
67
+ padHex
68
+ });
69
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["import { Buffer } from '@xylabs/buffer'\n\nexport const padHex = (hex: string, byteCount?: number) => {\n let result = hex\n if (hex.length % 2 !== 0) {\n result = `0${hex}`\n }\n if (byteCount) {\n while (result.length / 2 < byteCount) {\n result = `00${result}`\n }\n }\n return result\n}\n\nexport const bitShiftLeft = (buffer: Buffer) => {\n const shifted = Buffer.alloc(buffer.length)\n const last = buffer.length - 1\n for (let index = 0; index < last; index++) {\n shifted[index] = buffer[index] << 1\n if (buffer[index + 1] & 0x80) {\n shifted[index] += 0x01\n }\n }\n shifted[last] = buffer[last] << 1\n return shifted\n}\n\nexport const bitShiftRight = (buffer: Buffer) => {\n const shifted = Buffer.alloc(buffer.length)\n const last = buffer.length - 1\n for (let index = last; index > 0; index--) {\n shifted[index] = buffer[index] >> 1\n if (buffer[index - 1] & 0x01) {\n shifted[index] += 0x80\n }\n }\n shifted[0] = buffer[0] >> 1\n return shifted\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AAEhB,MAAM,SAAS,CAAC,KAAa,cAAuB;AACzD,MAAI,SAAS;AACb,MAAI,IAAI,SAAS,MAAM,GAAG;AACxB,aAAS,IAAI,GAAG;AAAA,EAClB;AACA,MAAI,WAAW;AACb,WAAO,OAAO,SAAS,IAAI,WAAW;AACpC,eAAS,KAAK,MAAM;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,eAAe,CAAC,WAAmB;AAC9C,QAAM,UAAU,qBAAO,MAAM,OAAO,MAAM;AAC1C,QAAM,OAAO,OAAO,SAAS;AAC7B,WAAS,QAAQ,GAAG,QAAQ,MAAM,SAAS;AACzC,YAAQ,KAAK,IAAI,OAAO,KAAK,KAAK;AAClC,QAAI,OAAO,QAAQ,CAAC,IAAI,KAAM;AAC5B,cAAQ,KAAK,KAAK;AAAA,IACpB;AAAA,EACF;AACA,UAAQ,IAAI,IAAI,OAAO,IAAI,KAAK;AAChC,SAAO;AACT;AAEO,MAAM,gBAAgB,CAAC,WAAmB;AAC/C,QAAM,UAAU,qBAAO,MAAM,OAAO,MAAM;AAC1C,QAAM,OAAO,OAAO,SAAS;AAC7B,WAAS,QAAQ,MAAM,QAAQ,GAAG,SAAS;AACzC,YAAQ,KAAK,IAAI,OAAO,KAAK,KAAK;AAClC,QAAI,OAAO,QAAQ,CAAC,IAAI,GAAM;AAC5B,cAAQ,KAAK,KAAK;AAAA,IACpB;AAAA,EACF;AACA,UAAQ,CAAC,IAAI,OAAO,CAAC,KAAK;AAC1B,SAAO;AACT;","names":[]}