@loaders.gl/las 4.3.4 → 4.4.0-alpha.10

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 (86) hide show
  1. package/dist/dist.dev.js +15429 -2519
  2. package/dist/dist.min.js +25 -16
  3. package/dist/index.cjs +1037 -63
  4. package/dist/index.cjs.map +4 -4
  5. package/dist/index.d.ts +7 -33
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +13 -12
  8. package/dist/index.js.map +1 -0
  9. package/dist/las-arrow-loader.d.ts +30 -0
  10. package/dist/las-arrow-loader.d.ts.map +1 -0
  11. package/dist/las-arrow-loader.js +21 -0
  12. package/dist/las-arrow-loader.js.map +1 -0
  13. package/dist/las-format.d.ts +14 -0
  14. package/dist/las-format.d.ts.map +1 -0
  15. package/dist/las-format.js +17 -0
  16. package/dist/las-format.js.map +1 -0
  17. package/dist/las-loader.d.ts +9 -10
  18. package/dist/las-loader.d.ts.map +1 -1
  19. package/dist/las-loader.js +8 -11
  20. package/dist/las-loader.js.map +1 -0
  21. package/dist/las-worker.js +65 -58
  22. package/dist/laz-rs-loader.d.ts +29 -0
  23. package/dist/laz-rs-loader.d.ts.map +1 -0
  24. package/dist/laz-rs-loader.js +17 -0
  25. package/dist/laz-rs-loader.js.map +1 -0
  26. package/dist/lazperf-loader.d.ts +31 -0
  27. package/dist/lazperf-loader.d.ts.map +1 -0
  28. package/dist/lazperf-loader.js +15 -0
  29. package/dist/lazperf-loader.js.map +1 -0
  30. package/dist/lib/get-las-schema.d.ts +1 -1
  31. package/dist/lib/get-las-schema.d.ts.map +1 -1
  32. package/dist/lib/get-las-schema.js +6 -2
  33. package/dist/lib/get-las-schema.js.map +1 -0
  34. package/dist/lib/las-types.d.ts +2 -1
  35. package/dist/lib/las-types.d.ts.map +1 -1
  36. package/dist/lib/las-types.js +4 -0
  37. package/dist/lib/las-types.js.map +1 -0
  38. package/dist/lib/{laslaz-decoder.d.ts → laz-perf/laslaz-decoder.d.ts} +1 -1
  39. package/dist/lib/laz-perf/laslaz-decoder.d.ts.map +1 -0
  40. package/dist/lib/{laslaz-decoder.js → laz-perf/laslaz-decoder.js} +7 -2
  41. package/dist/lib/laz-perf/laslaz-decoder.js.map +1 -0
  42. package/dist/lib/{parse-las.d.ts → laz-perf/parse-las.d.ts} +3 -3
  43. package/dist/lib/laz-perf/parse-las.d.ts.map +1 -0
  44. package/dist/lib/laz-perf/parse-las.js +189 -0
  45. package/dist/lib/laz-perf/parse-las.js.map +1 -0
  46. package/dist/lib/laz-rs-wasm/laslaz-decoder.d.ts +134 -0
  47. package/dist/lib/laz-rs-wasm/laslaz-decoder.d.ts.map +1 -0
  48. package/dist/lib/laz-rs-wasm/laslaz-decoder.js +446 -0
  49. package/dist/lib/laz-rs-wasm/laslaz-decoder.js.map +1 -0
  50. package/dist/lib/laz-rs-wasm/parse-las.d.ts +18 -0
  51. package/dist/lib/laz-rs-wasm/parse-las.d.ts.map +1 -0
  52. package/dist/lib/{parse-las.js → laz-rs-wasm/parse-las.js} +10 -8
  53. package/dist/lib/laz-rs-wasm/parse-las.js.map +1 -0
  54. package/dist/libs/laz-perf/laz-perf.d.ts.map +1 -0
  55. package/dist/{lib/libs → libs/laz-perf}/laz-perf.js +1 -0
  56. package/dist/libs/laz-perf/laz-perf.js.map +1 -0
  57. package/dist/libs/laz-rs-wasm/laz_rs_wasm.d.ts +95 -0
  58. package/dist/libs/laz-rs-wasm/laz_rs_wasm.d.ts.map +1 -0
  59. package/dist/libs/laz-rs-wasm/laz_rs_wasm.js +425 -0
  60. package/dist/libs/laz-rs-wasm/laz_rs_wasm.js.map +1 -0
  61. package/dist/workers/las-worker.js +4 -0
  62. package/dist/workers/las-worker.js.map +1 -0
  63. package/package.json +9 -5
  64. package/src/index.ts +14 -18
  65. package/src/las-arrow-loader.ts +26 -0
  66. package/src/las-format.ts +19 -0
  67. package/src/las-loader.ts +8 -10
  68. package/src/laz-rs-loader.ts +22 -0
  69. package/src/lazperf-loader.ts +22 -0
  70. package/src/lib/get-las-schema.ts +7 -2
  71. package/src/lib/las-types.ts +6 -1
  72. package/src/lib/{laslaz-decoder.ts → laz-perf/laslaz-decoder.ts} +8 -3
  73. package/src/lib/laz-perf/parse-las.ts +233 -0
  74. package/src/lib/laz-rs-wasm/laslaz-decoder.ts +528 -0
  75. package/src/lib/{parse-las.ts → laz-rs-wasm/parse-las.ts} +12 -12
  76. package/src/libs/laz-rs-wasm/laz_rs_wasm.d.ts +80 -0
  77. package/src/libs/laz-rs-wasm/laz_rs_wasm.js +477 -0
  78. package/src/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
  79. package/src/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +31 -0
  80. package/src/libs/laz-rs-wasm/package.json +19 -0
  81. package/src/workers/las-worker.ts +4 -0
  82. package/dist/lib/laslaz-decoder.d.ts.map +0 -1
  83. package/dist/lib/libs/laz-perf.d.ts.map +0 -1
  84. package/dist/lib/parse-las.d.ts.map +0 -1
  85. /package/dist/{lib/libs → libs/laz-perf}/laz-perf.d.ts +0 -0
  86. /package/src/{lib/libs → libs/laz-perf}/laz-perf.ts +0 -0
package/dist/index.d.ts CHANGED
@@ -1,34 +1,8 @@
1
- import type { LASLoaderOptions } from "./las-loader.js";
2
- import type { LASMesh } from "./lib/las-types.js";
3
- import { LASLoader as LASWorkerLoader } from "./las-loader.js";
4
- export type { LASLoaderOptions };
5
- export { LASWorkerLoader };
6
- /**
7
- * Loader for the LAS (LASer) point cloud format
8
- * @note Does not support LAS v1.4
9
- */
10
- export declare const LASLoader: {
11
- readonly parse: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) => Promise<LASMesh>;
12
- readonly parseSync: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) => LASMesh;
13
- readonly dataType: LASMesh;
14
- readonly batchType: never;
15
- readonly name: "LAS";
16
- readonly id: "las";
17
- readonly module: "las";
18
- readonly version: any;
19
- readonly worker: true;
20
- readonly extensions: ["las", "laz"];
21
- readonly mimeTypes: ["application/octet-stream"];
22
- readonly text: true;
23
- readonly binary: true;
24
- readonly tests: ["LAS"];
25
- readonly options: {
26
- readonly las: {
27
- readonly shape: "mesh";
28
- readonly fp64: false;
29
- readonly skip: 1;
30
- readonly colorDepth: 8;
31
- };
32
- };
33
- };
1
+ export { LASFormat } from "./las-format.js";
2
+ export type { LASLoaderOptions } from "./las-loader.js";
3
+ export { LASWorkerLoader } from "./las-loader.js";
4
+ export { LAZPerfLoader as LASLoader } from "./lazperf-loader.js";
5
+ export { LASArrowLoader } from "./las-arrow-loader.js";
6
+ export { LAZPerfLoader } from "./lazperf-loader.js";
7
+ export { LAZRsLoader } from "./laz-rs-loader.js";
34
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,gBAAgB,EAAC,wBAAqB;AACnD,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAC7C,OAAO,EAAC,SAAS,IAAI,eAAe,EAAC,wBAAqB;AAK1D,YAAY,EAAC,gBAAgB,EAAC,CAAC;AAC/B,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB;;;GAGG;AACH,eAAO,MAAM,SAAS;kCAEO,WAAW,YAAY,gBAAgB;sCAEzC,WAAW,YAAY,gBAAgB;;;;;;;;;;;;;;;;;;;;;CAEK,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,SAAS,EAAC,wBAAqB;AAEvC,YAAY,EAAC,gBAAgB,EAAC,wBAAqB;AACnD,OAAO,EAAC,eAAe,EAAC,wBAAqB;AAG7C,OAAO,EAAC,aAAa,IAAI,SAAS,EAAC,4BAAyB;AAC5D,OAAO,EAAC,cAAc,EAAC,8BAA2B;AAGlD,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAC/C,OAAO,EAAC,WAAW,EAAC,2BAAwB"}
package/dist/index.js CHANGED
@@ -1,12 +1,13 @@
1
- import { LASLoader as LASWorkerLoader } from "./las-loader.js";
2
- import { parseLAS } from "./lib/parse-las.js";
3
- export { LASWorkerLoader };
4
- /**
5
- * Loader for the LAS (LASer) point cloud format
6
- * @note Does not support LAS v1.4
7
- */
8
- export const LASLoader = {
9
- ...LASWorkerLoader,
10
- parse: async (arrayBuffer, options) => parseLAS(arrayBuffer, options),
11
- parseSync: (arrayBuffer, options) => parseLAS(arrayBuffer, options)
12
- };
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ // LASLoader
5
+ export { LASFormat } from "./las-format.js";
6
+ export { LASWorkerLoader } from "./las-loader.js";
7
+ // Export the laz-perf based loader as default LASLoader until we have done more testing
8
+ export { LAZPerfLoader as LASLoader } from "./lazperf-loader.js";
9
+ export { LASArrowLoader } from "./las-arrow-loader.js";
10
+ // Implementation specific loaders, for bench marking and testing
11
+ export { LAZPerfLoader } from "./lazperf-loader.js";
12
+ export { LAZRsLoader } from "./laz-rs-loader.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAEpC,YAAY;AAEZ,OAAO,EAAC,SAAS,EAAC,wBAAqB;AAGvC,OAAO,EAAC,eAAe,EAAC,wBAAqB;AAE7C,wFAAwF;AACxF,OAAO,EAAC,aAAa,IAAI,SAAS,EAAC,4BAAyB;AAC5D,OAAO,EAAC,cAAc,EAAC,8BAA2B;AAElD,iEAAiE;AACjE,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAC/C,OAAO,EAAC,WAAW,EAAC,2BAAwB"}
@@ -0,0 +1,30 @@
1
+ import type { ArrowTable } from '@loaders.gl/schema';
2
+ import type { LASLoaderOptions } from "./las-loader.js";
3
+ /**
4
+ * Worker loader for LAS - Point Cloud Data
5
+ */
6
+ export declare const LASArrowLoader: {
7
+ readonly dataType: ArrowTable;
8
+ readonly batchType: never;
9
+ readonly worker: false;
10
+ readonly parse: (arrayBuffer: ArrayBuffer) => Promise<ArrowTable>;
11
+ readonly parseSync: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) => import("./lib/las-types").LASMesh;
12
+ readonly version: any;
13
+ readonly options: {
14
+ readonly las: {
15
+ readonly shape: "mesh";
16
+ readonly fp64: false;
17
+ readonly skip: 1;
18
+ readonly colorDepth: 8;
19
+ };
20
+ };
21
+ readonly name: "LAS";
22
+ readonly id: "las";
23
+ readonly module: "las";
24
+ readonly extensions: ["las", "laz"];
25
+ readonly mimeTypes: ["application/octet-stream"];
26
+ readonly text: false;
27
+ readonly binary: true;
28
+ readonly tests: ["LASF"];
29
+ };
30
+ //# sourceMappingURL=las-arrow-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"las-arrow-loader.d.ts","sourceRoot":"","sources":["../src/las-arrow-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAC,gBAAgB,EAAC,wBAAqB;AAGnD;;GAEG;AACH,eAAO,MAAM,cAAc;uBAEI,UAAU;wBACpB,KAAK;;kCAEG,WAAW;;;;;;;;;;;;;;;;;;;CAMkC,CAAC"}
@@ -0,0 +1,21 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { convertMeshToTable } from '@loaders.gl/schema-utils';
5
+ import { LAZPerfLoader } from "./lazperf-loader.js";
6
+ /**
7
+ * Worker loader for LAS - Point Cloud Data
8
+ */
9
+ export const LASArrowLoader = {
10
+ ...LAZPerfLoader,
11
+ dataType: null,
12
+ batchType: null,
13
+ worker: false,
14
+ parse: async (arrayBuffer) => {
15
+ const mesh = await LAZPerfLoader.parse(arrayBuffer);
16
+ const arrowTable = convertMeshToTable(mesh, 'arrow-table');
17
+ return arrowTable;
18
+ }
19
+ // @ts-expect-error parseSync
20
+ };
21
+ //# sourceMappingURL=las-arrow-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"las-arrow-loader.js","sourceRoot":"","sources":["../src/las-arrow-loader.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,aAAa;IAChB,QAAQ,EAAE,IAA6B;IACvC,SAAS,EAAE,IAAa;IACxB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK,EAAE,WAAwB,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC3D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,6BAA6B;CAC2C,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * LAS (LASer) point cloud format
3
+ */
4
+ export declare const LASFormat: {
5
+ readonly name: "LAS";
6
+ readonly id: "las";
7
+ readonly module: "las";
8
+ readonly extensions: ["las", "laz"];
9
+ readonly mimeTypes: ["application/octet-stream"];
10
+ readonly text: false;
11
+ readonly binary: true;
12
+ readonly tests: ["LASF"];
13
+ };
14
+ //# sourceMappingURL=las-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"las-format.d.ts","sourceRoot":"","sources":["../src/las-format.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;CASK,CAAC"}
@@ -0,0 +1,17 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /**
5
+ * LAS (LASer) point cloud format
6
+ */
7
+ export const LASFormat = {
8
+ name: 'LAS',
9
+ id: 'las',
10
+ module: 'las',
11
+ extensions: ['las', 'laz'], // LAZ is the "compressed" flavor of LAS,
12
+ mimeTypes: ['application/octet-stream'], // TODO - text version?
13
+ text: false,
14
+ binary: true,
15
+ tests: ['LASF']
16
+ };
17
+ //# sourceMappingURL=las-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"las-format.js","sourceRoot":"","sources":["../src/las-format.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAIpC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,KAAK;IACX,EAAE,EAAE,KAAK;IACT,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,yCAAyC;IACrE,SAAS,EAAE,CAAC,0BAA0B,CAAC,EAAE,uBAAuB;IAChE,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,CAAC,MAAM,CAAC;CACU,CAAC"}
@@ -13,21 +13,12 @@ export type LASLoaderOptions = LoaderOptions & {
13
13
  };
14
14
  /**
15
15
  * Loader for the LAS (LASer) point cloud format
16
- * @note Does not support LAS v1.4
17
16
  */
18
- export declare const LASLoader: {
17
+ export declare const LASWorkerLoader: {
19
18
  readonly dataType: LASMesh;
20
19
  readonly batchType: never;
21
- readonly name: "LAS";
22
- readonly id: "las";
23
- readonly module: "las";
24
20
  readonly version: any;
25
21
  readonly worker: true;
26
- readonly extensions: ["las", "laz"];
27
- readonly mimeTypes: ["application/octet-stream"];
28
- readonly text: true;
29
- readonly binary: true;
30
- readonly tests: ["LAS"];
31
22
  readonly options: {
32
23
  readonly las: {
33
24
  readonly shape: "mesh";
@@ -36,5 +27,13 @@ export declare const LASLoader: {
36
27
  readonly colorDepth: 8;
37
28
  };
38
29
  };
30
+ readonly name: "LAS";
31
+ readonly id: "las";
32
+ readonly module: "las";
33
+ readonly extensions: ["las", "laz"];
34
+ readonly mimeTypes: ["application/octet-stream"];
35
+ readonly text: false;
36
+ readonly binary: true;
37
+ readonly tests: ["LASF"];
39
38
  };
40
39
  //# sourceMappingURL=las-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"las-loader.d.ts","sourceRoot":"","sources":["../src/las-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAS,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAM7C,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,aAAa,CAAC;QAClD,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC7B,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS;uBACS,OAAO;wBACjB,KAAK;;;;;;;;;;;;;;;;;;;CAoBmC,CAAC"}
1
+ {"version":3,"file":"las-loader.d.ts","sourceRoot":"","sources":["../src/las-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAS,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAO7C,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,aAAa,CAAC;QAClD,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC7B,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;uBAGG,OAAO;wBACjB,KAAK;;;;;;;;;;;;;;;;;;;CAYmC,CAAC"}
@@ -1,23 +1,19 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { LASFormat } from "./las-format.js";
1
5
  // __VERSION__ is injected by babel-plugin-version-inline
2
6
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
3
- const VERSION = typeof "4.3.3" !== 'undefined' ? "4.3.3" : 'latest';
7
+ const VERSION = typeof "4.4.0-alpha.10" !== 'undefined' ? "4.4.0-alpha.10" : 'latest';
4
8
  /**
5
9
  * Loader for the LAS (LASer) point cloud format
6
- * @note Does not support LAS v1.4
7
10
  */
8
- export const LASLoader = {
11
+ export const LASWorkerLoader = {
12
+ ...LASFormat,
9
13
  dataType: null,
10
14
  batchType: null,
11
- name: 'LAS',
12
- id: 'las',
13
- module: 'las',
14
15
  version: VERSION,
15
16
  worker: true,
16
- extensions: ['las', 'laz'], // LAZ is the "compressed" flavor of LAS,
17
- mimeTypes: ['application/octet-stream'], // TODO - text version?
18
- text: true,
19
- binary: true,
20
- tests: ['LAS'],
21
17
  options: {
22
18
  las: {
23
19
  shape: 'mesh',
@@ -27,3 +23,4 @@ export const LASLoader = {
27
23
  }
28
24
  }
29
25
  };
26
+ //# sourceMappingURL=las-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"las-loader.js","sourceRoot":"","sources":["../src/las-loader.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,SAAS,EAAC,wBAAqB;AAEvC,yDAAyD;AACzD,qDAAqD;AACrD,MAAM,OAAO,GAAG,uBAAkB,KAAK,WAAW,CAAC,CAAC,kBAAa,CAAC,CAAC,QAAQ,CAAC;AAc5E;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,SAAS;IAEZ,QAAQ,EAAE,IAA0B;IACpC,SAAS,EAAE,IAAa;IAExB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE;QACP,GAAG,EAAE;YACH,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,CAAC;SACd;KACF;CAC0D,CAAC"}
@@ -211,28 +211,36 @@
211
211
  options = {
212
212
  ...options,
213
213
  modules: loader && loader.options && loader.options.modules || {},
214
- worker: false
214
+ core: {
215
+ ...options.core,
216
+ worker: false
217
+ }
215
218
  };
216
219
  return await parser(data, { ...options }, context, loader);
217
220
  }
218
221
 
219
- // src/las-loader.ts
220
- var VERSION = true ? "4.3.3" : "latest";
221
- var LASLoader = {
222
- dataType: null,
223
- batchType: null,
222
+ // src/las-format.ts
223
+ var LASFormat = {
224
224
  name: "LAS",
225
225
  id: "las",
226
226
  module: "las",
227
- version: VERSION,
228
- worker: true,
229
227
  extensions: ["las", "laz"],
230
228
  // LAZ is the "compressed" flavor of LAS,
231
229
  mimeTypes: ["application/octet-stream"],
232
230
  // TODO - text version?
233
- text: true,
231
+ text: false,
234
232
  binary: true,
235
- tests: ["LAS"],
233
+ tests: ["LASF"]
234
+ };
235
+
236
+ // src/las-loader.ts
237
+ var VERSION = true ? "4.4.0-alpha.10" : "latest";
238
+ var LASWorkerLoader = {
239
+ ...LASFormat,
240
+ dataType: null,
241
+ batchType: null,
242
+ version: VERSION,
243
+ worker: true,
236
244
  options: {
237
245
  las: {
238
246
  shape: "mesh",
@@ -243,7 +251,7 @@
243
251
  }
244
252
  };
245
253
 
246
- // ../schema/src/lib/table/simple-table/data-type.ts
254
+ // ../schema-utils/src/lib/schema/data-type.ts
247
255
  function getDataTypeFromTypedArray(array) {
248
256
  switch (array.constructor) {
249
257
  case Int8Array:
@@ -268,7 +276,7 @@
268
276
  }
269
277
  }
270
278
 
271
- // ../schema/src/lib/mesh/mesh-utils.ts
279
+ // ../schema-utils/src/lib/mesh/mesh-utils.ts
272
280
  function getMeshBoundingBox(attributes) {
273
281
  let minX = Infinity;
274
282
  let minY = Infinity;
@@ -295,7 +303,7 @@
295
303
  ];
296
304
  }
297
305
 
298
- // ../schema/src/lib/mesh/deduce-mesh-schema.ts
306
+ // ../schema-utils/src/lib/mesh/deduce-mesh-schema.ts
299
307
  function deduceMeshSchema(attributes, metadata = {}) {
300
308
  const fields = deduceMeshFields(attributes);
301
309
  return { fields, metadata };
@@ -332,7 +340,38 @@
332
340
  return result;
333
341
  }
334
342
 
335
- // src/lib/libs/laz-perf.ts
343
+ // src/lib/get-las-schema.ts
344
+ function getLASSchema(lasHeader, attributes) {
345
+ const metadataMap = makeMetadataFromLasHeader(lasHeader);
346
+ const schema = deduceMeshSchema(attributes, metadataMap);
347
+ return schema;
348
+ }
349
+ function makeMetadataFromLasHeader(lasHeader) {
350
+ const metadata = {};
351
+ metadata.las_pointsOffset = lasHeader.pointsOffset.toString(10);
352
+ metadata.las_pointsFormatId = lasHeader.pointsFormatId.toString(10);
353
+ metadata.las_pointsStructSize = lasHeader.pointsStructSize.toString(10);
354
+ metadata.las_pointsCount = lasHeader.pointsCount.toString(10);
355
+ metadata.las_scale = JSON.stringify(lasHeader.scale);
356
+ metadata.las_offset = JSON.stringify(lasHeader.offset);
357
+ if (lasHeader.maxs !== void 0) {
358
+ metadata.las_maxs = JSON.stringify(lasHeader.maxs);
359
+ }
360
+ if (lasHeader.mins !== void 0) {
361
+ metadata.las_mins = JSON.stringify(lasHeader.mins);
362
+ }
363
+ metadata.las_totalToRead = lasHeader.totalToRead.toString(10);
364
+ metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);
365
+ if (lasHeader.versionAsString !== void 0) {
366
+ metadata.las_versionAsString = lasHeader.versionAsString;
367
+ }
368
+ if (lasHeader.isCompressed !== void 0) {
369
+ metadata.las_isCompressed = lasHeader.isCompressed.toString();
370
+ }
371
+ return metadata;
372
+ }
373
+
374
+ // src/libs/laz-perf/laz-perf.ts
336
375
  function getModule() {
337
376
  var Module2 = typeof Module2 !== "undefined" ? Module2 : {};
338
377
  var moduleOverrides = {};
@@ -18950,7 +18989,7 @@
18950
18989
  return Module2;
18951
18990
  }
18952
18991
 
18953
- // src/lib/laslaz-decoder.ts
18992
+ // src/lib/laz-perf/laslaz-decoder.ts
18954
18993
  var Module = null;
18955
18994
  var POINT_FORMAT_READERS = {
18956
18995
  0: (dv) => {
@@ -19015,7 +19054,7 @@
19015
19054
  o.mins = [bounds[1], bounds[3], bounds[5]];
19016
19055
  return o;
19017
19056
  }
19018
- var LASLoader2 = class {
19057
+ var LASLoader = class {
19019
19058
  arraybuffer;
19020
19059
  readOffset = 0;
19021
19060
  header = {
@@ -19030,7 +19069,8 @@
19030
19069
  totalToRead: 0,
19031
19070
  totalRead: 0,
19032
19071
  versionAsString: "",
19033
- isCompressed: true
19072
+ isCompressed: true,
19073
+ hasColor: false
19034
19074
  };
19035
19075
  constructor(arraybuffer) {
19036
19076
  this.arraybuffer = arraybuffer;
@@ -19254,7 +19294,7 @@
19254
19294
  if (POINT_FORMAT_READERS[this.formatId] === void 0) {
19255
19295
  throw new Error("The point format ID is not supported");
19256
19296
  }
19257
- this.loader = this.isCompressed ? new LAZLoader(this.arraybuffer) : new LASLoader2(this.arraybuffer);
19297
+ this.loader = this.isCompressed ? new LAZLoader(this.arraybuffer) : new LASLoader(this.arraybuffer);
19258
19298
  }
19259
19299
  /**
19260
19300
  * Determines format in parameters of LASHeaer
@@ -19319,38 +19359,7 @@
19319
19359
  }
19320
19360
  };
19321
19361
 
19322
- // src/lib/get-las-schema.ts
19323
- function getLASSchema(lasHeader, attributes) {
19324
- const metadataMap = makeMetadataFromLasHeader(lasHeader);
19325
- const schema = deduceMeshSchema(attributes, metadataMap);
19326
- return schema;
19327
- }
19328
- function makeMetadataFromLasHeader(lasHeader) {
19329
- const metadata = {};
19330
- metadata.las_pointsOffset = lasHeader.pointsOffset.toString(10);
19331
- metadata.las_pointsFormatId = lasHeader.pointsFormatId.toString(10);
19332
- metadata.las_pointsStructSize = lasHeader.pointsStructSize.toString(10);
19333
- metadata.las_pointsCount = lasHeader.pointsCount.toString(10);
19334
- metadata.las_scale = JSON.stringify(lasHeader.scale);
19335
- metadata.las_offset = JSON.stringify(lasHeader.offset);
19336
- if (lasHeader.maxs !== void 0) {
19337
- metadata.las_maxs = JSON.stringify(lasHeader.maxs);
19338
- }
19339
- if (lasHeader.mins !== void 0) {
19340
- metadata.las_mins = JSON.stringify(lasHeader.mins);
19341
- }
19342
- metadata.las_totalToRead = lasHeader.totalToRead.toString(10);
19343
- metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);
19344
- if (lasHeader.versionAsString !== void 0) {
19345
- metadata.las_versionAsString = lasHeader.versionAsString;
19346
- }
19347
- if (lasHeader.isCompressed !== void 0) {
19348
- metadata.las_isCompressed = lasHeader.isCompressed.toString();
19349
- }
19350
- return metadata;
19351
- }
19352
-
19353
- // src/lib/parse-las.ts
19362
+ // src/lib/laz-perf/parse-las.ts
19354
19363
  function parseLAS(arrayBuffer, options) {
19355
19364
  return parseLASMesh(arrayBuffer, options);
19356
19365
  }
@@ -19384,7 +19393,7 @@
19384
19393
  const total = lasHeader.totalToRead;
19385
19394
  const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;
19386
19395
  positions = new PositionsType(total * 3);
19387
- colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;
19396
+ colors = lasHeader.hasColor ? new Uint8Array(total * 4) : null;
19388
19397
  intensities = new Uint16Array(total);
19389
19398
  classifications = new Uint8Array(total);
19390
19399
  lasMesh.loaderData = lasHeader;
@@ -19453,11 +19462,9 @@
19453
19462
  header.totalToRead = totalToRead;
19454
19463
  let totalRead = 0;
19455
19464
  while (true) {
19456
- const chunk = dataHandler.readData(1e3 * 100, 0, skip);
19465
+ const chunk = dataHandler.readData(1e3 * 100, skip);
19457
19466
  totalRead += chunk.count;
19458
19467
  header.totalRead = totalRead;
19459
- header.versionAsString = chunk.versionAsString;
19460
- header.isCompressed = chunk.isCompressed;
19461
19468
  const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
19462
19469
  onParseData(unpacker, header);
19463
19470
  if (!chunk.hasMoreData || totalRead >= totalToRead) {
@@ -19496,13 +19503,13 @@
19496
19503
  return twoByteColor;
19497
19504
  }
19498
19505
 
19499
- // src/index.ts
19500
- var LASLoader3 = {
19501
- ...LASLoader,
19506
+ // src/lazperf-loader.ts
19507
+ var LAZPerfLoader = {
19508
+ ...LASWorkerLoader,
19502
19509
  parse: async (arrayBuffer, options) => parseLAS(arrayBuffer, options),
19503
19510
  parseSync: (arrayBuffer, options) => parseLAS(arrayBuffer, options)
19504
19511
  };
19505
19512
 
19506
19513
  // src/workers/las-worker.ts
19507
- createLoaderWorker(LASLoader3);
19514
+ createLoaderWorker(LAZPerfLoader);
19508
19515
  })();
@@ -0,0 +1,29 @@
1
+ import type { LASLoaderOptions } from "./las-loader.js";
2
+ import type { LASMesh } from "./lib/las-types.js";
3
+ /**
4
+ * Loader for the LAS (LASer) point cloud format
5
+ */
6
+ export declare const LAZRsLoader: {
7
+ readonly parse: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) => Promise<LASMesh>;
8
+ readonly dataType: LASMesh;
9
+ readonly batchType: never;
10
+ readonly version: any;
11
+ readonly worker: true;
12
+ readonly options: {
13
+ readonly las: {
14
+ readonly shape: "mesh";
15
+ readonly fp64: false;
16
+ readonly skip: 1;
17
+ readonly colorDepth: 8;
18
+ };
19
+ };
20
+ readonly name: "LAS";
21
+ readonly id: "las";
22
+ readonly module: "las";
23
+ readonly extensions: ["las", "laz"];
24
+ readonly mimeTypes: ["application/octet-stream"];
25
+ readonly text: false;
26
+ readonly binary: true;
27
+ readonly tests: ["LASF"];
28
+ };
29
+ //# sourceMappingURL=laz-rs-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"laz-rs-loader.d.ts","sourceRoot":"","sources":["../src/laz-rs-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,gBAAgB,EAAC,wBAAqB;AAEnD,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAI7C;;GAEG;AACH,eAAO,MAAM,WAAW;kCAEK,WAAW,YAAY,gBAAgB;;;;;;;;;;;;;;;;;;;;;CAIG,CAAC"}
@@ -0,0 +1,17 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { LASWorkerLoader } from "./las-loader.js";
5
+ import { parseLAS } from "./lib/laz-rs-wasm/parse-las.js";
6
+ import initLazRsWasm from "./libs/laz-rs-wasm/laz_rs_wasm.js";
7
+ /**
8
+ * Loader for the LAS (LASer) point cloud format
9
+ */
10
+ export const LAZRsLoader = {
11
+ ...LASWorkerLoader,
12
+ parse: async (arrayBuffer, options) => {
13
+ await initLazRsWasm();
14
+ return parseLAS(arrayBuffer, { ...options });
15
+ }
16
+ };
17
+ //# sourceMappingURL=laz-rs-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"laz-rs-loader.js","sourceRoot":"","sources":["../src/laz-rs-loader.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,eAAe,EAAC,wBAAqB;AAE7C,OAAO,EAAC,QAAQ,EAAC,uCAAoC;AACrD,OAAO,aAAa,0CAAuC;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,eAAe;IAClB,KAAK,EAAE,KAAK,EAAE,WAAwB,EAAE,OAA0B,EAAE,EAAE;QACpE,MAAM,aAAa,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC,WAAW,EAAE,EAAC,GAAG,OAAO,EAAC,CAAC,CAAC;IAC7C,CAAC;CACoE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { LASLoaderOptions } from "./las-loader.js";
2
+ import type { LASMesh } from "./lib/las-types.js";
3
+ /**
4
+ * Loader for the LAS (LASer) point cloud format
5
+ * @note Does not support LAS v1.4
6
+ */
7
+ export declare const LAZPerfLoader: {
8
+ readonly parse: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) => Promise<LASMesh>;
9
+ readonly parseSync: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) => LASMesh;
10
+ readonly dataType: LASMesh;
11
+ readonly batchType: never;
12
+ readonly version: any;
13
+ readonly worker: true;
14
+ readonly options: {
15
+ readonly las: {
16
+ readonly shape: "mesh";
17
+ readonly fp64: false;
18
+ readonly skip: 1;
19
+ readonly colorDepth: 8;
20
+ };
21
+ };
22
+ readonly name: "LAS";
23
+ readonly id: "las";
24
+ readonly module: "las";
25
+ readonly extensions: ["las", "laz"];
26
+ readonly mimeTypes: ["application/octet-stream"];
27
+ readonly text: false;
28
+ readonly binary: true;
29
+ readonly tests: ["LASF"];
30
+ };
31
+ //# sourceMappingURL=lazperf-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazperf-loader.d.ts","sourceRoot":"","sources":["../src/lazperf-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,gBAAgB,EAAC,wBAAqB;AAEnD,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAG7C;;;GAGG;AACH,eAAO,MAAM,aAAa;kCAEG,WAAW,YAAY,gBAAgB;sCAEzC,WAAW,YAAY,gBAAgB;;;;;;;;;;;;;;;;;;;;;CAEK,CAAC"}
@@ -0,0 +1,15 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { LASWorkerLoader } from "./las-loader.js";
5
+ import { parseLAS } from "./lib/laz-perf/parse-las.js";
6
+ /**
7
+ * Loader for the LAS (LASer) point cloud format
8
+ * @note Does not support LAS v1.4
9
+ */
10
+ export const LAZPerfLoader = {
11
+ ...LASWorkerLoader,
12
+ parse: async (arrayBuffer, options) => parseLAS(arrayBuffer, options),
13
+ parseSync: (arrayBuffer, options) => parseLAS(arrayBuffer, options)
14
+ };
15
+ //# sourceMappingURL=lazperf-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazperf-loader.js","sourceRoot":"","sources":["../src/lazperf-loader.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,eAAe,EAAC,wBAAqB;AAE7C,OAAO,EAAC,QAAQ,EAAC,oCAAiC;AAElD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG,eAAe;IAClB,KAAK,EAAE,KAAK,EAAE,WAAwB,EAAE,OAA0B,EAAE,EAAE,CACpE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAChC,SAAS,EAAE,CAAC,WAAwB,EAAE,OAA0B,EAAE,EAAE,CAClE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CACqC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { Schema, MeshAttributes } from '@loaders.gl/schema';
2
2
  import type { LASHeader } from "./las-types.js";
3
3
  /**
4
- * Gets schema from PLY header
4
+ * Gets schema from LAS header
5
5
  * @param lasHeader
6
6
  * @param metadata
7
7
  * @returns Schema
@@ -1 +1 @@
1
- {"version":3,"file":"get-las-schema.d.ts","sourceRoot":"","sources":["../../src/lib/get-las-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAC,SAAS,EAAC,uBAAoB;AAE3C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,GAAG,MAAM,CAIrF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBtF"}
1
+ {"version":3,"file":"get-las-schema.d.ts","sourceRoot":"","sources":["../../src/lib/get-las-schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAC,SAAS,EAAC,uBAAoB;AAE3C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,GAAG,MAAM,CAIrF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBtF"}
@@ -1,6 +1,9 @@
1
- import { deduceMeshSchema } from '@loaders.gl/schema';
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { deduceMeshSchema } from '@loaders.gl/schema-utils';
2
5
  /**
3
- * Gets schema from PLY header
6
+ * Gets schema from LAS header
4
7
  * @param lasHeader
5
8
  * @param metadata
6
9
  * @returns Schema
@@ -40,3 +43,4 @@ export function makeMetadataFromLasHeader(lasHeader) {
40
43
  }
41
44
  return metadata;
42
45
  }
46
+ //# sourceMappingURL=get-las-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-las-schema.js","sourceRoot":"","sources":["../../src/lib/get-las-schema.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAG1D;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,SAAoB,EAAE,UAA0B;IAC3E,MAAM,WAAW,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAoB;IAC5D,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,8BAA8B;IAC9B,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,kBAAkB,GAAG,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,oBAAoB,GAAG,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxE,QAAQ,CAAC,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9D,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrD,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IACD,QAAQ,CAAC,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9D,QAAQ,CAAC,2BAA2B,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxE,IAAI,SAAS,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC5C,QAAQ,CAAC,mBAAmB,GAAG,SAAS,CAAC,eAAe,CAAC;IAC3D,CAAC;IACD,IAAI,SAAS,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACzC,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}