@mapbox/mapbox-gl-style-spec
Version:
a specification for mapbox gl styles
246 lines (229 loc) • 6.54 kB
text/typescript
import v8 from './reference/v8.json';
import latest from './reference/latest';
import format from './format';
import migrate from './migrate';
import composite from './composite';
import derefLayers from './deref';
import diff from './diff';
import ValidationError from './error/validation_error';
import ParsingError from './error/parsing_error';
import {StyleExpression, isExpression, createExpression, createPropertyExpression, normalizePropertyExpression, ZoomConstantExpression, ZoomDependentExpression, StylePropertyFunction} from './expression/index';
import featureFilter, {isExpressionFilter} from './feature_filter/index';
import convertFilter from './feature_filter/convert';
import Color from './util/color';
import {createFunction, isFunction} from './function/index';
import convertFunction from './function/convert';
import {eachSource, eachLayer, eachProperty} from './visit';
import validate from './validate_style';
import validateMapboxApiSupported from './validate_mapbox_api_supported';
type ExpressionType = 'data-driven' | 'color-ramp' | 'data-constant' | 'constant';
type ExpressionParameter =
| 'zoom'
| 'pitch'
| 'feature'
| 'raster-value'
| 'feature-state'
| 'line-progress'
| 'measure-light'
| 'heatmap-density'
| 'sky-radial-progress'
| 'distance-from-center'
| 'raster-particle-speed';
export type ExpressionSpecification = {
interpolated: boolean,
parameters?: ExpressionParameter[],
relaxZoomRestriction?: boolean
};
export type ArrayPropertySpecification =
{
type: 'array';
'property-type': ExpressionType;
value: 'enum';
expression?: ExpressionSpecification,
transition?: boolean,
default?: string[],
length?: number,
values?: {[_: string]: unknown},
experimental?: boolean,
private?: boolean,
requires?: unknown,
appearance?: boolean,
tokens?: never,
minimum?: never,
maximum?: never,
} | {
type: 'array';
'property-type': ExpressionType;
value: 'number';
expression?: ExpressionSpecification;
transition?: boolean;
default?: number[];
minimum?: number;
maximum?: number;
length?: number;
period?: number;
units?: string;
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
tokens?: never;
values?: never;
} | {
type: 'array';
'property-type': ExpressionType;
value: 'string';
expression?: ExpressionSpecification;
transition?: boolean;
default?: string[];
length?: number;
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
tokens?: never;
minimum?: never;
maximum?: never;
values?: never;
};
export type BooleanPropertySpecification = {
type: 'boolean';
'property-type': ExpressionType;
expression?: ExpressionSpecification;
transition?: boolean;
default?: boolean;
overridable?: boolean;
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
tokens?: never;
};
export type ColorPropertySpecification = {
type: 'color';
'property-type': ExpressionType;
expression?: ExpressionSpecification;
transition?: boolean;
default?: string;
'use-theme'?: boolean;
overridable?: boolean;
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
tokens?: never;
};
export type EnumPropertySpecification = {
type: 'enum';
'property-type': ExpressionType;
expression?: ExpressionSpecification;
transition?: boolean;
default?: string;
values?: {[_: string]: unknown};
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
tokens?: never;
};
export type FormattedPropertySpecification = {
type: 'formatted';
'property-type': ExpressionType;
expression?: ExpressionSpecification;
transition?: boolean;
default?: string;
tokens?: boolean;
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
};
export type NumberPropertySpecification = {
type: 'number';
'property-type': ExpressionType;
expression?: ExpressionSpecification;
transition?: boolean;
default?: number;
minimum?: number;
maximum?: number;
period?: number;
units?: string;
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
tokens?: never;
};
export type ResolvedImagePropertySpecification = {
type: 'resolvedImage';
'property-type': ExpressionType;
expression?: ExpressionSpecification;
transition?: boolean;
default?: string;
tokens?: boolean;
'use-theme'?: boolean;
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
};
export type StringPropertySpecification = {
type: 'string';
'property-type': ExpressionType;
expression?: ExpressionSpecification;
transition?: boolean;
default?: string;
tokens?: boolean;
experimental?: boolean;
private?: boolean;
requires?: unknown;
appearance?: boolean;
};
/**
* A style property specification is used to describe a value of some style property reference in the v8.json
*/
export type StylePropertySpecification =
| ArrayPropertySpecification
| BooleanPropertySpecification
| ColorPropertySpecification
| EnumPropertySpecification
| FormattedPropertySpecification
| NumberPropertySpecification
| ResolvedImagePropertySpecification
| StringPropertySpecification;
const expression = {
StyleExpression,
isExpression,
isExpressionFilter,
createExpression,
createPropertyExpression,
normalizePropertyExpression,
ZoomConstantExpression,
ZoomDependentExpression,
StylePropertyFunction
};
const styleFunction = {
convertFunction,
createFunction,
isFunction
};
const visit = {eachSource, eachLayer, eachProperty};
export {
v8,
latest,
format,
migrate,
composite,
derefLayers,
diff,
ValidationError,
ParsingError,
expression,
featureFilter,
convertFilter,
Color,
styleFunction as function,
validate,
validateMapboxApiSupported,
visit
};