@loaders.gl/schema 4.2.0-alpha.4 → 4.2.0-alpha.6
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.
- package/dist/dist.dev.js +216 -147
- package/dist/dist.min.js +9 -0
- package/dist/index.cjs +128 -97
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +30 -30
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/lib/mesh/convert-mesh.d.ts +2 -2
- package/dist/lib/mesh/convert-mesh.d.ts.map +1 -1
- package/dist/lib/mesh/convert-mesh.js +33 -18
- package/dist/lib/mesh/deduce-mesh-schema.d.ts +2 -2
- package/dist/lib/mesh/deduce-mesh-schema.d.ts.map +1 -1
- package/dist/lib/mesh/deduce-mesh-schema.js +54 -40
- package/dist/lib/mesh/mesh-to-arrow-table.js +46 -1
- package/dist/lib/mesh/mesh-utils.d.ts +2 -2
- package/dist/lib/mesh/mesh-utils.d.ts.map +1 -1
- package/dist/lib/mesh/mesh-utils.js +41 -28
- package/dist/lib/table/arrow-api/arrow-like-field.d.ts +1 -1
- package/dist/lib/table/arrow-api/arrow-like-field.d.ts.map +1 -1
- package/dist/lib/table/arrow-api/arrow-like-field.js +34 -25
- package/dist/lib/table/arrow-api/arrow-like-schema.d.ts +2 -2
- package/dist/lib/table/arrow-api/arrow-like-schema.d.ts.map +1 -1
- package/dist/lib/table/arrow-api/arrow-like-schema.js +71 -56
- package/dist/lib/table/arrow-api/arrow-like-table.d.ts +2 -2
- package/dist/lib/table/arrow-api/arrow-like-table.d.ts.map +1 -1
- package/dist/lib/table/arrow-api/arrow-like-table.js +57 -45
- package/dist/lib/table/arrow-api/arrow-like-type.d.ts +3 -3
- package/dist/lib/table/arrow-api/arrow-like-type.d.ts.map +1 -1
- package/dist/lib/table/arrow-api/arrow-like-type.js +371 -321
- package/dist/lib/table/arrow-api/enum.js +97 -48
- package/dist/lib/table/arrow-api/get-type-info.d.ts +1 -1
- package/dist/lib/table/arrow-api/get-type-info.d.ts.map +1 -1
- package/dist/lib/table/arrow-api/get-type-info.js +20 -14
- package/dist/lib/table/arrow-api/index.d.ts +4 -4
- package/dist/lib/table/arrow-api/index.d.ts.map +1 -1
- package/dist/lib/table/arrow-api/index.js +3 -1
- package/dist/lib/table/batches/base-table-batch-aggregator.d.ts +3 -3
- package/dist/lib/table/batches/base-table-batch-aggregator.d.ts.map +1 -1
- package/dist/lib/table/batches/base-table-batch-aggregator.js +56 -52
- package/dist/lib/table/batches/columnar-table-batch-aggregator.d.ts +3 -3
- package/dist/lib/table/batches/columnar-table-batch-aggregator.d.ts.map +1 -1
- package/dist/lib/table/batches/columnar-table-batch-aggregator.js +82 -67
- package/dist/lib/table/batches/row-table-batch-aggregator.d.ts +3 -3
- package/dist/lib/table/batches/row-table-batch-aggregator.d.ts.map +1 -1
- package/dist/lib/table/batches/row-table-batch-aggregator.js +76 -67
- package/dist/lib/table/batches/table-batch-aggregator.d.ts +2 -2
- package/dist/lib/table/batches/table-batch-aggregator.d.ts.map +1 -1
- package/dist/lib/table/batches/table-batch-aggregator.js +3 -1
- package/dist/lib/table/batches/table-batch-builder.d.ts +3 -3
- package/dist/lib/table/batches/table-batch-builder.d.ts.map +1 -1
- package/dist/lib/table/batches/table-batch-builder.js +131 -116
- package/dist/lib/table/simple-table/convert-table.d.ts +1 -1
- package/dist/lib/table/simple-table/convert-table.d.ts.map +1 -1
- package/dist/lib/table/simple-table/convert-table.js +97 -62
- package/dist/lib/table/simple-table/data-type.d.ts +2 -2
- package/dist/lib/table/simple-table/data-type.d.ts.map +1 -1
- package/dist/lib/table/simple-table/data-type.js +79 -76
- package/dist/lib/table/simple-table/make-table-from-batches.js +70 -67
- package/dist/lib/table/simple-table/make-table.d.ts +1 -1
- package/dist/lib/table/simple-table/make-table.d.ts.map +1 -1
- package/dist/lib/table/simple-table/make-table.js +85 -41
- package/dist/lib/table/simple-table/row-utils.js +38 -31
- package/dist/lib/table/simple-table/table-accessors.d.ts +1 -1
- package/dist/lib/table/simple-table/table-accessors.d.ts.map +1 -1
- package/dist/lib/table/simple-table/table-accessors.js +314 -270
- package/dist/lib/table/simple-table/table-column.d.ts +1 -1
- package/dist/lib/table/simple-table/table-column.d.ts.map +1 -1
- package/dist/lib/table/simple-table/table-column.js +36 -3
- package/dist/lib/table/simple-table/table-schema.d.ts +2 -2
- package/dist/lib/table/simple-table/table-schema.d.ts.map +1 -1
- package/dist/lib/table/simple-table/table-schema.js +69 -56
- package/dist/lib/utils/assert.js +6 -4
- package/dist/lib/utils/async-queue.js +79 -82
- package/dist/types/batch.d.ts +1 -1
- package/dist/types/batch.d.ts.map +1 -1
- package/dist/types/batch.js +3 -1
- package/dist/types/binary-geometries.d.ts +1 -1
- package/dist/types/binary-geometries.d.ts.map +1 -1
- package/dist/types/binary-geometries.js +3 -1
- package/dist/types/category-gis.d.ts +2 -2
- package/dist/types/category-gis.d.ts.map +1 -1
- package/dist/types/category-gis.js +3 -1
- package/dist/types/category-image.js +3 -1
- package/dist/types/category-mesh.d.ts +3 -3
- package/dist/types/category-mesh.d.ts.map +1 -1
- package/dist/types/category-mesh.js +3 -1
- package/dist/types/category-table.d.ts +3 -3
- package/dist/types/category-table.d.ts.map +1 -1
- package/dist/types/category-table.js +3 -1
- package/dist/types/category-texture.d.ts +1 -1
- package/dist/types/category-texture.d.ts.map +1 -1
- package/dist/types/category-texture.js +3 -1
- package/dist/types/flat-geometries.js +3 -1
- package/dist/types/schema.js +3 -1
- package/dist/types/types.js +3 -1
- package/package.json +8 -4
- package/src/index.ts +1 -1
- package/src/lib/table/arrow-api/arrow-like-field.ts +2 -2
- package/src/lib/table/arrow-api/arrow-like-type.ts +4 -2
- package/dist/index.js.map +0 -1
- package/dist/lib/mesh/convert-mesh.js.map +0 -1
- package/dist/lib/mesh/deduce-mesh-schema.js.map +0 -1
- package/dist/lib/mesh/mesh-to-arrow-table.js.map +0 -1
- package/dist/lib/mesh/mesh-utils.js.map +0 -1
- package/dist/lib/table/arrow-api/arrow-like-field.js.map +0 -1
- package/dist/lib/table/arrow-api/arrow-like-schema.js.map +0 -1
- package/dist/lib/table/arrow-api/arrow-like-table.js.map +0 -1
- package/dist/lib/table/arrow-api/arrow-like-type.js.map +0 -1
- package/dist/lib/table/arrow-api/enum.js.map +0 -1
- package/dist/lib/table/arrow-api/get-type-info.js.map +0 -1
- package/dist/lib/table/arrow-api/index.js.map +0 -1
- package/dist/lib/table/batches/base-table-batch-aggregator.js.map +0 -1
- package/dist/lib/table/batches/columnar-table-batch-aggregator.js.map +0 -1
- package/dist/lib/table/batches/row-table-batch-aggregator.js.map +0 -1
- package/dist/lib/table/batches/table-batch-aggregator.js.map +0 -1
- package/dist/lib/table/batches/table-batch-builder.js.map +0 -1
- package/dist/lib/table/simple-table/convert-table.js.map +0 -1
- package/dist/lib/table/simple-table/data-type.js.map +0 -1
- package/dist/lib/table/simple-table/make-table-from-batches.js.map +0 -1
- package/dist/lib/table/simple-table/make-table.js.map +0 -1
- package/dist/lib/table/simple-table/row-utils.js.map +0 -1
- package/dist/lib/table/simple-table/table-accessors.js.map +0 -1
- package/dist/lib/table/simple-table/table-column.js.map +0 -1
- package/dist/lib/table/simple-table/table-schema.js.map +0 -1
- package/dist/lib/utils/assert.js.map +0 -1
- package/dist/lib/utils/async-queue.js.map +0 -1
- package/dist/types/batch.js.map +0 -1
- package/dist/types/binary-geometries.js.map +0 -1
- package/dist/types/category-gis.js.map +0 -1
- package/dist/types/category-image.js.map +0 -1
- package/dist/types/category-mesh.js.map +0 -1
- package/dist/types/category-table.js.map +0 -1
- package/dist/types/category-texture.js.map +0 -1
- package/dist/types/flat-geometries.js.map +0 -1
- package/dist/types/schema.js.map +0 -1
- package/dist/types/types.js.map +0 -1
|
@@ -1,2 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// loaders.gl
|
|
3
|
+
// SPDX-License-Identifier: MIT
|
|
4
|
+
// Copyright (c) vis.gl contributors
|
|
5
|
+
/* Problem with arrow dependency...
|
|
6
|
+
import {
|
|
7
|
+
Table,
|
|
8
|
+
Schema,
|
|
9
|
+
RecordBatch,
|
|
10
|
+
FixedSizeList,
|
|
11
|
+
Field,
|
|
12
|
+
Data,
|
|
13
|
+
FixedSizeListVector
|
|
14
|
+
} from 'apache-arrow';
|
|
15
|
+
import {AbstractVector} from 'apache-arrow/vector';
|
|
16
|
+
import {getArrowType, getArrowVector} from '../table/arrow/arrow-type-utils';
|
|
17
|
+
import type {Mesh} from './mesh-types';
|
|
18
|
+
import {makeMeshAttributeMetadata} from './deduce-mesh-schema';
|
|
1
19
|
|
|
2
|
-
|
|
20
|
+
/**
|
|
21
|
+
* * Convert a loaders.gl Mesh to an Apache Arrow Table
|
|
22
|
+
* @param mesh
|
|
23
|
+
* @param metadata
|
|
24
|
+
* @param batchSize
|
|
25
|
+
* @returns
|
|
26
|
+
*
|
|
27
|
+
export function convertMeshToArrowTable(mesh: Mesh, batchSize?: number): Table {
|
|
28
|
+
const vectors: AbstractVector[] = [];
|
|
29
|
+
const fields: Field[] = [];
|
|
30
|
+
for (const attributeKey in mesh.attributes) {
|
|
31
|
+
const attribute = mesh.attributes[attributeKey];
|
|
32
|
+
const {value, size = 1} = attribute;
|
|
33
|
+
const type = getArrowType(value);
|
|
34
|
+
const vector = getArrowVector(value);
|
|
35
|
+
const listType = new FixedSizeList(size, new Field('value', type));
|
|
36
|
+
const field = new Field(attributeKey, listType, false, makeMeshAttributeMetadata(attribute));
|
|
37
|
+
const data = new Data(listType, 0, value.length / size, 0, undefined, [vector]);
|
|
38
|
+
const listVector = new FixedSizeListVector(data);
|
|
39
|
+
vectors.push(listVector);
|
|
40
|
+
fields.push(field);
|
|
41
|
+
}
|
|
42
|
+
const schema = new Schema(fields, mesh?.schema?.metadata || new Map<string, string>());
|
|
43
|
+
const recordBatch = new RecordBatch(schema, vectors[0].length, vectors);
|
|
44
|
+
const table = new Table(schema, recordBatch);
|
|
45
|
+
return table;
|
|
46
|
+
}
|
|
47
|
+
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TypedArray } from
|
|
2
|
-
import { MeshAttributes } from
|
|
1
|
+
import { TypedArray } from "../../types/types.js";
|
|
2
|
+
import { MeshAttributes } from "../../types/category-mesh.js";
|
|
3
3
|
type TypedArrays = {
|
|
4
4
|
[key: string]: TypedArray;
|
|
5
5
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/mesh/mesh-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAC,
|
|
1
|
+
{"version":3,"file":"mesh-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/mesh/mesh-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAC,6BAA0B;AAC7C,OAAO,EAAC,cAAc,EAAC,qCAAkC;AAEzD,KAAK,WAAW,GAAG;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;CAAC,CAAC;AAE/C;;;GAGG;AACH,KAAK,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAExE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,CAU3D;AAED;;;;GAIG;AAEH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,cAAc,GAAG,WAAW,CA4B1E"}
|
|
@@ -1,33 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get number of vertices in mesh
|
|
3
|
+
* @param attributes
|
|
4
|
+
*/
|
|
1
5
|
export function getMeshSize(attributes) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
let size = 0;
|
|
7
|
+
for (const attributeName in attributes) {
|
|
8
|
+
const attribute = attributes[attributeName];
|
|
9
|
+
if (ArrayBuffer.isView(attribute)) {
|
|
10
|
+
// @ts-ignore DataView doesn't have BYTES_PER_ELEMENT
|
|
11
|
+
size += attribute.byteLength * attribute.BYTES_PER_ELEMENT;
|
|
12
|
+
}
|
|
7
13
|
}
|
|
8
|
-
|
|
9
|
-
return size;
|
|
14
|
+
return size;
|
|
10
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the (axis aligned) bounding box of a mesh
|
|
18
|
+
* @param attributes
|
|
19
|
+
* @returns array of two vectors representing the axis aligned bounding box
|
|
20
|
+
*/
|
|
21
|
+
// eslint-disable-next-line complexity
|
|
11
22
|
export function getMeshBoundingBox(attributes) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
let minX = Infinity;
|
|
24
|
+
let minY = Infinity;
|
|
25
|
+
let minZ = Infinity;
|
|
26
|
+
let maxX = -Infinity;
|
|
27
|
+
let maxY = -Infinity;
|
|
28
|
+
let maxZ = -Infinity;
|
|
29
|
+
const positions = attributes.POSITION ? attributes.POSITION.value : [];
|
|
30
|
+
const len = positions && positions.length;
|
|
31
|
+
for (let i = 0; i < len; i += 3) {
|
|
32
|
+
const x = positions[i];
|
|
33
|
+
const y = positions[i + 1];
|
|
34
|
+
const z = positions[i + 2];
|
|
35
|
+
minX = x < minX ? x : minX;
|
|
36
|
+
minY = y < minY ? y : minY;
|
|
37
|
+
minZ = z < minZ ? z : minZ;
|
|
38
|
+
maxX = x > maxX ? x : maxX;
|
|
39
|
+
maxY = y > maxY ? y : maxY;
|
|
40
|
+
maxZ = z > maxZ ? z : maxZ;
|
|
41
|
+
}
|
|
42
|
+
return [
|
|
43
|
+
[minX, minY, minZ],
|
|
44
|
+
[maxX, maxY, maxZ]
|
|
45
|
+
];
|
|
32
46
|
}
|
|
33
|
-
//# sourceMappingURL=mesh-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-like-field.d.ts","sourceRoot":"","sources":["../../../../src/lib/table/arrow-api/arrow-like-field.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAC,
|
|
1
|
+
{"version":3,"file":"arrow-like-field.d.ts","sourceRoot":"","sources":["../../../../src/lib/table/arrow-api/arrow-like-field.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAC,6BAA0B;AAE3C;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAG5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,QAAQ,UAAQ,EAChB,QAAQ,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa;IAQ3C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,KAAK,IAAI,cAAc;IAIvB,SAAS,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAS/B,QAAQ,IAAI,MAAM;CAKnB"}
|
|
@@ -1,27 +1,36 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
/**
|
|
5
|
+
* ArrowJS `Field` API-compatible class for row-based tables
|
|
6
|
+
* https://loaders.gl/arrowjs/docs/api-reference/field
|
|
7
|
+
* A field holds name, nullable, and metadata information about a table "column"
|
|
8
|
+
* A Schema is essentially a list of fields
|
|
9
|
+
*/
|
|
1
10
|
export class ArrowLikeField {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
name;
|
|
12
|
+
type;
|
|
13
|
+
nullable;
|
|
14
|
+
metadata;
|
|
15
|
+
constructor(name, type, nullable = false, metadata = new Map()) {
|
|
16
|
+
this.name = name;
|
|
17
|
+
this.type = type;
|
|
18
|
+
this.nullable = nullable;
|
|
19
|
+
this.metadata = metadata;
|
|
20
|
+
}
|
|
21
|
+
get typeId() {
|
|
22
|
+
return this.type && this.type.typeId;
|
|
23
|
+
}
|
|
24
|
+
clone() {
|
|
25
|
+
return new ArrowLikeField(this.name, this.type, this.nullable, this.metadata);
|
|
26
|
+
}
|
|
27
|
+
compareTo(other) {
|
|
28
|
+
return (this.name === other.name &&
|
|
29
|
+
this.type === other.type &&
|
|
30
|
+
this.nullable === other.nullable &&
|
|
31
|
+
this.metadata === other.metadata);
|
|
32
|
+
}
|
|
33
|
+
toString() {
|
|
34
|
+
return `${JSON.stringify(this.type)}${this.nullable ? ', nullable' : ''}${this.metadata ? `, metadata: ${JSON.stringify(this.metadata)}` : ''}`;
|
|
35
|
+
}
|
|
26
36
|
}
|
|
27
|
-
//# sourceMappingURL=arrow-like-field.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SchemaMetadata, Field } from
|
|
2
|
-
import { ArrowLikeField } from
|
|
1
|
+
import { SchemaMetadata, Field } from "../../../types/schema.js";
|
|
2
|
+
import { ArrowLikeField } from "./arrow-like-field.js";
|
|
3
3
|
export declare class ArrowLikeSchema {
|
|
4
4
|
fields: ArrowLikeField[];
|
|
5
5
|
metadata: Map<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-like-schema.d.ts","sourceRoot":"","sources":["../../../../src/lib/table/arrow-api/arrow-like-schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAE,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"arrow-like-schema.d.ts","sourceRoot":"","sources":["../../../../src/lib/table/arrow-api/arrow-like-schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAE,KAAK,EAAC,iCAA8B;AAC5D,OAAO,EAAC,cAAc,EAAC,8BAA2B;AAElD,qBAAa,eAAe;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAG5B,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,EAAE,EAClC,QAAQ,GAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAA6B;IAY5E,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAe1C,MAAM,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,GAAG,eAAe;IAUjD,QAAQ,CAAC,GAAG,aAAa,EAAE,MAAM,EAAE,GAAG,eAAe;IAMrD,MAAM,CAAC,cAAc,EAAE,eAAe,GAAG,cAAc,EAAE,GAAG,eAAe;CA2B5E"}
|
|
@@ -1,66 +1,81 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
1
4
|
import { ArrowLikeField } from "./arrow-like-field.js";
|
|
2
5
|
export class ArrowLikeSchema {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (this.metadata !== other.metadata) {
|
|
12
|
-
return false;
|
|
6
|
+
fields;
|
|
7
|
+
metadata;
|
|
8
|
+
constructor(fields, metadata = new Map()) {
|
|
9
|
+
// checkNames(fields);
|
|
10
|
+
// For kepler fields, create arrow compatible `Fields` that have kepler fields as `metadata`
|
|
11
|
+
this.fields = fields.map((field) => new ArrowLikeField(field.name, field.type, field.nullable, field.metadata));
|
|
12
|
+
this.metadata =
|
|
13
|
+
metadata instanceof Map ? metadata : new Map(Object.entries(metadata));
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
// TODO - arrow only seems to compare fields, not metadata
|
|
16
|
+
compareTo(other) {
|
|
17
|
+
if (this.metadata !== other.metadata) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (this.fields.length !== other.fields.length) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
for (let i = 0; i < this.fields.length; ++i) {
|
|
24
|
+
if (!this.fields[i].compareTo(other.fields[i])) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
16
29
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
select(...columnNames) {
|
|
31
|
+
// Ensure column names reference valid fields
|
|
32
|
+
const nameMap = Object.create(null);
|
|
33
|
+
for (const name of columnNames) {
|
|
34
|
+
nameMap[name] = true;
|
|
35
|
+
}
|
|
36
|
+
const selectedFields = this.fields.filter((field) => nameMap[field.name]);
|
|
37
|
+
return new ArrowLikeSchema(selectedFields, this.metadata);
|
|
21
38
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
for (var _len = arguments.length, columnNames = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
27
|
-
columnNames[_key] = arguments[_key];
|
|
39
|
+
selectAt(...columnIndices) {
|
|
40
|
+
// Ensure column indices reference valid fields
|
|
41
|
+
const selectedFields = columnIndices.map((index) => this.fields[index]).filter(Boolean);
|
|
42
|
+
return new ArrowLikeSchema(selectedFields, this.metadata);
|
|
28
43
|
}
|
|
29
|
-
|
|
30
|
-
|
|
44
|
+
assign(schemaOrFields) {
|
|
45
|
+
let fields;
|
|
46
|
+
let metadata = this.metadata;
|
|
47
|
+
if (schemaOrFields instanceof ArrowLikeSchema) {
|
|
48
|
+
const otherArrowLikeSchema = schemaOrFields;
|
|
49
|
+
fields = otherArrowLikeSchema.fields;
|
|
50
|
+
metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherArrowLikeSchema.metadata);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
fields = schemaOrFields;
|
|
54
|
+
}
|
|
55
|
+
// Create a merged list of fields, overwrite fields in place, new fields at end
|
|
56
|
+
const fieldMap = Object.create(null);
|
|
57
|
+
for (const field of this.fields) {
|
|
58
|
+
fieldMap[field.name] = field;
|
|
59
|
+
}
|
|
60
|
+
for (const field of fields) {
|
|
61
|
+
fieldMap[field.name] = field;
|
|
62
|
+
}
|
|
63
|
+
const mergedFields = Object.values(fieldMap);
|
|
64
|
+
return new ArrowLikeSchema(mergedFields, metadata);
|
|
31
65
|
}
|
|
32
|
-
const selectedFields = this.fields.filter(field => nameMap[field.name]);
|
|
33
|
-
return new ArrowLikeSchema(selectedFields, this.metadata);
|
|
34
|
-
}
|
|
35
|
-
selectAt() {
|
|
36
|
-
for (var _len2 = arguments.length, columnIndices = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
37
|
-
columnIndices[_key2] = arguments[_key2];
|
|
38
|
-
}
|
|
39
|
-
const selectedFields = columnIndices.map(index => this.fields[index]).filter(Boolean);
|
|
40
|
-
return new ArrowLikeSchema(selectedFields, this.metadata);
|
|
41
|
-
}
|
|
42
|
-
assign(schemaOrFields) {
|
|
43
|
-
let fields;
|
|
44
|
-
let metadata = this.metadata;
|
|
45
|
-
if (schemaOrFields instanceof ArrowLikeSchema) {
|
|
46
|
-
const otherArrowLikeSchema = schemaOrFields;
|
|
47
|
-
fields = otherArrowLikeSchema.fields;
|
|
48
|
-
metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherArrowLikeSchema.metadata);
|
|
49
|
-
} else {
|
|
50
|
-
fields = schemaOrFields;
|
|
51
|
-
}
|
|
52
|
-
const fieldMap = Object.create(null);
|
|
53
|
-
for (const field of this.fields) {
|
|
54
|
-
fieldMap[field.name] = field;
|
|
55
|
-
}
|
|
56
|
-
for (const field of fields) {
|
|
57
|
-
fieldMap[field.name] = field;
|
|
58
|
-
}
|
|
59
|
-
const mergedFields = Object.values(fieldMap);
|
|
60
|
-
return new ArrowLikeSchema(mergedFields, metadata);
|
|
61
|
-
}
|
|
62
66
|
}
|
|
67
|
+
// Warn if any duplicated field names
|
|
68
|
+
// function checkNames(fields: Field[]): void {
|
|
69
|
+
// const usedNames: Record<string, boolean> = {};
|
|
70
|
+
// for (const field of fields) {
|
|
71
|
+
// if (usedNames[field.name]) {
|
|
72
|
+
// // eslint-disable-next-line
|
|
73
|
+
// console.warn('ArrowLikeSchema: duplicated field name', field.name, field);
|
|
74
|
+
// }
|
|
75
|
+
// usedNames[field.name] = true;
|
|
76
|
+
// }
|
|
77
|
+
// }
|
|
63
78
|
function mergeMaps(m1, m2) {
|
|
64
|
-
|
|
79
|
+
// @ts-ignore
|
|
80
|
+
return new Map([...(m1 || new Map()), ...(m2 || new Map())]);
|
|
65
81
|
}
|
|
66
|
-
//# sourceMappingURL=arrow-like-schema.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Table } from
|
|
2
|
-
import { ArrowLikeSchema } from
|
|
1
|
+
import { Table } from "../../../types/category-table.js";
|
|
2
|
+
import { ArrowLikeSchema } from "./arrow-like-schema.js";
|
|
3
3
|
declare class ArrowLikeVector {
|
|
4
4
|
table: Table;
|
|
5
5
|
columnName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-like-table.d.ts","sourceRoot":"","sources":["../../../../src/lib/table/arrow-api/arrow-like-table.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"arrow-like-table.d.ts","sourceRoot":"","sources":["../../../../src/lib/table/arrow-api/arrow-like-table.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,KAAK,EAAC,yCAAsC;AAEpD,OAAO,EAAC,eAAe,EAAC,+BAA4B;AAgBpD,cAAM,eAAe;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;gBAEP,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM;IAK5C,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;CAW9B;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;gBAED,KAAK,EAAE,KAAK;IAUxB,IAAI,IAAI,YAEP;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe;CAO9C"}
|
|
@@ -1,51 +1,63 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
1
4
|
import { ArrowLikeSchema } from "./arrow-like-schema.js";
|
|
2
5
|
import { deduceTableSchema } from "../simple-table/table-schema.js";
|
|
3
|
-
import { getTableCell, getTableLength, getTableNumCols
|
|
6
|
+
import { getTableCell, getTableLength, getTableNumCols
|
|
7
|
+
// getTableCell,
|
|
8
|
+
// getTableRowShape,
|
|
9
|
+
// getTableColumnIndex,
|
|
10
|
+
// getTableColumnName,
|
|
11
|
+
// getTableRowAsObject,
|
|
12
|
+
// getTableRowAsArray
|
|
13
|
+
} from "../simple-table/table-accessors.js";
|
|
4
14
|
class ArrowLikeVector {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
}
|
|
15
|
+
table;
|
|
16
|
+
columnName;
|
|
17
|
+
constructor(table, columnName) {
|
|
18
|
+
this.table = table;
|
|
19
|
+
this.columnName = columnName;
|
|
20
|
+
}
|
|
21
|
+
get(rowIndex) {
|
|
22
|
+
return getTableCell(this.table, rowIndex, this.columnName);
|
|
23
|
+
}
|
|
24
|
+
toArray() {
|
|
25
|
+
switch (this.table.shape) {
|
|
26
|
+
case 'arrow-table':
|
|
27
|
+
const arrowTable = this.table.data;
|
|
28
|
+
return arrowTable.getChild(this.columnName)?.toArray();
|
|
29
|
+
case 'columnar-table':
|
|
30
|
+
return this.table.data[this.columnName];
|
|
31
|
+
default:
|
|
32
|
+
throw new Error(this.table.shape);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
26
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Class that provides an API similar to Apache Arrow Table class
|
|
38
|
+
* Forwards methods directly if the underlying table is Arrow, otherwise calls accessor functions
|
|
39
|
+
*/
|
|
27
40
|
export class ArrowLikeTable {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
schema;
|
|
42
|
+
table;
|
|
43
|
+
constructor(table) {
|
|
44
|
+
const schema = table.schema || deduceTableSchema(table);
|
|
45
|
+
this.schema = new ArrowLikeSchema(schema.fields, schema.metadata);
|
|
46
|
+
this.table = { ...table, schema };
|
|
47
|
+
}
|
|
48
|
+
// get schema() {
|
|
49
|
+
// return this.table.schema;
|
|
50
|
+
// }
|
|
51
|
+
get data() {
|
|
52
|
+
return this.table.shape === 'geojson-table' ? this.table.features : this.table.data;
|
|
53
|
+
}
|
|
54
|
+
get numCols() {
|
|
55
|
+
return getTableNumCols(this.table);
|
|
56
|
+
}
|
|
57
|
+
get length() {
|
|
58
|
+
return getTableLength(this.table);
|
|
59
|
+
}
|
|
60
|
+
getChild(columnName) {
|
|
61
|
+
return new ArrowLikeVector(this.table, columnName);
|
|
62
|
+
}
|
|
50
63
|
}
|
|
51
|
-
//# sourceMappingURL=arrow-like-table.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Type } from
|
|
2
|
-
import { ArrowLikeField as Field } from
|
|
3
|
-
export { Type } from
|
|
1
|
+
import { Type } from "./enum.js";
|
|
2
|
+
import { ArrowLikeField as Field } from "./arrow-like-field.js";
|
|
3
|
+
export { Type } from "./enum.js";
|
|
4
4
|
export type TypedIntArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Uint8ClampedArray;
|
|
5
5
|
export type TypedFloatArray = Float32Array | Float64Array;
|
|
6
6
|
export type TypedArray = TypedIntArray | TypedFloatArray;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-like-type.d.ts","sourceRoot":"","sources":["../../../../src/lib/table/arrow-api/arrow-like-type.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,IAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"arrow-like-type.d.ts","sourceRoot":"","sources":["../../../../src/lib/table/arrow-api/arrow-like-type.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,IAAI,EAAC,kBAAe;AAE5B,OAAO,EAAC,cAAc,IAAI,KAAK,EAAC,8BAA2B;AAE3D,OAAO,EAAC,IAAI,EAAC,kBAAe;AAE5B,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,UAAU,GACV,UAAU,GACV,WAAW,GACX,UAAU,GACV,WAAW,GACX,iBAAiB,CAAC;AAEtB,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,YAAY,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,eAAe,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,eAAe,CAAC;AAExE,+BAA+B;AAC/B,qBAAa,QAAQ;IACnB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG9B,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG7B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG/B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAGhC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG9B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG9B,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAGjC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG9B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG9B,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAGnC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAGlC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG9B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAGhC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG/B,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAGzC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAGvC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAG7B,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO;IAIpC,IAAI,MAAM,IAAI,IAAI,CAEjB;IAOD,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;CAIpC;AAID,qBAAa,IAAK,SAAQ,QAAQ;IAChC,IAAI,MAAM,IAAI,IAAI,CAEjB;IACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AAID,qBAAa,IAAK,SAAQ,QAAQ;IAChC,IAAI,MAAM,IAAI,IAAI,CAEjB;IAID,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AAID,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,QAAQ,KAAA,EAAE,QAAQ,KAAA;IAK9B,IAAI,MAAM,IAAI,IAAI,CAEjB;IAeD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AAED,qBAAa,IAAK,SAAQ,GAAG;;CAI5B;AACD,qBAAa,KAAM,SAAQ,GAAG;;CAI7B;AACD,qBAAa,KAAM,SAAQ,GAAG;;CAI7B;AACD,qBAAa,KAAM,SAAQ,GAAG;;CAI7B;AACD,qBAAa,KAAM,SAAQ,GAAG;;CAI7B;AACD,qBAAa,MAAO,SAAQ,GAAG;;CAI9B;AACD,qBAAa,MAAO,SAAQ,GAAG;;CAI9B;AACD,qBAAa,MAAO,SAAQ,GAAG;;CAI9B;AAUD,qBAAa,KAAM,SAAQ,QAAQ;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBACf,SAAS,KAAA;IAIrB,IAAI,MAAM,IAAI,IAAI,CAEjB;IAaD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AAED,qBAAa,OAAQ,SAAQ,KAAK;;CAIjC;AACD,qBAAa,OAAQ,SAAQ,KAAK;;CAIjC;AACD,qBAAa,OAAQ,SAAQ,KAAK;;CAIjC;AAED,qBAAa,MAAO,SAAQ,QAAQ;;IAIlC,IAAI,MAAM,SAET;IACD,QAAQ;IAGR,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;CACF;AAID,qBAAa,IAAK,SAAQ,QAAQ;IAChC,IAAI,MAAM,IAAI,IAAI,CAEjB;IAID,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AASD,qBAAa,IAAK,SAAQ,QAAQ;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,KAAA;IAIhB,IAAI,MAAM,IAAI,IAAI,CAEjB;IAID,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AAED,qBAAa,OAAQ,SAAQ,IAAI;;CAIhC;AACD,qBAAa,eAAgB,SAAQ,IAAI;;CAIxC;AASD,qBAAa,IAAK,SAAQ,QAAQ;IAChC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM;IAKvC,IAAI,MAAM,IAAI,IAAI,CAEjB;IACD,QAAQ,IAAI,MAAM;IAGlB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;CAIF;AAED,qBAAa,UAAW,SAAQ,IAAI;;CAInC;AACD,qBAAa,eAAgB,SAAQ,IAAI;;CAIxC;AAID,qBAAa,SAAU,SAAQ,QAAQ;IACrC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;gBAEX,IAAI,EAAE,GAAG,EAAE,QAAQ,OAAO;IAKtC,IAAI,MAAM,IAAI,IAAI,CAEjB;IAID,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AAED,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,QAAQ,OAAO;CAG5B;AACD,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,QAAQ,OAAO;CAG5B;AACD,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,QAAQ,OAAO;CAG5B;AACD,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,QAAQ,OAAO;CAG5B;AAOD,qBAAa,QAAS,SAAQ,QAAQ;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,MAAM;IAIxB,IAAI,MAAM,IAAI,IAAI,CAEjB;IAID,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AAED,qBAAa,eAAgB,SAAQ,QAAQ;;CAI5C;AACD,qBAAa,iBAAkB,SAAQ,QAAQ;;CAI9C;AAED,qBAAa,aAAc,SAAQ,QAAQ;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;gBAEf,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAK1C,IAAI,MAAM,IAAI,IAAI,CAEjB;IACD,IAAI,SAAS,aAEZ;IACD,IAAI,UAAU,UAEb;IAID,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IACD,QAAQ,IAAI,MAAM;CAGnB;AAED,qBAAa,MAAO,SAAQ,QAAQ;IAClC,SAAgB,QAAQ,EAAE,KAAK,EAAE,CAAC;gBAEtB,QAAQ,EAAE,KAAK,EAAE;IAK7B,IAAW,MAAM,SAEhB;IACM,QAAQ;IAKf,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;CACF"}
|