import Map from '@arcgis/core/Map'; import { BasemapsModel } from 'map-basemaps-api/api'; import { MapWidgetModel, MapWidget } from 'map-widget/api'; /** * Interprets the map configuration. * * Use `"map-init.Interpreter"` to inject a reference to this interface. */ interface ConfigInterpreter { /** * Interprets a json config. * * @param config the json config input. * @example * * ```ts * const interpreter = ...; * const result = interpreter.interpret({map: {basemap: "streets"}}); * // create widget and model classes * const {mapWidget, mapWidgetModel, map, basemapsModel} = await result.toMapWidget(); * // alternative is to only create the model classes * const {mapWidgetModel, map, basemapsModel} = await result.toMapWidgetModel(); * ``` */ interpret(config: Record): InterpreterResult; } /** * The result of {@link InterpreterResult.toMapWidgetModel}. */ interface MapWidgetModelResult { /** * The map instance. */ map: Map; /** * The basemaps model. */ basemapsModel: BasemapsModel; /** * The map widget model. */ mapWidgetModel: MapWidgetModel; } /** * The result of {@link InterpreterResult.toMapWidget}. */ interface MapWidgetResult extends MapWidgetModelResult { /** * The map widget. */ mapWidget: MapWidget; } /** * The result of interpreting a json configuration using {@link ConfigInterpreter.interpret()}. */ interface InterpreterResult { /** * Returns the map, the basemaps model and finally the mapWidgetModel. */ toMapWidgetModel(): Promise; /** * Like {@link toMapWidgetModel}, but also creates a `MapWidget`. */ toMapWidget(): Promise; } export type { ConfigInterpreter, InterpreterResult, MapWidgetModelResult, MapWidgetResult };