@loaders.gl/gltf 3.3.0-alpha.1 → 3.3.0-alpha.2
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.min.js +105 -15
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/api/gltf-extensions.js +3 -1
- package/dist/es5/lib/api/gltf-extensions.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +131 -0
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/api/gltf-extensions.js +2 -1
- package/dist/esm/lib/api/gltf-extensions.js.map +1 -1
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +95 -0
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/api/gltf-extensions.d.ts.map +1 -1
- package/dist/lib/api/gltf-extensions.js +3 -1
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts +6 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +118 -0
- package/dist/lib/types/gltf-json-schema.d.ts +384 -0
- package/dist/lib/types/gltf-json-schema.d.ts.map +1 -1
- package/dist/lib/types/gltf-types.d.ts +2 -2
- package/dist/lib/types/gltf-types.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/index.ts +2 -1
- package/src/lib/api/gltf-extensions.ts +3 -1
- package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +163 -0
- package/src/lib/types/gltf-json-schema.ts +429 -0
- package/src/lib/types/gltf-types.ts +4 -2
package/dist/dist.min.js
CHANGED
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
};
|
|
15
15
|
var __export = (target, all) => {
|
|
16
16
|
__markAsModule(target);
|
|
17
|
-
for (var
|
|
18
|
-
__defProp(target,
|
|
17
|
+
for (var name10 in all)
|
|
18
|
+
__defProp(target, name10, { get: all[name10], enumerable: true });
|
|
19
19
|
};
|
|
20
20
|
var __reExport = (target, module, desc) => {
|
|
21
21
|
if (module && typeof module === "object" || typeof module === "function") {
|
|
@@ -200,6 +200,7 @@
|
|
|
200
200
|
// ../worker-utils/src/index.ts
|
|
201
201
|
var init_src = __esm({
|
|
202
202
|
"../worker-utils/src/index.ts"() {
|
|
203
|
+
init_globals2();
|
|
203
204
|
init_library_utils();
|
|
204
205
|
}
|
|
205
206
|
});
|
|
@@ -753,11 +754,12 @@
|
|
|
753
754
|
var BasisWorkerLoader, BasisLoader;
|
|
754
755
|
var init_basis_loader = __esm({
|
|
755
756
|
"../textures/src/basis-loader.ts"() {
|
|
757
|
+
init_src();
|
|
756
758
|
init_version3();
|
|
757
759
|
init_parse_basis();
|
|
758
760
|
BasisWorkerLoader = {
|
|
759
761
|
name: "Basis",
|
|
760
|
-
id: "basis",
|
|
762
|
+
id: isBrowser2 ? "basis" : "basis-nodejs",
|
|
761
763
|
module: "textures",
|
|
762
764
|
version: VERSION4,
|
|
763
765
|
worker: true,
|
|
@@ -1396,12 +1398,12 @@
|
|
|
1396
1398
|
return extras[key];
|
|
1397
1399
|
}
|
|
1398
1400
|
getExtension(extensionName) {
|
|
1399
|
-
const isExtension = this.getUsedExtensions().find((
|
|
1401
|
+
const isExtension = this.getUsedExtensions().find((name10) => name10 === extensionName);
|
|
1400
1402
|
const extensions = this.json.extensions || {};
|
|
1401
1403
|
return isExtension ? extensions[extensionName] || true : null;
|
|
1402
1404
|
}
|
|
1403
1405
|
getRequiredExtension(extensionName) {
|
|
1404
|
-
const isRequired = this.getRequiredExtensions().find((
|
|
1406
|
+
const isRequired = this.getRequiredExtensions().find((name10) => name10 === extensionName);
|
|
1405
1407
|
return isRequired ? this.getExtension(extensionName) : null;
|
|
1406
1408
|
}
|
|
1407
1409
|
getRequiredExtensions() {
|
|
@@ -2064,6 +2066,7 @@
|
|
|
2064
2066
|
var DEFAULT_DRACO_OPTIONS, DracoLoader;
|
|
2065
2067
|
var init_draco_loader = __esm({
|
|
2066
2068
|
"../draco/src/draco-loader.ts"() {
|
|
2069
|
+
init_src();
|
|
2067
2070
|
init_version5();
|
|
2068
2071
|
DEFAULT_DRACO_OPTIONS = {
|
|
2069
2072
|
draco: {
|
|
@@ -2075,7 +2078,7 @@
|
|
|
2075
2078
|
};
|
|
2076
2079
|
DracoLoader = {
|
|
2077
2080
|
name: "Draco",
|
|
2078
|
-
id: "draco",
|
|
2081
|
+
id: isBrowser2 ? "draco" : "draco-nodejs",
|
|
2079
2082
|
module: "draco",
|
|
2080
2083
|
shapes: ["mesh"],
|
|
2081
2084
|
version: VERSION7,
|
|
@@ -2171,8 +2174,8 @@
|
|
|
2171
2174
|
}
|
|
2172
2175
|
select(...columnNames) {
|
|
2173
2176
|
const nameMap = Object.create(null);
|
|
2174
|
-
for (const
|
|
2175
|
-
nameMap[
|
|
2177
|
+
for (const name10 of columnNames) {
|
|
2178
|
+
nameMap[name10] = true;
|
|
2176
2179
|
}
|
|
2177
2180
|
const selectedFields = this.fields.filter((field) => nameMap[field.name]);
|
|
2178
2181
|
return new Schema(selectedFields, this.metadata);
|
|
@@ -2210,8 +2213,8 @@
|
|
|
2210
2213
|
var init_field = __esm({
|
|
2211
2214
|
"../schema/src/lib/schema/impl/field.ts"() {
|
|
2212
2215
|
Field = class {
|
|
2213
|
-
constructor(
|
|
2214
|
-
this.name =
|
|
2216
|
+
constructor(name10, type, nullable = false, metadata = new Map()) {
|
|
2217
|
+
this.name = name10;
|
|
2215
2218
|
this.type = type;
|
|
2216
2219
|
this.nullable = nullable;
|
|
2217
2220
|
this.metadata = metadata;
|
|
@@ -3134,11 +3137,11 @@
|
|
|
3134
3137
|
// src/lib/gltf-utils/gltf-attribute-utils.ts
|
|
3135
3138
|
function getGLTFAccessors(attributes) {
|
|
3136
3139
|
const accessors = {};
|
|
3137
|
-
for (const
|
|
3138
|
-
const attribute = attributes[
|
|
3139
|
-
if (
|
|
3140
|
+
for (const name10 in attributes) {
|
|
3141
|
+
const attribute = attributes[name10];
|
|
3142
|
+
if (name10 !== "indices") {
|
|
3140
3143
|
const glTFAccessor = getGLTFAccessor(attribute);
|
|
3141
|
-
accessors[
|
|
3144
|
+
accessors[name10] = glTFAccessor;
|
|
3142
3145
|
}
|
|
3143
3146
|
}
|
|
3144
3147
|
return accessors;
|
|
@@ -4824,6 +4827,91 @@
|
|
|
4824
4827
|
}
|
|
4825
4828
|
});
|
|
4826
4829
|
|
|
4830
|
+
// src/lib/extensions/deprecated/EXT_feature_metadata.ts
|
|
4831
|
+
var EXT_feature_metadata_exports = {};
|
|
4832
|
+
__export(EXT_feature_metadata_exports, {
|
|
4833
|
+
decode: () => decode8,
|
|
4834
|
+
name: () => name9
|
|
4835
|
+
});
|
|
4836
|
+
async function decode8(gltfData) {
|
|
4837
|
+
const scenegraph = new GLTFScenegraph(gltfData);
|
|
4838
|
+
decodeExtFeatureMetadata(scenegraph);
|
|
4839
|
+
}
|
|
4840
|
+
function decodeExtFeatureMetadata(scenegraph) {
|
|
4841
|
+
const extension = scenegraph.getExtension(EXT_FEATURE_METADATA);
|
|
4842
|
+
const schemaClasses = extension?.schema?.classes;
|
|
4843
|
+
const featureTables = extension?.featureTables;
|
|
4844
|
+
const featureTextures = extension?.featureTextures;
|
|
4845
|
+
if (featureTextures) {
|
|
4846
|
+
console.warn('featureTextures is not yet supported in the "EXT_feature_metadata" extension.');
|
|
4847
|
+
}
|
|
4848
|
+
if (schemaClasses && featureTables) {
|
|
4849
|
+
for (const schemaName in schemaClasses) {
|
|
4850
|
+
const schemaClass = schemaClasses[schemaName];
|
|
4851
|
+
const featureTable = findFeatureTableByName(featureTables, schemaName);
|
|
4852
|
+
if (featureTable) {
|
|
4853
|
+
handleFeatureTableProperties(scenegraph, featureTable, schemaClass);
|
|
4854
|
+
}
|
|
4855
|
+
}
|
|
4856
|
+
}
|
|
4857
|
+
}
|
|
4858
|
+
function handleFeatureTableProperties(scenegraph, featureTable, schemaClass) {
|
|
4859
|
+
for (const propertyName in schemaClass.properties) {
|
|
4860
|
+
const schemaProperty = schemaClass.properties[propertyName];
|
|
4861
|
+
const featureTableProperty = featureTable?.properties?.[propertyName];
|
|
4862
|
+
const numberOfFeatures = featureTable.count;
|
|
4863
|
+
if (featureTableProperty) {
|
|
4864
|
+
const data = getPropertyDataFromBinarySource(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty);
|
|
4865
|
+
featureTableProperty.data = data;
|
|
4866
|
+
}
|
|
4867
|
+
}
|
|
4868
|
+
}
|
|
4869
|
+
function getPropertyDataFromBinarySource(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty) {
|
|
4870
|
+
const bufferView = featureTableProperty.bufferView;
|
|
4871
|
+
let data = scenegraph.getTypedArrayForBufferView(bufferView);
|
|
4872
|
+
switch (schemaProperty.type) {
|
|
4873
|
+
case "STRING": {
|
|
4874
|
+
const stringOffsetBufferView = featureTableProperty.stringOffsetBufferView;
|
|
4875
|
+
const offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);
|
|
4876
|
+
data = getStringAttributes(data, offsetsData, numberOfFeatures);
|
|
4877
|
+
break;
|
|
4878
|
+
}
|
|
4879
|
+
default:
|
|
4880
|
+
}
|
|
4881
|
+
return data;
|
|
4882
|
+
}
|
|
4883
|
+
function findFeatureTableByName(featureTables, schemaClassName) {
|
|
4884
|
+
for (const featureTableName in featureTables) {
|
|
4885
|
+
const featureTable = featureTables[featureTableName];
|
|
4886
|
+
if (featureTable.class === schemaClassName) {
|
|
4887
|
+
return featureTable;
|
|
4888
|
+
}
|
|
4889
|
+
}
|
|
4890
|
+
return null;
|
|
4891
|
+
}
|
|
4892
|
+
function getStringAttributes(data, offsetsData, stringsCount) {
|
|
4893
|
+
const stringsArray = [];
|
|
4894
|
+
const textDecoder = new TextDecoder("utf8");
|
|
4895
|
+
let stringOffset = 0;
|
|
4896
|
+
const bytesPerStringSize = 4;
|
|
4897
|
+
for (let index = 0; index < stringsCount; index++) {
|
|
4898
|
+
const stringByteSize = offsetsData[(index + 1) * bytesPerStringSize] - offsetsData[index * bytesPerStringSize];
|
|
4899
|
+
const stringData = data.subarray(stringOffset, stringByteSize + stringOffset);
|
|
4900
|
+
const stringAttribute = textDecoder.decode(stringData);
|
|
4901
|
+
stringsArray.push(stringAttribute);
|
|
4902
|
+
stringOffset += stringByteSize;
|
|
4903
|
+
}
|
|
4904
|
+
return stringsArray;
|
|
4905
|
+
}
|
|
4906
|
+
var EXT_FEATURE_METADATA, name9;
|
|
4907
|
+
var init_EXT_feature_metadata = __esm({
|
|
4908
|
+
"src/lib/extensions/deprecated/EXT_feature_metadata.ts"() {
|
|
4909
|
+
init_gltf_scenegraph();
|
|
4910
|
+
EXT_FEATURE_METADATA = "EXT_feature_metadata";
|
|
4911
|
+
name9 = EXT_FEATURE_METADATA;
|
|
4912
|
+
}
|
|
4913
|
+
});
|
|
4914
|
+
|
|
4827
4915
|
// src/lib/api/gltf-extensions.ts
|
|
4828
4916
|
function preprocessExtensions(gltf, options = {}, context) {
|
|
4829
4917
|
const extensions = EXTENSIONS2.filter((extension) => useExtension(extension.name, options));
|
|
@@ -4853,6 +4941,7 @@
|
|
|
4853
4941
|
init_KHR_lights_punctual();
|
|
4854
4942
|
init_KHR_materials_unlit();
|
|
4855
4943
|
init_KHR_techniques_webgl();
|
|
4944
|
+
init_EXT_feature_metadata();
|
|
4856
4945
|
EXTENSIONS2 = [
|
|
4857
4946
|
EXT_meshopt_compression_exports,
|
|
4858
4947
|
EXT_texture_webp_exports,
|
|
@@ -4861,7 +4950,8 @@
|
|
|
4861
4950
|
KHR_lights_punctual_exports,
|
|
4862
4951
|
KHR_materials_unlit_exports,
|
|
4863
4952
|
KHR_techniques_webgl_exports,
|
|
4864
|
-
KHR_texture_transform_exports
|
|
4953
|
+
KHR_texture_transform_exports,
|
|
4954
|
+
EXT_feature_metadata_exports
|
|
4865
4955
|
];
|
|
4866
4956
|
}
|
|
4867
4957
|
});
|
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA;;AACA;;AAGA;;AACA;;AAGA;;AACA","sourcesContent":["/* eslint-disable camelcase, indent */\nexport type {GLB} from './lib/types/glb-types';\nexport type {\n GLTF,\n GLTFAccessor,\n GLTFBuffer,\n GLTFBufferView,\n GLTFMeshPrimitive,\n GLTFMesh,\n GLTFNode,\n GLTFMaterial,\n GLTFSampler,\n GLTFScene,\n GLTFSkin,\n GLTFTexture,\n GLTFImage,\n GLTFPostprocessed,\n GLTFNodePostprocessed,\n GLTFMaterialPostprocessed,\n GLTFImagePostprocessed,\n // The following extensions are handled by the GLTFLoader and removed from the parsed glTF (disable via options.gltf.excludeExtensions)\n GLTF_KHR_binary_glTF,\n GLTF_KHR_draco_mesh_compression,\n GLTF_KHR_texture_basisu,\n GLTF_EXT_meshopt_compression,\n GLTF_EXT_texture_webp,\n GLTF_EXT_feature_metadata\n} from './lib/types/gltf-types';\n\n// glTF loader/writer definition objects\nexport {GLTFLoader} from './gltf-loader';\nexport {GLTFWriter} from './gltf-writer';\n\n// GLB Loader & Writer (for custom formats that want to leverage the GLB binary \"envelope\")\nexport {GLBLoader} from './glb-loader';\nexport {GLBWriter} from './glb-writer';\n\n// glTF Data Access Helper Class\nexport {default as GLTFScenegraph} from './lib/api/gltf-scenegraph';\nexport {postProcessGLTF} from './lib/api/post-process-gltf';\nexport type {Mesh} from './lib/types/gltf-json-schema';\nexport type {GLTFObject} from './lib/types/gltf-types';\n"],"file":"index.js"}
|
|
@@ -31,6 +31,8 @@ var KHR_materials_unlit = _interopRequireWildcard(require("../extensions/depreca
|
|
|
31
31
|
|
|
32
32
|
var KHR_techniques_webgl = _interopRequireWildcard(require("../extensions/deprecated/KHR_techniques_webgl"));
|
|
33
33
|
|
|
34
|
+
var EXT_feature_metadata = _interopRequireWildcard(require("../extensions/deprecated/EXT_feature_metadata"));
|
|
35
|
+
|
|
34
36
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
35
37
|
|
|
36
38
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -41,7 +43,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
41
43
|
|
|
42
44
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
43
45
|
|
|
44
|
-
var EXTENSIONS = [EXT_meshopt_compression, EXT_texture_webp, KHR_texture_basisu, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_unlit, KHR_techniques_webgl, KHR_texture_transform];
|
|
46
|
+
var EXTENSIONS = [EXT_meshopt_compression, EXT_texture_webp, KHR_texture_basisu, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_unlit, KHR_techniques_webgl, KHR_texture_transform, EXT_feature_metadata];
|
|
45
47
|
exports.EXTENSIONS = EXTENSIONS;
|
|
46
48
|
|
|
47
49
|
function preprocessExtensions(gltf) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api/gltf-extensions.ts"],"names":["EXTENSIONS","EXT_meshopt_compression","EXT_texture_webp","KHR_texture_basisu","KHR_draco_mesh_compression","KHR_lights_punctual","KHR_materials_unlit","KHR_techniques_webgl","KHR_texture_transform","preprocessExtensions","gltf","options","context","extensions","filter","extension","useExtension","name","preprocess","decodeExtensions","decode","extensionName","excludes","excludeExtensions","exclude"],"mappings":";;;;;;;;;;;;;;;;;AAQA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;;;;;;;;;;;AAuBO,IAAMA,UAAiC,GAAG,CAM/CC,uBAN+C,EAO/CC,gBAP+C,EAS/CC,kBAT+C,EAU/CC,0BAV+C,EAW/CC,mBAX+C,EAY/CC,mBAZ+C,EAa/CC,oBAb+C,EAc/CC,qBAd+C,CAA1C;;;
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/api/gltf-extensions.ts"],"names":["EXTENSIONS","EXT_meshopt_compression","EXT_texture_webp","KHR_texture_basisu","KHR_draco_mesh_compression","KHR_lights_punctual","KHR_materials_unlit","KHR_techniques_webgl","KHR_texture_transform","EXT_feature_metadata","preprocessExtensions","gltf","options","context","extensions","filter","extension","useExtension","name","preprocess","decodeExtensions","decode","extensionName","excludes","excludeExtensions","exclude"],"mappings":";;;;;;;;;;;;;;;;;AAQA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;;;;;;;;;;;AAuBO,IAAMA,UAAiC,GAAG,CAM/CC,uBAN+C,EAO/CC,gBAP+C,EAS/CC,kBAT+C,EAU/CC,0BAV+C,EAW/CC,mBAX+C,EAY/CC,mBAZ+C,EAa/CC,oBAb+C,EAc/CC,qBAd+C,EAe/CC,oBAf+C,CAA1C;;;AAmBA,SAASC,oBAAT,CAA8BC,IAA9B,EAA+E;AAAA,MAA3CC,OAA2C,uEAAd,EAAc;AAAA,MAAVC,OAAU;AACpF,MAAMC,UAAU,GAAGd,UAAU,CAACe,MAAX,CAAkB,UAACC,SAAD;AAAA,WAAeC,YAAY,CAACD,SAAS,CAACE,IAAX,EAAiBN,OAAjB,CAA3B;AAAA,GAAlB,CAAnB;;AADoF,6CAE5DE,UAF4D;AAAA;;AAAA;AAEpF,wDAAoC;AAAA;;AAAA,UAAzBE,SAAyB;AAClC,+BAAAA,SAAS,CAACG,UAAV,qFAAAH,SAAS,EAAcL,IAAd,EAAoBC,OAApB,EAA6BC,OAA7B,CAAT;AACD;AAJmF;AAAA;AAAA;AAAA;AAAA;AAKrF;;SAGqBO,gB;;;;;gFAAf,iBAAgCT,IAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAsCC,YAAAA,OAAtC,2DAAmE,EAAnE;AAAuEC,YAAAA,OAAvE;AACCC,YAAAA,UADD,GACcd,UAAU,CAACe,MAAX,CAAkB,UAACC,SAAD;AAAA,qBAAeC,YAAY,CAACD,SAAS,CAACE,IAAX,EAAiBN,OAAjB,CAA3B;AAAA,aAAlB,CADd;AAAA,oDAEmBE,UAFnB;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEME,YAAAA,SAFN;AAAA;AAAA,wCAKGA,SAAS,CAACK,MALb,sDAKG,uBAAAL,SAAS,EAAUL,IAAV,EAAgBC,OAAhB,EAAyBC,OAAzB,CALZ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AASP,SAASI,YAAT,CAAsBK,aAAtB,EAA6CV,OAA7C,EAAyE;AAAA;;AACvE,MAAMW,QAAQ,GAAG,CAAAX,OAAO,SAAP,IAAAA,OAAO,WAAP,6BAAAA,OAAO,CAAED,IAAT,gEAAea,iBAAf,KAAoC,EAArD;AACA,MAAMC,OAAO,GAAGH,aAAa,IAAIC,QAAjB,IAA6B,CAACA,QAAQ,CAACD,aAAD,CAAtD;AACA,SAAO,CAACG,OAAR;AACD","sourcesContent":["/* eslint-disable camelcase */\nimport {GLTF} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\n// GLTF 1.0 extensions (decode only)\n// import * as KHR_binary_gltf from './KHR_draco_mesh_compression';\n\n// GLTF 2.0 Khronos extensions (decode/encode)\nimport * as EXT_meshopt_compression from '../extensions/EXT_meshopt_compression';\nimport * as EXT_texture_webp from '../extensions/EXT_texture_webp';\nimport * as KHR_texture_basisu from '../extensions/KHR_texture_basisu';\nimport * as KHR_draco_mesh_compression from '../extensions/KHR_draco_mesh_compression';\nimport * as KHR_texture_transform from '../extensions/KHR_texture_transform';\n\n// Deprecated. These should be handled by rendering library (e.g. luma.gl), not the loader.\nimport * as KHR_lights_punctual from '../extensions/deprecated/KHR_lights_punctual';\nimport * as KHR_materials_unlit from '../extensions/deprecated/KHR_materials_unlit';\nimport * as KHR_techniques_webgl from '../extensions/deprecated/KHR_techniques_webgl';\nimport * as EXT_feature_metadata from '../extensions/deprecated/EXT_feature_metadata';\n\n// Vendor extensions\n\ntype GLTFExtensionPlugin = {\n name: string;\n preprocess?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions, context) => void;\n decode?: (\n gltfData: {\n json: GLTF;\n buffers: {arrayBuffer: ArrayBuffer; byteOffset: number; byteLength: number}[];\n },\n options: GLTFLoaderOptions,\n context\n ) => Promise<void>;\n encode?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions) => void;\n};\n\n/**\n * List of extensions processed by the GLTFLoader\n * Note that may extensions can only be handled on the rendering stage and are left out here\n * These are just extensions that can be handled fully or partially during loading.\n */\nexport const EXTENSIONS: GLTFExtensionPlugin[] = [\n // 1.0\n // KHR_binary_gltf is handled separately - must be processed before other parsing starts\n // KHR_binary_gltf,\n\n // 2.0\n EXT_meshopt_compression,\n EXT_texture_webp,\n // Basisu should come after webp, we want basisu to be preferred if both are provided\n KHR_texture_basisu,\n KHR_draco_mesh_compression,\n KHR_lights_punctual,\n KHR_materials_unlit,\n KHR_techniques_webgl,\n KHR_texture_transform,\n EXT_feature_metadata\n];\n\n/** Call before any resource loading starts */\nexport function preprocessExtensions(gltf, options: GLTFLoaderOptions = {}, context?) {\n const extensions = EXTENSIONS.filter((extension) => useExtension(extension.name, options));\n for (const extension of extensions) {\n extension.preprocess?.(gltf, options, context);\n }\n}\n\n/** Call after resource loading */\nexport async function decodeExtensions(gltf, options: GLTFLoaderOptions = {}, context?) {\n const extensions = EXTENSIONS.filter((extension) => useExtension(extension.name, options));\n for (const extension of extensions) {\n // Note: We decode async extensions sequentially, this might not be necessary\n // Currently we only have Draco, but when we add Basis we may revisit\n await extension.decode?.(gltf, options, context);\n }\n}\n\nfunction useExtension(extensionName: string, options: GLTFLoaderOptions) {\n const excludes = options?.gltf?.excludeExtensions || {};\n const exclude = extensionName in excludes && !excludes[extensionName];\n return !exclude;\n}\n"],"file":"gltf-extensions.js"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.decode = decode;
|
|
9
|
+
exports.name = void 0;
|
|
10
|
+
|
|
11
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
|
+
|
|
13
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
14
|
+
|
|
15
|
+
var _gltfScenegraph = _interopRequireDefault(require("../../api/gltf-scenegraph"));
|
|
16
|
+
|
|
17
|
+
var EXT_FEATURE_METADATA = 'EXT_feature_metadata';
|
|
18
|
+
var name = EXT_FEATURE_METADATA;
|
|
19
|
+
exports.name = name;
|
|
20
|
+
|
|
21
|
+
function decode(_x) {
|
|
22
|
+
return _decode.apply(this, arguments);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function _decode() {
|
|
26
|
+
_decode = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(gltfData) {
|
|
27
|
+
var scenegraph;
|
|
28
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
29
|
+
while (1) {
|
|
30
|
+
switch (_context.prev = _context.next) {
|
|
31
|
+
case 0:
|
|
32
|
+
scenegraph = new _gltfScenegraph.default(gltfData);
|
|
33
|
+
decodeExtFeatureMetadata(scenegraph);
|
|
34
|
+
|
|
35
|
+
case 2:
|
|
36
|
+
case "end":
|
|
37
|
+
return _context.stop();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}, _callee);
|
|
41
|
+
}));
|
|
42
|
+
return _decode.apply(this, arguments);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function decodeExtFeatureMetadata(scenegraph) {
|
|
46
|
+
var _extension$schema;
|
|
47
|
+
|
|
48
|
+
var extension = scenegraph.getExtension(EXT_FEATURE_METADATA);
|
|
49
|
+
var schemaClasses = extension === null || extension === void 0 ? void 0 : (_extension$schema = extension.schema) === null || _extension$schema === void 0 ? void 0 : _extension$schema.classes;
|
|
50
|
+
var featureTables = extension === null || extension === void 0 ? void 0 : extension.featureTables;
|
|
51
|
+
var featureTextures = extension === null || extension === void 0 ? void 0 : extension.featureTextures;
|
|
52
|
+
|
|
53
|
+
if (featureTextures) {
|
|
54
|
+
console.warn('featureTextures is not yet supported in the "EXT_feature_metadata" extension.');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (schemaClasses && featureTables) {
|
|
58
|
+
for (var schemaName in schemaClasses) {
|
|
59
|
+
var schemaClass = schemaClasses[schemaName];
|
|
60
|
+
var featureTable = findFeatureTableByName(featureTables, schemaName);
|
|
61
|
+
|
|
62
|
+
if (featureTable) {
|
|
63
|
+
handleFeatureTableProperties(scenegraph, featureTable, schemaClass);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function handleFeatureTableProperties(scenegraph, featureTable, schemaClass) {
|
|
70
|
+
for (var propertyName in schemaClass.properties) {
|
|
71
|
+
var _featureTable$propert;
|
|
72
|
+
|
|
73
|
+
var schemaProperty = schemaClass.properties[propertyName];
|
|
74
|
+
var featureTableProperty = featureTable === null || featureTable === void 0 ? void 0 : (_featureTable$propert = featureTable.properties) === null || _featureTable$propert === void 0 ? void 0 : _featureTable$propert[propertyName];
|
|
75
|
+
var numberOfFeatures = featureTable.count;
|
|
76
|
+
|
|
77
|
+
if (featureTableProperty) {
|
|
78
|
+
var data = getPropertyDataFromBinarySource(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty);
|
|
79
|
+
featureTableProperty.data = data;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function getPropertyDataFromBinarySource(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty) {
|
|
85
|
+
var bufferView = featureTableProperty.bufferView;
|
|
86
|
+
var data = scenegraph.getTypedArrayForBufferView(bufferView);
|
|
87
|
+
|
|
88
|
+
switch (schemaProperty.type) {
|
|
89
|
+
case 'STRING':
|
|
90
|
+
{
|
|
91
|
+
var stringOffsetBufferView = featureTableProperty.stringOffsetBufferView;
|
|
92
|
+
var offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);
|
|
93
|
+
data = getStringAttributes(data, offsetsData, numberOfFeatures);
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
default:
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return data;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function findFeatureTableByName(featureTables, schemaClassName) {
|
|
104
|
+
for (var featureTableName in featureTables) {
|
|
105
|
+
var featureTable = featureTables[featureTableName];
|
|
106
|
+
|
|
107
|
+
if (featureTable.class === schemaClassName) {
|
|
108
|
+
return featureTable;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function getStringAttributes(data, offsetsData, stringsCount) {
|
|
116
|
+
var stringsArray = [];
|
|
117
|
+
var textDecoder = new TextDecoder('utf8');
|
|
118
|
+
var stringOffset = 0;
|
|
119
|
+
var bytesPerStringSize = 4;
|
|
120
|
+
|
|
121
|
+
for (var index = 0; index < stringsCount; index++) {
|
|
122
|
+
var stringByteSize = offsetsData[(index + 1) * bytesPerStringSize] - offsetsData[index * bytesPerStringSize];
|
|
123
|
+
var stringData = data.subarray(stringOffset, stringByteSize + stringOffset);
|
|
124
|
+
var stringAttribute = textDecoder.decode(stringData);
|
|
125
|
+
stringsArray.push(stringAttribute);
|
|
126
|
+
stringOffset += stringByteSize;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return stringsArray;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=EXT_feature_metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/extensions/deprecated/EXT_feature_metadata.ts"],"names":["EXT_FEATURE_METADATA","name","decode","gltfData","scenegraph","GLTFScenegraph","decodeExtFeatureMetadata","extension","getExtension","schemaClasses","schema","classes","featureTables","featureTextures","console","warn","schemaName","schemaClass","featureTable","findFeatureTableByName","handleFeatureTableProperties","propertyName","properties","schemaProperty","featureTableProperty","numberOfFeatures","count","data","getPropertyDataFromBinarySource","bufferView","getTypedArrayForBufferView","type","stringOffsetBufferView","offsetsData","getStringAttributes","schemaClassName","featureTableName","class","stringsCount","stringsArray","textDecoder","TextDecoder","stringOffset","bytesPerStringSize","index","stringByteSize","stringData","subarray","stringAttribute","push"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\nimport type {GLTF} from '../../types/gltf-types';\n\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\nimport {\n ClassProperty,\n EXT_feature_metadata_class_object,\n EXT_feature_metadata_feature_table,\n FeatureTableProperty,\n GLTF_EXT_feature_metadata\n} from '../../types/gltf-json-schema';\n\n/** Extension name */\nconst EXT_FEATURE_METADATA = 'EXT_feature_metadata';\n\nexport const name = EXT_FEATURE_METADATA;\n\nexport async function decode(gltfData: {json: GLTF}): Promise<void> {\n const scenegraph = new GLTFScenegraph(gltfData);\n decodeExtFeatureMetadata(scenegraph);\n}\n\n/**\n * Decodes feature metadata from extension\n * @param scenegraph\n */\nfunction decodeExtFeatureMetadata(scenegraph: GLTFScenegraph): void {\n const extension: GLTF_EXT_feature_metadata | null = scenegraph.getExtension(EXT_FEATURE_METADATA);\n const schemaClasses = extension?.schema?.classes;\n const featureTables = extension?.featureTables;\n const featureTextures = extension?.featureTextures;\n\n if (featureTextures) {\n /*\n * TODO add support for featureTextures\n * Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#feature-textures\n */\n // eslint-disable-next-line no-console\n console.warn('featureTextures is not yet supported in the \"EXT_feature_metadata\" extension.');\n }\n\n if (schemaClasses && featureTables) {\n for (const schemaName in schemaClasses) {\n const schemaClass = schemaClasses[schemaName];\n const featureTable = findFeatureTableByName(featureTables, schemaName);\n\n if (featureTable) {\n handleFeatureTableProperties(scenegraph, featureTable, schemaClass);\n }\n }\n }\n}\n\n/**\n * Navigate throw all properies in feature table and gets properties data.\n * @param scenegraph\n * @param featureTable\n * @param schemaClass\n */\nfunction handleFeatureTableProperties(\n scenegraph: GLTFScenegraph,\n featureTable: EXT_feature_metadata_feature_table,\n schemaClass: EXT_feature_metadata_class_object\n): void {\n for (const propertyName in schemaClass.properties) {\n const schemaProperty = schemaClass.properties[propertyName];\n const featureTableProperty = featureTable?.properties?.[propertyName];\n const numberOfFeatures = featureTable.count;\n\n if (featureTableProperty) {\n const data = getPropertyDataFromBinarySource(\n scenegraph,\n schemaProperty,\n numberOfFeatures,\n featureTableProperty\n );\n featureTableProperty.data = data;\n }\n }\n}\n\n/**\n * Decode properties from binary sourse based on property type.\n * @param scenegraph\n * @param schemaProperty\n * @param numberOfFeatures\n * @param featureTableProperty\n */\nfunction getPropertyDataFromBinarySource(\n scenegraph: GLTFScenegraph,\n schemaProperty: ClassProperty,\n numberOfFeatures: number,\n featureTableProperty: FeatureTableProperty\n): Uint8Array | string[] {\n const bufferView = featureTableProperty.bufferView;\n // TODO think maybe we shouldn't get data only in Uint8Array format.\n let data: Uint8Array | string[] = scenegraph.getTypedArrayForBufferView(bufferView);\n\n switch (schemaProperty.type) {\n case 'STRING': {\n // stringOffsetBufferView should be available for string type.\n const stringOffsetBufferView = featureTableProperty.stringOffsetBufferView!;\n const offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);\n data = getStringAttributes(data, offsetsData, numberOfFeatures);\n break;\n }\n default:\n }\n\n return data;\n}\n\n/**\n * Find the feature table by class name.\n * @param featureTables\n * @param schemaClassName\n */\nfunction findFeatureTableByName(\n featureTables: {[key: string]: EXT_feature_metadata_feature_table},\n schemaClassName: string\n): EXT_feature_metadata_feature_table | null {\n for (const featureTableName in featureTables) {\n const featureTable = featureTables[featureTableName];\n\n if (featureTable.class === schemaClassName) {\n return featureTable;\n }\n }\n\n return null;\n}\n\n/**\n * Getting string attributes from binary data.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata#strings\n * @param data\n * @param offsetsData\n * @param stringsCount\n */\nfunction getStringAttributes(\n data: Uint8Array,\n offsetsData: Uint8Array,\n stringsCount: number\n): string[] {\n const stringsArray: string[] = [];\n const textDecoder = new TextDecoder('utf8');\n\n let stringOffset = 0;\n const bytesPerStringSize = 4;\n\n for (let index = 0; index < stringsCount; index++) {\n // TODO check if it is multiplication on bytesPerStringSize is valid operation?\n const stringByteSize =\n offsetsData[(index + 1) * bytesPerStringSize] - offsetsData[index * bytesPerStringSize];\n const stringData = data.subarray(stringOffset, stringByteSize + stringOffset);\n const stringAttribute = textDecoder.decode(stringData);\n\n stringsArray.push(stringAttribute);\n stringOffset += stringByteSize;\n }\n\n return stringsArray;\n}\n"],"file":"EXT_feature_metadata.js"}
|
|
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.VERSION = void 0;
|
|
7
|
-
var VERSION = typeof "3.3.0-alpha.
|
|
7
|
+
var VERSION = typeof "3.3.0-alpha.2" !== 'undefined' ? "3.3.0-alpha.2" : 'latest';
|
|
8
8
|
exports.VERSION = VERSION;
|
|
9
9
|
//# sourceMappingURL=version.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":["GLTFLoader","GLTFWriter","GLBLoader","GLBWriter","default","GLTFScenegraph","postProcessGLTF"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":["GLTFLoader","GLTFWriter","GLBLoader","GLBWriter","default","GLTFScenegraph","postProcessGLTF"],"mappings":"AA8BA,SAAQA,UAAR,QAAyB,eAAzB;AACA,SAAQC,UAAR,QAAyB,eAAzB;AAGA,SAAQC,SAAR,QAAwB,cAAxB;AACA,SAAQC,SAAR,QAAwB,cAAxB;AAGA,SAAQC,OAAO,IAAIC,cAAnB,QAAwC,2BAAxC;AACA,SAAQC,eAAR,QAA8B,6BAA9B","sourcesContent":["/* eslint-disable camelcase, indent */\nexport type {GLB} from './lib/types/glb-types';\nexport type {\n GLTF,\n GLTFAccessor,\n GLTFBuffer,\n GLTFBufferView,\n GLTFMeshPrimitive,\n GLTFMesh,\n GLTFNode,\n GLTFMaterial,\n GLTFSampler,\n GLTFScene,\n GLTFSkin,\n GLTFTexture,\n GLTFImage,\n GLTFPostprocessed,\n GLTFNodePostprocessed,\n GLTFMaterialPostprocessed,\n GLTFImagePostprocessed,\n // The following extensions are handled by the GLTFLoader and removed from the parsed glTF (disable via options.gltf.excludeExtensions)\n GLTF_KHR_binary_glTF,\n GLTF_KHR_draco_mesh_compression,\n GLTF_KHR_texture_basisu,\n GLTF_EXT_meshopt_compression,\n GLTF_EXT_texture_webp,\n GLTF_EXT_feature_metadata\n} from './lib/types/gltf-types';\n\n// glTF loader/writer definition objects\nexport {GLTFLoader} from './gltf-loader';\nexport {GLTFWriter} from './gltf-writer';\n\n// GLB Loader & Writer (for custom formats that want to leverage the GLB binary \"envelope\")\nexport {GLBLoader} from './glb-loader';\nexport {GLBWriter} from './glb-writer';\n\n// glTF Data Access Helper Class\nexport {default as GLTFScenegraph} from './lib/api/gltf-scenegraph';\nexport {postProcessGLTF} from './lib/api/post-process-gltf';\nexport type {Mesh} from './lib/types/gltf-json-schema';\nexport type {GLTFObject} from './lib/types/gltf-types';\n"],"file":"index.js"}
|
|
@@ -6,7 +6,8 @@ import * as KHR_texture_transform from '../extensions/KHR_texture_transform';
|
|
|
6
6
|
import * as KHR_lights_punctual from '../extensions/deprecated/KHR_lights_punctual';
|
|
7
7
|
import * as KHR_materials_unlit from '../extensions/deprecated/KHR_materials_unlit';
|
|
8
8
|
import * as KHR_techniques_webgl from '../extensions/deprecated/KHR_techniques_webgl';
|
|
9
|
-
|
|
9
|
+
import * as EXT_feature_metadata from '../extensions/deprecated/EXT_feature_metadata';
|
|
10
|
+
export const EXTENSIONS = [EXT_meshopt_compression, EXT_texture_webp, KHR_texture_basisu, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_unlit, KHR_techniques_webgl, KHR_texture_transform, EXT_feature_metadata];
|
|
10
11
|
export function preprocessExtensions(gltf, options = {}, context) {
|
|
11
12
|
const extensions = EXTENSIONS.filter(extension => useExtension(extension.name, options));
|
|
12
13
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api/gltf-extensions.ts"],"names":["EXT_meshopt_compression","EXT_texture_webp","KHR_texture_basisu","KHR_draco_mesh_compression","KHR_texture_transform","KHR_lights_punctual","KHR_materials_unlit","KHR_techniques_webgl","EXTENSIONS","preprocessExtensions","gltf","options","context","extensions","filter","extension","useExtension","name","preprocess","decodeExtensions","decode","extensionName","excludes","excludeExtensions","exclude"],"mappings":"AAQA,OAAO,KAAKA,uBAAZ,MAAyC,uCAAzC;AACA,OAAO,KAAKC,gBAAZ,MAAkC,gCAAlC;AACA,OAAO,KAAKC,kBAAZ,MAAoC,kCAApC;AACA,OAAO,KAAKC,0BAAZ,MAA4C,0CAA5C;AACA,OAAO,KAAKC,qBAAZ,MAAuC,qCAAvC;AAGA,OAAO,KAAKC,mBAAZ,MAAqC,8CAArC;AACA,OAAO,KAAKC,mBAAZ,MAAqC,8CAArC;AACA,OAAO,KAAKC,oBAAZ,MAAsC,+CAAtC;AAuBA,OAAO,MAAMC,UAAiC,GAAG,CAM/
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/api/gltf-extensions.ts"],"names":["EXT_meshopt_compression","EXT_texture_webp","KHR_texture_basisu","KHR_draco_mesh_compression","KHR_texture_transform","KHR_lights_punctual","KHR_materials_unlit","KHR_techniques_webgl","EXT_feature_metadata","EXTENSIONS","preprocessExtensions","gltf","options","context","extensions","filter","extension","useExtension","name","preprocess","decodeExtensions","decode","extensionName","excludes","excludeExtensions","exclude"],"mappings":"AAQA,OAAO,KAAKA,uBAAZ,MAAyC,uCAAzC;AACA,OAAO,KAAKC,gBAAZ,MAAkC,gCAAlC;AACA,OAAO,KAAKC,kBAAZ,MAAoC,kCAApC;AACA,OAAO,KAAKC,0BAAZ,MAA4C,0CAA5C;AACA,OAAO,KAAKC,qBAAZ,MAAuC,qCAAvC;AAGA,OAAO,KAAKC,mBAAZ,MAAqC,8CAArC;AACA,OAAO,KAAKC,mBAAZ,MAAqC,8CAArC;AACA,OAAO,KAAKC,oBAAZ,MAAsC,+CAAtC;AACA,OAAO,KAAKC,oBAAZ,MAAsC,+CAAtC;AAuBA,OAAO,MAAMC,UAAiC,GAAG,CAM/CT,uBAN+C,EAO/CC,gBAP+C,EAS/CC,kBAT+C,EAU/CC,0BAV+C,EAW/CE,mBAX+C,EAY/CC,mBAZ+C,EAa/CC,oBAb+C,EAc/CH,qBAd+C,EAe/CI,oBAf+C,CAA1C;AAmBP,OAAO,SAASE,oBAAT,CAA8BC,IAA9B,EAAoCC,OAA0B,GAAG,EAAjE,EAAqEC,OAArE,EAA+E;AACpF,QAAMC,UAAU,GAAGL,UAAU,CAACM,MAAX,CAAmBC,SAAD,IAAeC,YAAY,CAACD,SAAS,CAACE,IAAX,EAAiBN,OAAjB,CAA7C,CAAnB;;AACA,OAAK,MAAMI,SAAX,IAAwBF,UAAxB,EAAoC;AAAA;;AAClC,6BAAAE,SAAS,CAACG,UAAV,qFAAAH,SAAS,EAAcL,IAAd,EAAoBC,OAApB,EAA6BC,OAA7B,CAAT;AACD;AACF;AAGD,OAAO,eAAeO,gBAAf,CAAgCT,IAAhC,EAAsCC,OAA0B,GAAG,EAAnE,EAAuEC,OAAvE,EAAiF;AACtF,QAAMC,UAAU,GAAGL,UAAU,CAACM,MAAX,CAAmBC,SAAD,IAAeC,YAAY,CAACD,SAAS,CAACE,IAAX,EAAiBN,OAAjB,CAA7C,CAAnB;;AACA,OAAK,MAAMI,SAAX,IAAwBF,UAAxB,EAAoC;AAAA;;AAGlC,gCAAME,SAAS,CAACK,MAAhB,sDAAM,uBAAAL,SAAS,EAAUL,IAAV,EAAgBC,OAAhB,EAAyBC,OAAzB,CAAf;AACD;AACF;;AAED,SAASI,YAAT,CAAsBK,aAAtB,EAA6CV,OAA7C,EAAyE;AAAA;;AACvE,QAAMW,QAAQ,GAAG,CAAAX,OAAO,SAAP,IAAAA,OAAO,WAAP,6BAAAA,OAAO,CAAED,IAAT,gEAAea,iBAAf,KAAoC,EAArD;AACA,QAAMC,OAAO,GAAGH,aAAa,IAAIC,QAAjB,IAA6B,CAACA,QAAQ,CAACD,aAAD,CAAtD;AACA,SAAO,CAACG,OAAR;AACD","sourcesContent":["/* eslint-disable camelcase */\nimport {GLTF} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\n// GLTF 1.0 extensions (decode only)\n// import * as KHR_binary_gltf from './KHR_draco_mesh_compression';\n\n// GLTF 2.0 Khronos extensions (decode/encode)\nimport * as EXT_meshopt_compression from '../extensions/EXT_meshopt_compression';\nimport * as EXT_texture_webp from '../extensions/EXT_texture_webp';\nimport * as KHR_texture_basisu from '../extensions/KHR_texture_basisu';\nimport * as KHR_draco_mesh_compression from '../extensions/KHR_draco_mesh_compression';\nimport * as KHR_texture_transform from '../extensions/KHR_texture_transform';\n\n// Deprecated. These should be handled by rendering library (e.g. luma.gl), not the loader.\nimport * as KHR_lights_punctual from '../extensions/deprecated/KHR_lights_punctual';\nimport * as KHR_materials_unlit from '../extensions/deprecated/KHR_materials_unlit';\nimport * as KHR_techniques_webgl from '../extensions/deprecated/KHR_techniques_webgl';\nimport * as EXT_feature_metadata from '../extensions/deprecated/EXT_feature_metadata';\n\n// Vendor extensions\n\ntype GLTFExtensionPlugin = {\n name: string;\n preprocess?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions, context) => void;\n decode?: (\n gltfData: {\n json: GLTF;\n buffers: {arrayBuffer: ArrayBuffer; byteOffset: number; byteLength: number}[];\n },\n options: GLTFLoaderOptions,\n context\n ) => Promise<void>;\n encode?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions) => void;\n};\n\n/**\n * List of extensions processed by the GLTFLoader\n * Note that may extensions can only be handled on the rendering stage and are left out here\n * These are just extensions that can be handled fully or partially during loading.\n */\nexport const EXTENSIONS: GLTFExtensionPlugin[] = [\n // 1.0\n // KHR_binary_gltf is handled separately - must be processed before other parsing starts\n // KHR_binary_gltf,\n\n // 2.0\n EXT_meshopt_compression,\n EXT_texture_webp,\n // Basisu should come after webp, we want basisu to be preferred if both are provided\n KHR_texture_basisu,\n KHR_draco_mesh_compression,\n KHR_lights_punctual,\n KHR_materials_unlit,\n KHR_techniques_webgl,\n KHR_texture_transform,\n EXT_feature_metadata\n];\n\n/** Call before any resource loading starts */\nexport function preprocessExtensions(gltf, options: GLTFLoaderOptions = {}, context?) {\n const extensions = EXTENSIONS.filter((extension) => useExtension(extension.name, options));\n for (const extension of extensions) {\n extension.preprocess?.(gltf, options, context);\n }\n}\n\n/** Call after resource loading */\nexport async function decodeExtensions(gltf, options: GLTFLoaderOptions = {}, context?) {\n const extensions = EXTENSIONS.filter((extension) => useExtension(extension.name, options));\n for (const extension of extensions) {\n // Note: We decode async extensions sequentially, this might not be necessary\n // Currently we only have Draco, but when we add Basis we may revisit\n await extension.decode?.(gltf, options, context);\n }\n}\n\nfunction useExtension(extensionName: string, options: GLTFLoaderOptions) {\n const excludes = options?.gltf?.excludeExtensions || {};\n const exclude = extensionName in excludes && !excludes[extensionName];\n return !exclude;\n}\n"],"file":"gltf-extensions.js"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import GLTFScenegraph from '../../api/gltf-scenegraph';
|
|
2
|
+
const EXT_FEATURE_METADATA = 'EXT_feature_metadata';
|
|
3
|
+
export const name = EXT_FEATURE_METADATA;
|
|
4
|
+
export async function decode(gltfData) {
|
|
5
|
+
const scenegraph = new GLTFScenegraph(gltfData);
|
|
6
|
+
decodeExtFeatureMetadata(scenegraph);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function decodeExtFeatureMetadata(scenegraph) {
|
|
10
|
+
var _extension$schema;
|
|
11
|
+
|
|
12
|
+
const extension = scenegraph.getExtension(EXT_FEATURE_METADATA);
|
|
13
|
+
const schemaClasses = extension === null || extension === void 0 ? void 0 : (_extension$schema = extension.schema) === null || _extension$schema === void 0 ? void 0 : _extension$schema.classes;
|
|
14
|
+
const featureTables = extension === null || extension === void 0 ? void 0 : extension.featureTables;
|
|
15
|
+
const featureTextures = extension === null || extension === void 0 ? void 0 : extension.featureTextures;
|
|
16
|
+
|
|
17
|
+
if (featureTextures) {
|
|
18
|
+
console.warn('featureTextures is not yet supported in the "EXT_feature_metadata" extension.');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (schemaClasses && featureTables) {
|
|
22
|
+
for (const schemaName in schemaClasses) {
|
|
23
|
+
const schemaClass = schemaClasses[schemaName];
|
|
24
|
+
const featureTable = findFeatureTableByName(featureTables, schemaName);
|
|
25
|
+
|
|
26
|
+
if (featureTable) {
|
|
27
|
+
handleFeatureTableProperties(scenegraph, featureTable, schemaClass);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function handleFeatureTableProperties(scenegraph, featureTable, schemaClass) {
|
|
34
|
+
for (const propertyName in schemaClass.properties) {
|
|
35
|
+
var _featureTable$propert;
|
|
36
|
+
|
|
37
|
+
const schemaProperty = schemaClass.properties[propertyName];
|
|
38
|
+
const featureTableProperty = featureTable === null || featureTable === void 0 ? void 0 : (_featureTable$propert = featureTable.properties) === null || _featureTable$propert === void 0 ? void 0 : _featureTable$propert[propertyName];
|
|
39
|
+
const numberOfFeatures = featureTable.count;
|
|
40
|
+
|
|
41
|
+
if (featureTableProperty) {
|
|
42
|
+
const data = getPropertyDataFromBinarySource(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty);
|
|
43
|
+
featureTableProperty.data = data;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getPropertyDataFromBinarySource(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty) {
|
|
49
|
+
const bufferView = featureTableProperty.bufferView;
|
|
50
|
+
let data = scenegraph.getTypedArrayForBufferView(bufferView);
|
|
51
|
+
|
|
52
|
+
switch (schemaProperty.type) {
|
|
53
|
+
case 'STRING':
|
|
54
|
+
{
|
|
55
|
+
const stringOffsetBufferView = featureTableProperty.stringOffsetBufferView;
|
|
56
|
+
const offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);
|
|
57
|
+
data = getStringAttributes(data, offsetsData, numberOfFeatures);
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
default:
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return data;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function findFeatureTableByName(featureTables, schemaClassName) {
|
|
68
|
+
for (const featureTableName in featureTables) {
|
|
69
|
+
const featureTable = featureTables[featureTableName];
|
|
70
|
+
|
|
71
|
+
if (featureTable.class === schemaClassName) {
|
|
72
|
+
return featureTable;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function getStringAttributes(data, offsetsData, stringsCount) {
|
|
80
|
+
const stringsArray = [];
|
|
81
|
+
const textDecoder = new TextDecoder('utf8');
|
|
82
|
+
let stringOffset = 0;
|
|
83
|
+
const bytesPerStringSize = 4;
|
|
84
|
+
|
|
85
|
+
for (let index = 0; index < stringsCount; index++) {
|
|
86
|
+
const stringByteSize = offsetsData[(index + 1) * bytesPerStringSize] - offsetsData[index * bytesPerStringSize];
|
|
87
|
+
const stringData = data.subarray(stringOffset, stringByteSize + stringOffset);
|
|
88
|
+
const stringAttribute = textDecoder.decode(stringData);
|
|
89
|
+
stringsArray.push(stringAttribute);
|
|
90
|
+
stringOffset += stringByteSize;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return stringsArray;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=EXT_feature_metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/extensions/deprecated/EXT_feature_metadata.ts"],"names":["GLTFScenegraph","EXT_FEATURE_METADATA","name","decode","gltfData","scenegraph","decodeExtFeatureMetadata","extension","getExtension","schemaClasses","schema","classes","featureTables","featureTextures","console","warn","schemaName","schemaClass","featureTable","findFeatureTableByName","handleFeatureTableProperties","propertyName","properties","schemaProperty","featureTableProperty","numberOfFeatures","count","data","getPropertyDataFromBinarySource","bufferView","getTypedArrayForBufferView","type","stringOffsetBufferView","offsetsData","getStringAttributes","schemaClassName","featureTableName","class","stringsCount","stringsArray","textDecoder","TextDecoder","stringOffset","bytesPerStringSize","index","stringByteSize","stringData","subarray","stringAttribute","push"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\nimport type {GLTF} from '../../types/gltf-types';\n\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\nimport {\n ClassProperty,\n EXT_feature_metadata_class_object,\n EXT_feature_metadata_feature_table,\n FeatureTableProperty,\n GLTF_EXT_feature_metadata\n} from '../../types/gltf-json-schema';\n\n/** Extension name */\nconst EXT_FEATURE_METADATA = 'EXT_feature_metadata';\n\nexport const name = EXT_FEATURE_METADATA;\n\nexport async function decode(gltfData: {json: GLTF}): Promise<void> {\n const scenegraph = new GLTFScenegraph(gltfData);\n decodeExtFeatureMetadata(scenegraph);\n}\n\n/**\n * Decodes feature metadata from extension\n * @param scenegraph\n */\nfunction decodeExtFeatureMetadata(scenegraph: GLTFScenegraph): void {\n const extension: GLTF_EXT_feature_metadata | null = scenegraph.getExtension(EXT_FEATURE_METADATA);\n const schemaClasses = extension?.schema?.classes;\n const featureTables = extension?.featureTables;\n const featureTextures = extension?.featureTextures;\n\n if (featureTextures) {\n /*\n * TODO add support for featureTextures\n * Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#feature-textures\n */\n // eslint-disable-next-line no-console\n console.warn('featureTextures is not yet supported in the \"EXT_feature_metadata\" extension.');\n }\n\n if (schemaClasses && featureTables) {\n for (const schemaName in schemaClasses) {\n const schemaClass = schemaClasses[schemaName];\n const featureTable = findFeatureTableByName(featureTables, schemaName);\n\n if (featureTable) {\n handleFeatureTableProperties(scenegraph, featureTable, schemaClass);\n }\n }\n }\n}\n\n/**\n * Navigate throw all properies in feature table and gets properties data.\n * @param scenegraph\n * @param featureTable\n * @param schemaClass\n */\nfunction handleFeatureTableProperties(\n scenegraph: GLTFScenegraph,\n featureTable: EXT_feature_metadata_feature_table,\n schemaClass: EXT_feature_metadata_class_object\n): void {\n for (const propertyName in schemaClass.properties) {\n const schemaProperty = schemaClass.properties[propertyName];\n const featureTableProperty = featureTable?.properties?.[propertyName];\n const numberOfFeatures = featureTable.count;\n\n if (featureTableProperty) {\n const data = getPropertyDataFromBinarySource(\n scenegraph,\n schemaProperty,\n numberOfFeatures,\n featureTableProperty\n );\n featureTableProperty.data = data;\n }\n }\n}\n\n/**\n * Decode properties from binary sourse based on property type.\n * @param scenegraph\n * @param schemaProperty\n * @param numberOfFeatures\n * @param featureTableProperty\n */\nfunction getPropertyDataFromBinarySource(\n scenegraph: GLTFScenegraph,\n schemaProperty: ClassProperty,\n numberOfFeatures: number,\n featureTableProperty: FeatureTableProperty\n): Uint8Array | string[] {\n const bufferView = featureTableProperty.bufferView;\n // TODO think maybe we shouldn't get data only in Uint8Array format.\n let data: Uint8Array | string[] = scenegraph.getTypedArrayForBufferView(bufferView);\n\n switch (schemaProperty.type) {\n case 'STRING': {\n // stringOffsetBufferView should be available for string type.\n const stringOffsetBufferView = featureTableProperty.stringOffsetBufferView!;\n const offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);\n data = getStringAttributes(data, offsetsData, numberOfFeatures);\n break;\n }\n default:\n }\n\n return data;\n}\n\n/**\n * Find the feature table by class name.\n * @param featureTables\n * @param schemaClassName\n */\nfunction findFeatureTableByName(\n featureTables: {[key: string]: EXT_feature_metadata_feature_table},\n schemaClassName: string\n): EXT_feature_metadata_feature_table | null {\n for (const featureTableName in featureTables) {\n const featureTable = featureTables[featureTableName];\n\n if (featureTable.class === schemaClassName) {\n return featureTable;\n }\n }\n\n return null;\n}\n\n/**\n * Getting string attributes from binary data.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata#strings\n * @param data\n * @param offsetsData\n * @param stringsCount\n */\nfunction getStringAttributes(\n data: Uint8Array,\n offsetsData: Uint8Array,\n stringsCount: number\n): string[] {\n const stringsArray: string[] = [];\n const textDecoder = new TextDecoder('utf8');\n\n let stringOffset = 0;\n const bytesPerStringSize = 4;\n\n for (let index = 0; index < stringsCount; index++) {\n // TODO check if it is multiplication on bytesPerStringSize is valid operation?\n const stringByteSize =\n offsetsData[(index + 1) * bytesPerStringSize] - offsetsData[index * bytesPerStringSize];\n const stringData = data.subarray(stringOffset, stringByteSize + stringOffset);\n const stringAttribute = textDecoder.decode(stringData);\n\n stringsArray.push(stringAttribute);\n stringOffset += stringByteSize;\n }\n\n return stringsArray;\n}\n"],"file":"EXT_feature_metadata.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = typeof "3.3.0-alpha.
|
|
1
|
+
export const VERSION = typeof "3.3.0-alpha.2" !== 'undefined' ? "3.3.0-alpha.2" : 'latest';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { GLB } from './lib/types/glb-types';
|
|
2
|
-
export type { GLTF, GLTFAccessor, GLTFBuffer, GLTFBufferView, GLTFMeshPrimitive, GLTFMesh, GLTFNode, GLTFMaterial, GLTFSampler, GLTFScene, GLTFSkin, GLTFTexture, GLTFImage, GLTFPostprocessed, GLTFNodePostprocessed, GLTFMaterialPostprocessed, GLTFImagePostprocessed, GLTF_KHR_binary_glTF, GLTF_KHR_draco_mesh_compression, GLTF_KHR_texture_basisu, GLTF_EXT_meshopt_compression, GLTF_EXT_texture_webp } from './lib/types/gltf-types';
|
|
2
|
+
export type { GLTF, GLTFAccessor, GLTFBuffer, GLTFBufferView, GLTFMeshPrimitive, GLTFMesh, GLTFNode, GLTFMaterial, GLTFSampler, GLTFScene, GLTFSkin, GLTFTexture, GLTFImage, GLTFPostprocessed, GLTFNodePostprocessed, GLTFMaterialPostprocessed, GLTFImagePostprocessed, GLTF_KHR_binary_glTF, GLTF_KHR_draco_mesh_compression, GLTF_KHR_texture_basisu, GLTF_EXT_meshopt_compression, GLTF_EXT_texture_webp, GLTF_EXT_feature_metadata } from './lib/types/gltf-types';
|
|
3
3
|
export { GLTFLoader } from './gltf-loader';
|
|
4
4
|
export { GLTFWriter } from './gltf-writer';
|
|
5
5
|
export { GLBLoader } from './glb-loader';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAC,GAAG,EAAC,MAAM,uBAAuB,CAAC;AAC/C,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EAEtB,oBAAoB,EACpB,+BAA+B,EAC/B,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAC,GAAG,EAAC,MAAM,uBAAuB,CAAC;AAC/C,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EAEtB,oBAAoB,EACpB,+BAA+B,EAC/B,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5D,YAAY,EAAC,IAAI,EAAC,MAAM,8BAA8B,CAAC;AACvD,YAAY,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gltf-extensions.d.ts","sourceRoot":"","sources":["../../../src/lib/api/gltf-extensions.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AACzC,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"gltf-extensions.d.ts","sourceRoot":"","sources":["../../../src/lib/api/gltf-extensions.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AACzC,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAoBzD,aAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAC,IAAI,EAAE,IAAI,CAAA;KAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,KAAA,KAAK,IAAI,CAAC;IACnF,MAAM,CAAC,EAAE,CACP,QAAQ,EAAE;QACR,IAAI,EAAE,IAAI,CAAC;QACX,OAAO,EAAE;YAAC,WAAW,EAAE,WAAW,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAC,EAAE,CAAC;KAC/E,EACD,OAAO,EAAE,iBAAiB,EAC1B,OAAO,KAAA,KACJ,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAC,IAAI,EAAE,IAAI,CAAA;KAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,mBAAmB,EAgB3C,CAAC;AAEF,8CAA8C;AAC9C,wBAAgB,oBAAoB,CAAC,IAAI,KAAA,EAAE,OAAO,GAAE,iBAAsB,EAAE,OAAO,CAAC,KAAA,QAKnF;AAED,kCAAkC;AAClC,wBAAsB,gBAAgB,CAAC,IAAI,KAAA,EAAE,OAAO,GAAE,iBAAsB,EAAE,OAAO,CAAC,KAAA,iBAOrF"}
|