@loaders.gl/wkt 4.0.0-alpha.9 → 4.0.0-beta.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 (231) hide show
  1. package/README.md +4 -1
  2. package/dist/dist.min.js +1449 -404
  3. package/dist/es5/hex-wkb-loader.js +64 -0
  4. package/dist/es5/hex-wkb-loader.js.map +1 -0
  5. package/dist/es5/index.js +76 -1
  6. package/dist/es5/index.js.map +1 -1
  7. package/dist/es5/lib/encode-twkb.js +269 -0
  8. package/dist/es5/lib/encode-twkb.js.map +1 -0
  9. package/dist/es5/lib/encode-wkb.js +12 -10
  10. package/dist/es5/lib/encode-wkb.js.map +1 -1
  11. package/dist/es5/lib/encode-wkt-crs.js +32 -0
  12. package/dist/es5/lib/encode-wkt-crs.js.map +1 -0
  13. package/dist/es5/lib/encode-wkt.js +1 -1
  14. package/dist/es5/lib/encode-wkt.js.map +1 -1
  15. package/dist/es5/lib/parse-hex-wkb.js +2 -0
  16. package/dist/es5/lib/parse-hex-wkb.js.map +1 -0
  17. package/dist/es5/lib/parse-twkb.js +263 -0
  18. package/dist/es5/lib/parse-twkb.js.map +1 -0
  19. package/dist/es5/lib/parse-wkb-header.js +114 -0
  20. package/dist/es5/lib/parse-wkb-header.js.map +1 -0
  21. package/dist/es5/lib/parse-wkb.js +59 -52
  22. package/dist/es5/lib/parse-wkb.js.map +1 -1
  23. package/dist/es5/lib/parse-wkt-crs.js +106 -0
  24. package/dist/es5/lib/parse-wkt-crs.js.map +1 -0
  25. package/dist/es5/lib/parse-wkt.js +210 -153
  26. package/dist/es5/lib/parse-wkt.js.map +1 -1
  27. package/dist/es5/lib/utils/base64-encoder.js +26 -0
  28. package/dist/es5/lib/utils/base64-encoder.js.map +1 -0
  29. package/dist/es5/lib/utils/binary-reader.js +98 -0
  30. package/dist/es5/lib/utils/binary-reader.js.map +1 -0
  31. package/dist/es5/lib/utils/binary-writer.js +2 -2
  32. package/dist/es5/lib/utils/binary-writer.js.map +1 -1
  33. package/dist/es5/lib/utils/hex-encoder.js +63 -0
  34. package/dist/es5/lib/utils/hex-encoder.js.map +1 -0
  35. package/dist/es5/lib/utils/hex-transcoder.js +41 -0
  36. package/dist/es5/lib/utils/hex-transcoder.js.map +1 -0
  37. package/dist/es5/lib/utils/version.js +1 -1
  38. package/dist/es5/lib/utils/version.js.map +1 -1
  39. package/dist/es5/twkb-loader.js +53 -0
  40. package/dist/es5/twkb-loader.js.map +1 -0
  41. package/dist/es5/twkb-writer.js +40 -0
  42. package/dist/es5/twkb-writer.js.map +1 -0
  43. package/dist/es5/wkb-loader.js +9 -9
  44. package/dist/es5/wkb-loader.js.map +1 -1
  45. package/dist/es5/wkb-writer.js +2 -3
  46. package/dist/es5/wkb-writer.js.map +1 -1
  47. package/dist/es5/wkt-crs-loader.js +47 -0
  48. package/dist/es5/wkt-crs-loader.js.map +1 -0
  49. package/dist/es5/wkt-crs-writer.js +49 -0
  50. package/dist/es5/wkt-crs-writer.js.map +1 -0
  51. package/dist/es5/wkt-loader.js +10 -6
  52. package/dist/es5/wkt-loader.js.map +1 -1
  53. package/dist/es5/wkt-writer.js +2 -3
  54. package/dist/es5/wkt-writer.js.map +1 -1
  55. package/dist/es5/workers/wkb-worker.js.map +1 -1
  56. package/dist/es5/workers/wkt-worker.js.map +1 -1
  57. package/dist/esm/hex-wkb-loader.js +37 -0
  58. package/dist/esm/hex-wkb-loader.js.map +1 -0
  59. package/dist/esm/index.js +10 -1
  60. package/dist/esm/index.js.map +1 -1
  61. package/dist/esm/lib/encode-twkb.js +180 -0
  62. package/dist/esm/lib/encode-twkb.js.map +1 -0
  63. package/dist/esm/lib/encode-wkb.js +4 -4
  64. package/dist/esm/lib/encode-wkb.js.map +1 -1
  65. package/dist/esm/lib/encode-wkt-crs.js +21 -0
  66. package/dist/esm/lib/encode-wkt-crs.js.map +1 -0
  67. package/dist/esm/lib/encode-wkt.js +1 -1
  68. package/dist/esm/lib/encode-wkt.js.map +1 -1
  69. package/dist/esm/lib/parse-hex-wkb.js +2 -0
  70. package/dist/esm/lib/parse-hex-wkb.js.map +1 -0
  71. package/dist/esm/lib/parse-twkb.js +256 -0
  72. package/dist/esm/lib/parse-twkb.js.map +1 -0
  73. package/dist/esm/lib/parse-wkb-header.js +105 -0
  74. package/dist/esm/lib/parse-wkb-header.js.map +1 -0
  75. package/dist/esm/lib/parse-wkb.js +59 -51
  76. package/dist/esm/lib/parse-wkb.js.map +1 -1
  77. package/dist/esm/lib/parse-wkt-crs.js +96 -0
  78. package/dist/esm/lib/parse-wkt-crs.js.map +1 -0
  79. package/dist/esm/lib/parse-wkt.js +204 -152
  80. package/dist/esm/lib/parse-wkt.js.map +1 -1
  81. package/dist/esm/lib/utils/base64-encoder.js +7 -0
  82. package/dist/esm/lib/utils/base64-encoder.js.map +1 -0
  83. package/dist/esm/lib/utils/binary-reader.js +67 -0
  84. package/dist/esm/lib/utils/binary-reader.js.map +1 -0
  85. package/dist/esm/lib/utils/binary-writer.js +1 -1
  86. package/dist/esm/lib/utils/binary-writer.js.map +1 -1
  87. package/dist/esm/lib/utils/hex-encoder.js +40 -0
  88. package/dist/esm/lib/utils/hex-encoder.js.map +1 -0
  89. package/dist/esm/lib/utils/hex-transcoder.js +34 -0
  90. package/dist/esm/lib/utils/hex-transcoder.js.map +1 -0
  91. package/dist/esm/lib/utils/version.js +1 -1
  92. package/dist/esm/lib/utils/version.js.map +1 -1
  93. package/dist/esm/twkb-loader.js +24 -0
  94. package/dist/esm/twkb-loader.js.map +1 -0
  95. package/dist/esm/twkb-writer.js +14 -0
  96. package/dist/esm/twkb-writer.js.map +1 -0
  97. package/dist/esm/wkb-loader.js +6 -4
  98. package/dist/esm/wkb-loader.js.map +1 -1
  99. package/dist/esm/wkb-writer.js +1 -1
  100. package/dist/esm/wkb-writer.js.map +1 -1
  101. package/dist/esm/wkt-crs-loader.js +19 -0
  102. package/dist/esm/wkt-crs-loader.js.map +1 -0
  103. package/dist/esm/wkt-crs-writer.js +19 -0
  104. package/dist/esm/wkt-crs-writer.js.map +1 -0
  105. package/dist/esm/wkt-loader.js +8 -3
  106. package/dist/esm/wkt-loader.js.map +1 -1
  107. package/dist/esm/wkt-writer.js +2 -2
  108. package/dist/esm/wkt-writer.js.map +1 -1
  109. package/dist/esm/workers/wkb-worker.js.map +1 -1
  110. package/dist/esm/workers/wkt-worker.js.map +1 -1
  111. package/dist/src/bundle.d.ts.map +1 -0
  112. package/dist/src/hex-wkb-loader.d.ts +17 -0
  113. package/dist/src/hex-wkb-loader.d.ts.map +1 -0
  114. package/dist/src/index.d.ts +15 -0
  115. package/dist/src/index.d.ts.map +1 -0
  116. package/dist/src/lib/encode-twkb.d.ts +6 -0
  117. package/dist/src/lib/encode-twkb.d.ts.map +1 -0
  118. package/dist/{lib → src/lib}/encode-wkb.d.ts +16 -3
  119. package/dist/src/lib/encode-wkb.d.ts.map +1 -0
  120. package/dist/src/lib/encode-wkt-crs.d.ts +10 -0
  121. package/dist/src/lib/encode-wkt-crs.d.ts.map +1 -0
  122. package/dist/{lib → src/lib}/encode-wkt.d.ts +1 -1
  123. package/dist/src/lib/encode-wkt.d.ts.map +1 -0
  124. package/dist/src/lib/parse-hex-wkb.d.ts +1 -0
  125. package/dist/src/lib/parse-hex-wkb.d.ts.map +1 -0
  126. package/dist/src/lib/parse-twkb.d.ts +9 -0
  127. package/dist/src/lib/parse-twkb.d.ts.map +1 -0
  128. package/dist/src/lib/parse-wkb-header.d.ts +39 -0
  129. package/dist/src/lib/parse-wkb-header.d.ts.map +1 -0
  130. package/dist/src/lib/parse-wkb.d.ts +5 -0
  131. package/dist/src/lib/parse-wkb.d.ts.map +1 -0
  132. package/dist/src/lib/parse-wkt-crs.d.ts +15 -0
  133. package/dist/src/lib/parse-wkt-crs.d.ts.map +1 -0
  134. package/dist/src/lib/parse-wkt.d.ts +30 -0
  135. package/dist/src/lib/parse-wkt.d.ts.map +1 -0
  136. package/dist/src/lib/utils/base64-encoder.d.ts +5 -0
  137. package/dist/src/lib/utils/base64-encoder.d.ts.map +1 -0
  138. package/dist/src/lib/utils/binary-reader.d.ts +18 -0
  139. package/dist/src/lib/utils/binary-reader.d.ts.map +1 -0
  140. package/dist/{lib → src/lib}/utils/binary-writer.d.ts +1 -1
  141. package/dist/src/lib/utils/binary-writer.d.ts.map +1 -0
  142. package/dist/src/lib/utils/hex-encoder.d.ts +15 -0
  143. package/dist/src/lib/utils/hex-encoder.d.ts.map +1 -0
  144. package/dist/src/lib/utils/hex-transcoder.d.ts +15 -0
  145. package/dist/src/lib/utils/hex-transcoder.d.ts.map +1 -0
  146. package/dist/src/lib/utils/version.d.ts.map +1 -0
  147. package/dist/src/twkb-loader.d.ts +16 -0
  148. package/dist/src/twkb-loader.d.ts.map +1 -0
  149. package/dist/src/twkb-writer.d.ts +7 -0
  150. package/dist/src/twkb-writer.d.ts.map +1 -0
  151. package/dist/src/wkb-loader.d.ts +16 -0
  152. package/dist/src/wkb-loader.d.ts.map +1 -0
  153. package/dist/src/wkb-writer.d.ts +7 -0
  154. package/dist/src/wkb-writer.d.ts.map +1 -0
  155. package/dist/src/wkt-crs-loader.d.ts +12 -0
  156. package/dist/src/wkt-crs-loader.d.ts.map +1 -0
  157. package/dist/src/wkt-crs-writer.d.ts +13 -0
  158. package/dist/src/wkt-crs-writer.d.ts.map +1 -0
  159. package/dist/src/wkt-loader.d.ts +18 -0
  160. package/dist/src/wkt-loader.d.ts.map +1 -0
  161. package/dist/src/wkt-writer.d.ts +10 -0
  162. package/dist/src/wkt-writer.d.ts.map +1 -0
  163. package/dist/{workers → src/workers}/wkb-worker.d.ts.map +1 -1
  164. package/dist/{workers → src/workers}/wkt-worker.d.ts.map +1 -1
  165. package/dist/tsconfig.tsbuildinfo +1 -0
  166. package/dist/wkt-worker.js +230 -186
  167. package/package.json +4 -4
  168. package/src/hex-wkb-loader.ts +61 -0
  169. package/src/index.ts +22 -1
  170. package/src/lib/encode-twkb.ts +304 -0
  171. package/src/lib/encode-wkb.ts +5 -5
  172. package/src/lib/encode-wkt-crs.ts +39 -0
  173. package/src/lib/encode-wkt.ts +3 -2
  174. package/src/lib/parse-hex-wkb.ts +0 -0
  175. package/src/lib/parse-twkb.ts +356 -0
  176. package/src/lib/parse-wkb-header.ts +172 -0
  177. package/src/lib/parse-wkb.ts +69 -58
  178. package/src/lib/parse-wkt-crs.ts +147 -0
  179. package/src/lib/parse-wkt.ts +275 -174
  180. package/src/lib/utils/base64-encoder.ts +153 -0
  181. package/src/lib/utils/binary-reader.ts +72 -0
  182. package/src/lib/utils/binary-writer.ts +1 -1
  183. package/src/lib/utils/hex-encoder.ts +58 -0
  184. package/src/lib/utils/hex-transcoder.ts +50 -0
  185. package/src/twkb-loader.ts +42 -0
  186. package/src/twkb-writer.ts +25 -0
  187. package/src/wkb-loader.ts +19 -8
  188. package/src/wkb-writer.ts +6 -4
  189. package/src/wkt-crs-loader.ts +33 -0
  190. package/src/wkt-crs-writer.ts +37 -0
  191. package/src/wkt-loader.ts +22 -6
  192. package/src/wkt-writer.ts +12 -5
  193. package/src/workers/wkb-worker.ts +2 -0
  194. package/src/workers/wkt-worker.ts +2 -0
  195. package/dist/bundle.d.ts.map +0 -1
  196. package/dist/bundle.js +0 -5
  197. package/dist/index.d.ts +0 -5
  198. package/dist/index.d.ts.map +0 -1
  199. package/dist/index.js +0 -13
  200. package/dist/lib/encode-wkb.d.ts.map +0 -1
  201. package/dist/lib/encode-wkb.js +0 -295
  202. package/dist/lib/encode-wkt.d.ts.map +0 -1
  203. package/dist/lib/encode-wkt.js +0 -46
  204. package/dist/lib/parse-wkb.d.ts +0 -3
  205. package/dist/lib/parse-wkb.d.ts.map +0 -1
  206. package/dist/lib/parse-wkb.js +0 -236
  207. package/dist/lib/parse-wkt.d.ts +0 -8
  208. package/dist/lib/parse-wkt.d.ts.map +0 -1
  209. package/dist/lib/parse-wkt.js +0 -227
  210. package/dist/lib/utils/binary-writer.d.ts.map +0 -1
  211. package/dist/lib/utils/binary-writer.js +0 -120
  212. package/dist/lib/utils/version.d.ts.map +0 -1
  213. package/dist/lib/utils/version.js +0 -7
  214. package/dist/wkb-loader.d.ts +0 -39
  215. package/dist/wkb-loader.d.ts.map +0 -1
  216. package/dist/wkb-loader.js +0 -34
  217. package/dist/wkb-writer.d.ts +0 -6
  218. package/dist/wkb-writer.d.ts.map +0 -1
  219. package/dist/wkb-writer.js +0 -26
  220. package/dist/wkt-loader.d.ts +0 -10
  221. package/dist/wkt-loader.d.ts.map +0 -1
  222. package/dist/wkt-loader.js +0 -33
  223. package/dist/wkt-writer.d.ts +0 -6
  224. package/dist/wkt-writer.d.ts.map +0 -1
  225. package/dist/wkt-writer.js +0 -23
  226. package/dist/workers/wkb-worker.js +0 -5
  227. package/dist/workers/wkt-worker.js +0 -5
  228. /package/dist/{bundle.d.ts → src/bundle.d.ts} +0 -0
  229. /package/dist/{lib → src/lib}/utils/version.d.ts +0 -0
  230. /package/dist/{workers → src/workers}/wkb-worker.d.ts +0 -0
  231. /package/dist/{workers → src/workers}/wkt-worker.d.ts +0 -0
@@ -0,0 +1,72 @@
1
+ /** A DataView that tracks byte offset when reading. */
2
+ export class BinaryReader {
3
+ arrayBuffer: ArrayBuffer;
4
+ dataView: DataView;
5
+ byteOffset: number;
6
+ littleEndian: boolean;
7
+
8
+ constructor(arrayBuffer: ArrayBuffer, isBigEndian: boolean = false) {
9
+ this.arrayBuffer = arrayBuffer;
10
+ this.dataView = new DataView(arrayBuffer);
11
+ this.byteOffset = 0;
12
+ this.littleEndian = !isBigEndian;
13
+ }
14
+
15
+ readUInt8() {
16
+ const value = this.dataView.getUint8(this.byteOffset);
17
+ this.byteOffset += 1;
18
+ return value;
19
+ }
20
+ readUInt16() {
21
+ const value = this.dataView.getUint16(this.byteOffset, this.littleEndian);
22
+ this.byteOffset += 2;
23
+ return value;
24
+ }
25
+ readUInt32() {
26
+ const value = this.dataView.getUint32(this.byteOffset, this.littleEndian);
27
+ this.byteOffset += 4;
28
+ return value;
29
+ }
30
+ readInt8() {
31
+ const value = this.dataView.getInt8(this.byteOffset);
32
+ this.byteOffset += 1;
33
+ return value;
34
+ }
35
+ readInt16() {
36
+ const value = this.dataView.getInt16(this.byteOffset, this.littleEndian);
37
+ this.byteOffset += 2;
38
+ return value;
39
+ }
40
+ readInt32() {
41
+ const value = this.dataView.getInt32(this.byteOffset, this.littleEndian);
42
+ this.byteOffset += 4;
43
+ return value;
44
+ }
45
+ readFloat() {
46
+ const value = this.dataView.getFloat32(this.byteOffset, this.littleEndian);
47
+ this.byteOffset += 4;
48
+ return value;
49
+ }
50
+ readDouble() {
51
+ const value = this.dataView.getFloat64(this.byteOffset, this.littleEndian);
52
+ this.byteOffset += 8;
53
+ return value;
54
+ }
55
+
56
+ readVarInt() {
57
+ let result = 0;
58
+ let bytesRead = 0;
59
+
60
+ let nextByte;
61
+ do {
62
+ // TODO - this needs to be accessed via data view?
63
+ nextByte = this.dataView.getUint8(this.byteOffset + bytesRead);
64
+ result += (nextByte & 0x7f) << (7 * bytesRead);
65
+ bytesRead++;
66
+ } while (nextByte >= 0x80);
67
+
68
+ this.byteOffset += bytesRead;
69
+
70
+ return result;
71
+ }
72
+ }
@@ -4,7 +4,7 @@
4
4
  const LE = true;
5
5
  const BE = false;
6
6
 
7
- export default class BinaryWriter {
7
+ export class BinaryWriter {
8
8
  arrayBuffer: ArrayBuffer;
9
9
  dataView: DataView;
10
10
  byteOffset: number = 0;
@@ -0,0 +1,58 @@
1
+ // loaders.gl, MIT license
2
+
3
+ /**
4
+ * Simple helper to decode and encode "hex encoded" binary buffers
5
+ * without first converting to string.
6
+ */
7
+ export class HexEncoder {
8
+ /** Get length in bytes required to store encoded data */
9
+ getEncodedLength(array: Uint8Array): number {
10
+ return array.byteLength * 2;
11
+ }
12
+
13
+ /** Get length in bytes required to store decoded data */
14
+ getDecodedLength(array: Uint8Array): number {
15
+ return Math.ceil(array.byteLength / 2);
16
+ }
17
+
18
+ /** Decode hexadecimal */
19
+ decode(array: Uint8Array, result: Uint8Array): Uint8Array {
20
+ for (let i = 0; i < array.byteLength / 2; ++i) {
21
+ const halfByte1 = hexDecode(array[i]);
22
+ const halfByte2 = hexDecode(array[i + 1]);
23
+ result[i] = halfByte1 * 16 + halfByte2;
24
+ }
25
+ // Check if final half byte (is that legal?)
26
+ // if (array.byteLength % 2) {
27
+ // const halfByte1 = hexDecode(array[i]);
28
+ // }
29
+ return result;
30
+ }
31
+
32
+ /** Encode hexadecimal */
33
+ encode(array: Uint8Array, result: Uint8Array): Uint8Array {
34
+ for (let i = 0; i < array.byteLength; ++i) {
35
+ const byte = array[i];
36
+ result[i * 2] = hexEncode(byte & 0x0f);
37
+ result[i * 2 + 1] = hexEncode(byte & 0xf0);
38
+ }
39
+ return result;
40
+ }
41
+ }
42
+
43
+ function hexEncode(value: number): number {
44
+ if (value < 10) {
45
+ return value + 48; // ASCII of 0
46
+ }
47
+ return value - 10 + 65; // ASCII of capital A
48
+ }
49
+
50
+ function hexDecode(value: number): number {
51
+ if (value >= 65) {
52
+ return value - 65 + 10; // ASCII of A
53
+ }
54
+ if (value >= 97) {
55
+ return value - 97 + 10; // ASCII of a
56
+ }
57
+ return value - 48; // ASCII of 0
58
+ }
@@ -0,0 +1,50 @@
1
+ // Forked from https://github.com/jessetane/hex-transcoder under MIT license
2
+
3
+ const alphabet = '0123456789abcdef';
4
+ const encodeLookup: string[] = [];
5
+ const decodeLookup: number[] = [];
6
+
7
+ for (let i = 0; i < 256; i++) {
8
+ encodeLookup[i] = alphabet[(i >> 4) & 0xf] + alphabet[i & 0xf];
9
+ if (i < 16) {
10
+ if (i < 10) {
11
+ decodeLookup[0x30 + i] = i;
12
+ } else {
13
+ decodeLookup[0x61 - 10 + i] = i;
14
+ }
15
+ }
16
+ }
17
+
18
+ /**
19
+ * Encode a Uint8Array to a hex string
20
+ *
21
+ * @param array Bytes to encode to string
22
+ * @return hex string
23
+ */
24
+ export function encodeHex(array: Uint8Array): string {
25
+ const length = array.length;
26
+ let string = '';
27
+ let i = 0;
28
+ while (i < length) {
29
+ string += encodeLookup[array[i++]];
30
+ }
31
+ return string;
32
+ }
33
+
34
+ /**
35
+ * Decodes a hex string to a Uint8Array
36
+ *
37
+ * @param string hex string to decode to Uint8Array
38
+ * @return Uint8Array
39
+ */
40
+ export function decodeHex(string: string): Uint8Array {
41
+ const sizeof = string.length >> 1;
42
+ const length = sizeof << 1;
43
+ const array = new Uint8Array(sizeof);
44
+ let n = 0;
45
+ let i = 0;
46
+ while (i < length) {
47
+ array[n++] = (decodeLookup[string.charCodeAt(i++)] << 4) | decodeLookup[string.charCodeAt(i++)];
48
+ }
49
+ return array;
50
+ }
@@ -0,0 +1,42 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
4
+ import {BinaryGeometry, Geometry} from '@loaders.gl/schema';
5
+ import {VERSION} from './lib/utils/version';
6
+ import {parseTWKBGeometry, isTWKB} from './lib/parse-twkb';
7
+
8
+ export type WKBLoaderOptions = LoaderOptions & {
9
+ wkb?: {
10
+ shape: 'binary-geometry' | 'geometry';
11
+ };
12
+ };
13
+
14
+ /**
15
+ * Worker loader for WKB (Well-Known Binary)
16
+ */
17
+ export const TWKBWorkerLoader: Loader<Geometry, never, WKBLoaderOptions> = {
18
+ name: 'TWKB (Tiny Well-Known Binary)',
19
+ id: 'twkb',
20
+ module: 'wkt',
21
+ version: VERSION,
22
+ worker: true,
23
+ category: 'geometry',
24
+ extensions: ['twkb'],
25
+ mimeTypes: [],
26
+ // TODO can we define static, serializable tests, eg. some binary strings?
27
+ tests: [isTWKB],
28
+ options: {
29
+ wkb: {
30
+ shape: 'binary-geometry'
31
+ }
32
+ }
33
+ };
34
+
35
+ /**
36
+ * Loader for WKB (Well-Known Binary)
37
+ */
38
+ export const TWKBLoader: LoaderWithParser<BinaryGeometry | Geometry, never, WKBLoaderOptions> = {
39
+ ...TWKBWorkerLoader,
40
+ parse: async (arrayBuffer: ArrayBuffer) => parseTWKBGeometry(arrayBuffer),
41
+ parseSync: parseTWKBGeometry
42
+ };
@@ -0,0 +1,25 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {Writer, WriterOptions} from '@loaders.gl/loader-utils';
4
+ import {VERSION} from './lib/utils/version';
5
+ import {encodeTWKB} from './lib/encode-twkb';
6
+ import {BinaryGeometry} from '@loaders.gl/schema';
7
+
8
+ /**
9
+ * WKB exporter
10
+ */
11
+ export const TWKBWriter: Writer<BinaryGeometry, never, WriterOptions> = {
12
+ name: 'TWKB (Tiny Well Known Binary)',
13
+ id: 'twkb',
14
+ module: 'wkt',
15
+ version: VERSION,
16
+ extensions: ['twkb'],
17
+ // @ts-expect-error not implemented yet
18
+ encodeSync: async (data: BinaryGeometry, options) => encodeTWKB,
19
+ options: {
20
+ twkb: {
21
+ // hasZ: false,
22
+ // hasM: false
23
+ }
24
+ }
25
+ };
package/src/wkb-loader.ts CHANGED
@@ -1,11 +1,21 @@
1
- import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';
1
+ // loaders.gl, MIT license
2
+
3
+ import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
4
+ import {BinaryGeometry, Geometry} from '@loaders.gl/schema';
2
5
  import {VERSION} from './lib/utils/version';
3
- import parseWKB from './lib/parse-wkb';
6
+ import {parseWKB} from './lib/parse-wkb';
7
+ import {isWKB} from './lib/parse-wkb-header';
8
+
9
+ export type WKBLoaderOptions = LoaderOptions & {
10
+ wkb?: {
11
+ shape: 'binary-geometry' | 'geometry';
12
+ };
13
+ };
4
14
 
5
15
  /**
6
16
  * Worker loader for WKB (Well-Known Binary)
7
17
  */
8
- export const WKBWorkerLoader = {
18
+ export const WKBWorkerLoader: Loader<BinaryGeometry | Geometry, never, WKBLoaderOptions> = {
9
19
  name: 'WKB',
10
20
  id: 'wkb',
11
21
  module: 'wkt',
@@ -14,19 +24,20 @@ export const WKBWorkerLoader = {
14
24
  category: 'geometry',
15
25
  extensions: ['wkb'],
16
26
  mimeTypes: [],
27
+ // TODO can we define static, serializable tests, eg. some binary strings?
28
+ tests: [isWKB],
17
29
  options: {
18
- wkb: {}
30
+ wkb: {
31
+ shape: 'binary-geometry'
32
+ }
19
33
  }
20
34
  };
21
35
 
22
36
  /**
23
37
  * Loader for WKB (Well-Known Binary)
24
38
  */
25
- export const WKBLoader = {
39
+ export const WKBLoader: LoaderWithParser<BinaryGeometry | Geometry, never, WKBLoaderOptions> = {
26
40
  ...WKBWorkerLoader,
27
41
  parse: async (arrayBuffer: ArrayBuffer) => parseWKB(arrayBuffer),
28
42
  parseSync: parseWKB
29
43
  };
30
-
31
- export const _typecheckWKBWorkerLoader: Loader = WKBWorkerLoader;
32
- export const _typecheckWKBLoader: LoaderWithParser = WKBLoader;
package/src/wkb-writer.ts CHANGED
@@ -1,17 +1,19 @@
1
- import type {Writer} from '@loaders.gl/loader-utils';
1
+ // loaders.gl, MIT license
2
+
3
+ import type {Writer, WriterOptions} from '@loaders.gl/loader-utils';
2
4
  import {VERSION} from './lib/utils/version';
3
- import encodeWKB from './lib/encode-wkb';
5
+ import {encodeWKB} from './lib/encode-wkb';
6
+ import type {Geometry, Feature} from '@loaders.gl/schema';
4
7
 
5
8
  /**
6
9
  * WKB exporter
7
10
  */
8
- export const WKBWriter: Writer = {
11
+ export const WKBWriter: Writer<Geometry | Feature, never, WriterOptions> = {
9
12
  name: 'WKB (Well Known Binary)',
10
13
  id: 'wkb',
11
14
  module: 'wkt',
12
15
  version: VERSION,
13
16
  extensions: ['wkb'],
14
- // @ts-ignore
15
17
  encodeSync: encodeWKB,
16
18
  options: {
17
19
  wkb: {
@@ -0,0 +1,33 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
4
+ import {VERSION} from './lib/utils/version';
5
+ import type {ParseWKTCRSOptions, WKTCRS} from './lib/parse-wkt-crs';
6
+ import {parseWKTCRS} from './lib/parse-wkt-crs';
7
+
8
+ export type WKTCRSLoaderOptions = LoaderOptions & {
9
+ 'wkt-crs'?: ParseWKTCRSOptions;
10
+ };
11
+
12
+ /**
13
+ * Well-Known text CRS loader
14
+ * @see OGC Standard: https://www.ogc.org/standards/wkt-crs
15
+ * @see Wikipedia Page: https://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems
16
+ */
17
+ export const WKTCRSLoader: LoaderWithParser<WKTCRS, never, WKTCRSLoaderOptions> = {
18
+ name: 'WKT CRS (Well-Known Text Coordinate Reference System)',
19
+ id: 'wkt-crs',
20
+ module: 'wkt-crs',
21
+ version: VERSION,
22
+ worker: true,
23
+ extensions: [],
24
+ mimeTypes: ['text/plain'],
25
+ category: 'json',
26
+ text: true,
27
+ options: {
28
+ 'wkt-crs': {}
29
+ },
30
+ parse: async (arrayBuffer, options) =>
31
+ parseWKTCRS(new TextDecoder().decode(arrayBuffer), options?.['wkt-crs']),
32
+ parseTextSync: (string, options) => parseWKTCRS(string, options?.['wkt-crs'])
33
+ };
@@ -0,0 +1,37 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {Writer, WriterOptions} from '@loaders.gl/loader-utils';
4
+ import {VERSION} from './lib/utils/version';
5
+
6
+ import type {WKTCRS} from './lib/parse-wkt-crs';
7
+ import type {EncodeWKTCRSOptions} from './lib/encode-wkt-crs';
8
+ import {encodeWKTCRS} from './lib/encode-wkt-crs';
9
+
10
+ export type WKTCRSWriterOptions = WriterOptions & {
11
+ 'wkt-crs'?: EncodeWKTCRSOptions;
12
+ };
13
+
14
+ /**
15
+ * Well-Known text CRS loader
16
+ * @see OGC Standard: https://www.ogc.org/standards/wkt-crs
17
+ * @see Wikipedia Page: https://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems
18
+ */
19
+ export const WKTCRSWriter: Writer<WKTCRS, never, WKTCRSWriterOptions> = {
20
+ name: 'WKT CRS (Well-Known Text Coordinate Reference System)',
21
+ id: 'wkt-crs',
22
+ module: 'wkt-crs',
23
+ version: VERSION,
24
+ worker: true,
25
+ extensions: [],
26
+ mimeTypes: ['text/plain'],
27
+ // category: 'json',
28
+ text: true,
29
+ options: {
30
+ 'wkt-crs': {}
31
+ },
32
+ encode: async (wktcrs, options) =>
33
+ new TextEncoder().encode(encodeWKTCRS(wktcrs, options?.['wkt-crs'])),
34
+ encodeSync: (wktcrs, options) =>
35
+ new TextEncoder().encode(encodeWKTCRS(wktcrs, options?.['wkt-crs'])),
36
+ encodeTextSync: (wktcrs, options) => encodeWKTCRS(wktcrs, options?.['wkt-crs'])
37
+ };
package/src/wkt-loader.ts CHANGED
@@ -1,11 +1,23 @@
1
- import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';
1
+ // loaders.gl, MIT license
2
+
3
+ import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
2
4
  import {VERSION} from './lib/utils/version';
3
- import parseWKT from './lib/parse-wkt';
5
+ import {parseWKT} from './lib/parse-wkt';
6
+ import {Geometry} from '@loaders.gl/schema';
7
+ import {isWKT, WKT_MAGIC_STRINGS} from './lib/parse-wkt';
8
+
9
+ export type WKTLoaderOptions = LoaderOptions & {
10
+ /** Options for the WKT parser */
11
+ wkt?: {
12
+ /** Whether to add any CRS, if found, as undocumented CRS property on the return geometry */
13
+ crs?: boolean;
14
+ };
15
+ };
4
16
 
5
17
  /**
6
18
  * Well-Known text loader
7
19
  */
8
- export const WKTWorkerLoader: Loader = {
20
+ export const WKTWorkerLoader: Loader<Geometry, never, WKTLoaderOptions> = {
9
21
  name: 'WKT (Well-Known Text)',
10
22
  id: 'wkt',
11
23
  module: 'wkt',
@@ -15,16 +27,20 @@ export const WKTWorkerLoader: Loader = {
15
27
  mimeTypes: ['text/plain'],
16
28
  category: 'geometry',
17
29
  text: true,
30
+ tests: WKT_MAGIC_STRINGS,
31
+ testText: isWKT,
18
32
  options: {
19
- wkt: {}
33
+ wkt: {
34
+ crs: true
35
+ }
20
36
  }
21
37
  };
22
38
 
23
39
  /**
24
40
  * Well-Known text loader
25
41
  */
26
- export const WKTLoader: LoaderWithParser = {
42
+ export const WKTLoader: LoaderWithParser<Geometry, never, WKTLoaderOptions> = {
27
43
  ...WKTWorkerLoader,
28
- parse: async (arrayBuffer) => parseWKT(new TextDecoder().decode(arrayBuffer)),
44
+ parse: async (arrayBuffer, options) => parseWKT(new TextDecoder().decode(arrayBuffer), options),
29
45
  parseTextSync: parseWKT
30
46
  };
package/src/wkt-writer.ts CHANGED
@@ -1,18 +1,25 @@
1
- import type {Writer} from '@loaders.gl/loader-utils';
1
+ // loaders.gl, MIT license
2
+
3
+ import type {Writer, WriterOptions} from '@loaders.gl/loader-utils';
2
4
  import {VERSION} from './lib/utils/version';
3
- import encodeWKT from './lib/encode-wkt';
5
+ import {encodeWKT} from './lib/encode-wkt';
6
+ import {Geometry} from '@loaders.gl/schema';
7
+
8
+ export type WKTWriterOptions = WriterOptions & {
9
+ wkt?: {};
10
+ };
4
11
 
5
12
  /**
6
13
  * WKT exporter
7
14
  */
8
- export const WKTWriter: Writer = {
15
+ export const WKTWriter: Writer<Geometry, never, WKTWriterOptions> = {
9
16
  name: 'WKT (Well Known Text)',
10
17
  id: 'wkt',
11
18
  module: 'wkt',
12
19
  version: VERSION,
13
20
  extensions: ['wkt'],
14
- // @ts-ignore
15
- encode: encodeWKT,
21
+ // @ts-expect-error
22
+ encodeSync: encodeWKT,
16
23
  options: {
17
24
  wkt: {}
18
25
  }
@@ -1,3 +1,5 @@
1
+ // loaders.gl, MIT license
2
+
1
3
  import {createLoaderWorker} from '@loaders.gl/loader-utils';
2
4
  import {WKBLoader} from '../wkb-loader';
3
5
 
@@ -1,3 +1,5 @@
1
+ // loaders.gl, MIT license
2
+
1
3
  import {createLoaderWorker} from '@loaders.gl/loader-utils';
2
4
  import {WKTLoader} from '../wkt-loader';
3
5
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,aAAa,KAAqB,CAAC"}
package/dist/bundle.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";
2
- // @ts-nocheck
3
- const moduleExports = require('./index');
4
- globalThis.loaders = globalThis.loaders || {};
5
- module.exports = Object.assign(globalThis.loaders, moduleExports);
package/dist/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export { WKBLoader, WKBWorkerLoader } from './wkb-loader';
2
- export { WKTLoader, WKTWorkerLoader } from './wkt-loader';
3
- export { WKTWriter } from './wkt-writer';
4
- export { WKBWriter } from './wkb-writer';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC;AACxD,OAAO,EAAC,SAAS,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC"}
package/dist/index.js DELETED
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WKBWriter = exports.WKTWriter = exports.WKTWorkerLoader = exports.WKTLoader = exports.WKBWorkerLoader = exports.WKBLoader = void 0;
4
- var wkb_loader_1 = require("./wkb-loader");
5
- Object.defineProperty(exports, "WKBLoader", { enumerable: true, get: function () { return wkb_loader_1.WKBLoader; } });
6
- Object.defineProperty(exports, "WKBWorkerLoader", { enumerable: true, get: function () { return wkb_loader_1.WKBWorkerLoader; } });
7
- var wkt_loader_1 = require("./wkt-loader");
8
- Object.defineProperty(exports, "WKTLoader", { enumerable: true, get: function () { return wkt_loader_1.WKTLoader; } });
9
- Object.defineProperty(exports, "WKTWorkerLoader", { enumerable: true, get: function () { return wkt_loader_1.WKTWorkerLoader; } });
10
- var wkt_writer_1 = require("./wkt-writer");
11
- Object.defineProperty(exports, "WKTWriter", { enumerable: true, get: function () { return wkt_writer_1.WKTWriter; } });
12
- var wkb_writer_1 = require("./wkb-writer");
13
- Object.defineProperty(exports, "WKBWriter", { enumerable: true, get: function () { return wkb_writer_1.WKBWriter; } });
@@ -1 +0,0 @@
1
- {"version":3,"file":"encode-wkb.d.ts","sourceRoot":"","sources":["../../src/lib/encode-wkb.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EAQT,MAAM,oBAAoB,CAAC;AAkB5B;;GAEG;AACH,UAAU,UAAU;IAClB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAC5B,OAAO,GAAE,UAAU,GAAG;IAAC,GAAG,EAAE,UAAU,CAAA;CAAM,GAC3C,WAAW,CA8Bb"}