or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

configuration.mdindex.mdjson-conversion.mdtransport.md
tile.json

json-conversion.mddocs/

JSON Conversion

Core functionality for converting JSON configurations into deck.gl layer props with class instantiation, function parsing, and constant resolution.

Capabilities

JSONConverter Class

Main converter class that processes JSON configurations and converts them into JavaScript objects suitable for deck.gl.

/**
 * Main converter class for processing JSON configurations into deck.gl props
 */
class JSONConverter {
  constructor(props: JSONConverterProps);
  
  /** 
   * Converts JSON to deck.gl props, handling class instantiation, function parsing, and constant resolution
   * @param json - JSON configuration to convert (object or JSON string)
   * @returns Converted JavaScript objects ready for deck.gl
   */
  convert(json: any): any;
  
  /** 
   * Updates converter configuration and callbacks
   * @param props - New properties to set
   */
  setProps(props: JSONConverterProps): void;
  
  /**
   * Merges additional configuration into existing configuration
   * @param config - Configuration object to merge
   */
  mergeConfiguration(config: any): void;
  
  /** Cleanup method for resource disposal */
  finalize(): void;
  
  /** @deprecated Use convert() instead */
  convertJson(json: any): any;
}

interface JSONConverterProps {
  /** Configuration object or JSONConfiguration instance */
  configuration: JSONConfiguration | Record<string, any>;
  /** Optional callback triggered when JSON changes */
  onJSONChange?: Function;
}

Usage Examples:

import { JSONConverter, JSONConfiguration } from "@deck.gl/json";
import { ScatterplotLayer } from "@deck.gl/layers";

// Basic conversion
const converter = new JSONConverter({
  configuration: {
    classes: { ScatterplotLayer }
  }
});

const jsonConfig = {
  "layers": [{
    "@@type": "ScatterplotLayer",
    "id": "my-layer",
    "data": []
  }]
};

const result = converter.convert(jsonConfig);
// Returns: { layers: [ScatterplotLayerInstance] }

// With JSON string input
const jsonString = JSON.stringify(jsonConfig);
const result2 = converter.convert(jsonString);

// Merging additional configuration
converter.mergeConfiguration({
  constants: { MY_CONSTANT: 42 }
});

Conversion Features

The JSONConverter supports several special conversion features:

Class Instantiation

Objects with @@type property are instantiated as classes:

// JSON input
{
  "@@type": "ScatterplotLayer",
  "id": "layer-1",
  "data": []
}

// Converts to: new ScatterplotLayer({ id: "layer-1", data: [] })

Function Conversion

String values starting with @@= are converted to functions:

// JSON input
{
  "getRadius": "@@=d => d.radius * 2"
}

// Converts to: { getRadius: (d) => d.radius * 2 }

Constant Resolution

String values starting with @@# resolve to constants or enums:

// JSON input
{
  "coordinateSystem": "@@#COORDINATE_SYSTEM.DEFAULT"
}

// Resolves to: { coordinateSystem: COORDINATE_SYSTEM.DEFAULT }

Function Objects

Objects with @@function property execute registered functions:

// JSON input
{
  "@@function": "calculateRadius",
  "base": 10,
  "multiplier": 2
}

// Executes: calculateRadius({ base: 10, multiplier: 2 })

Internal Conversion Process

The converter processes JSON recursively with the following steps:

  1. Parse JSON strings if input is a string
  2. Array processing - recursively convert each element
  3. Class instantiation - objects with @@type key
  4. Function objects - objects with @@function key
  5. Plain object processing - recursively convert all properties
  6. String conversion - handle function and constant identifiers
  7. Post-processing - apply any configured post-processing functions

Performance Features

  • Shallow equality checking - avoids re-converting identical JSON objects
  • Expression caching - parsed expressions are cached for reuse
  • Lazy evaluation - only converts when JSON actually changes

Error Handling

The converter includes built-in error handling:

  • Missing classes - logs warnings for unregistered class types
  • Missing functions - logs warnings for unregistered function names
  • Invalid expressions - throws errors for malformed expressions
  • Security protection - prevents function calls in expressions for safety
  • JSON parsing errors - handles malformed JSON strings gracefully
  • Circular references - avoids infinite recursion during conversion

Security Features

The converter implements several security measures:

  • Expression sandbox - Function expressions are evaluated in a limited context
  • Function call blocking - Prevents CallExpression nodes in parsed expressions
  • Safe property access - Uses controlled property access patterns
  • Input validation - Validates configuration objects before processing