function GltfStructuralMetadataLoader(options) {
  options = options ?? Frozen.EMPTY_OBJECT;
  const {
    gltf,
    extension,
    extensionLegacy,
    gltfResource,
    baseResource,
    supportedImageFormats,
    frameState,
    cacheKey,
    asynchronous = true,
  } = options;

  //>>includeStart('debug', pragmas.debug);
  Check.typeOf.object("options.gltf", gltf);
  Check.typeOf.object("options.gltfResource", gltfResource);
  Check.typeOf.object("options.baseResource", baseResource);
  Check.typeOf.object("options.supportedImageFormats", supportedImageFormats);
  Check.typeOf.object("options.frameState", frameState);

  if (!defined(options.extension) && !defined(options.extensionLegacy)) {
    throw new DeveloperError(
      "One of options.extension or options.extensionLegacy must be specified",
    );
  }
  //>>includeEnd('debug');

  this._gltfResource = gltfResource;
  this._baseResource = baseResource;
  this._gltf = gltf;
  this._extension = extension;
  this._extensionLegacy = extensionLegacy;
  this._supportedImageFormats = supportedImageFormats;
  this._frameState = frameState;
  this._cacheKey = cacheKey;
  this._asynchronous = asynchronous;
  this._bufferViewLoaders = [];
  this._bufferViewIds = [];
  this._textureLoaders = [];
  this._textureIds = [];
  this._schemaLoader = undefined;
  this._structuralMetadata = undefined;
  this._state = ResourceLoaderState.UNLOADED;
  this._promise = undefined;
}
Loads glTF structural metadata
<p>
Implements the {@link ResourceLoader} interface.
</p>

@alias GltfStructuralMetadataLoader
@constructor
@augments ResourceLoader

@param {object} options Object with the following properties:
@param {object} options.gltf The glTF JSON.
@param {string} [options.extension] The <code>EXT_structural_metadata</code> extension object. If this is undefined, then extensionLegacy must be defined.
@param {string} [options.extensionLegacy] The legacy <code>EXT_feature_metadata</code> extension for backwards compatibility.
@param {Resource} options.gltfResource The {@link Resource} containing the glTF.
@param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.
@param {SupportedImageFormats} options.supportedImageFormats The supported image formats.
@param {FrameState} options.frameState The frame state.
@param {string} [options.cacheKey] The cache key of the resource.
@param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.

@private
@experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.