Skip to content

Releases: SylphxAI/spectra

v2.0.0 - Spectra

29 Nov 12:49

Choose a tag to compare

Spectra 2.0.0

Major refactor from SotiSchema to Spectra with new architecture.

Breaking Changes

  • Package renamed: soti_schemaspectra
  • Main annotation: @SotiSchema()@Spectra()
  • Output marker: @jsonSchema@spectraOutput
  • Builder: soti_schema|soti_schemaspectra|spectra

New Features

Multi-format Output

  • JSON Schema (Draft-07, 2019-09, 2020-12)
  • OpenAPI (3.0, 3.1)
  • Protocol Buffers (proto3)

Comprehensive Constraints

  • String: minLength, maxLength, pattern, format (14 formats)
  • Number: minimum, maximum, exclusiveMin/Max, multipleOf
  • Array: minItems, maxItems, uniqueItems

Union Types

  • Full support for Freezed sealed classes
  • Generates oneOf with discriminator

Rich Annotations

@Spectra(title: 'User', formats: {SpectraFormat.jsonSchema})
class User {
  @Field(minLength: 1, format: StringFormat.email)
  final String email;
  
  @Ignore()
  final String internal;
}

Bug Fixes

  • Fixed $ref string interpolation (was outputting literal $typeName)
  • Fixed enum handling (was never being called)
  • Fixed nullable type support

Architecture

New modular design: Extractor → TypeSpec IR → Emitter

lib/src/
├── annotations/    # @Spectra, @Field, @Ignore
├── spec/          # TypeSpec IR (sealed classes)
├── extractors/    # Freezed, JsonSerializable, PlainDart
├── emitters/      # JsonSchema, OpenAPI, Protobuf
└── generator/     # SpectraGenerator

Test Coverage

  • 94.2% coverage (175 tests)
  • emitter.dart: 100%
  • string_utils.dart: 100%
  • json_schema_emitter.dart: 98.3%

Migration

See MIGRATION.md for upgrade guide.