Module: Zodra::Export

Defined in:
lib/zodra/export.rb,
lib/zodra/export/writer.rb,
lib/zodra/export/zod_mapper.rb,
lib/zodra/export/type_analysis.rb,
lib/zodra/export/contract_mapper.rb,
lib/zodra/export/surface_resolver.rb,
lib/zodra/export/type_script_mapper.rb

Defined Under Namespace

Classes: ContractMapper, SurfaceResolver, TypeAnalysis, TypeScriptMapper, Writer, ZodMapper

Constant Summary collapse

MAPPERS =
{
  typescript: TypeScriptMapper,
  zod: ZodMapper
}.freeze

Class Method Summary collapse

Class Method Details

.generate(format, key_format: :camel, zod_import: 'zod') ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/zodra/export.rb', line 10

def self.generate(format, key_format: :camel, zod_import: 'zod')
  mapper_class = MAPPERS.fetch(format) do
    raise ConfigurationError, "Unknown export format: #{format}. Available: #{MAPPERS.keys.join(', ')}"
  end

  mapper = mapper_class.new(key_format:)
  contracts = ContractRegistry.global.to_a

  definitions = SurfaceResolver.call(TypeRegistry.global.to_a, contracts)
  analysis = TypeAnalysis.call(definitions)

  parts = []
  parts << "import { z } from '#{zod_import}';" if format == :zod
  parts << mapper.map_definitions(analysis.sorted, cycles: analysis.cycles)
  parts << mapper.map_contracts(contracts) unless contracts.empty?
  parts.reject(&:empty?).join("\n\n")
end

.generate_contractsObject



28
29
30
31
32
33
# File 'lib/zodra/export.rb', line 28

def self.generate_contracts
  contracts = ContractRegistry.global.to_a
  api_definitions = ApiRegistry.global.to_a

  ContractMapper.new(api_definitions, contracts).generate
end