@carbonenginejs/format-red
v0.1.1
Published
CarbonEngineJS Red format reader. Reads Red data - a type-discriminated, self-referential YAML object graph - and emits public payload JSON or caller-supplied classes.
Maintainers
Readme
@carbonenginejs/format-red
CarbonEngineJS-facing reader for Red data — a type-discriminated, self-referential
YAML object graph (type: per node, YAML anchors/aliases for shared references).
It emits a compact public payload by default, a cleaned raw graph, or
caller-supplied runtime classes through the @carbonenginejs/core-types
hydration adapter.
Any red or blue meta data should be stripped when publishing.
Provenance
CarbonEngine and Fenris Creations (CCP Games) are named in this package for
interoperability and schema-provenance context only. This package contains
CarbonEngineJS original code unless NOTICE is expanded; it is not affiliated
with or endorsed by CCP Games.
Public API
The package root exports one public class: CjsFormatRed.
import CjsFormatRed from "@carbonenginejs/format-red";
const red = new CjsFormatRed({
emit: "json", // "json"/"payload" (default) | "runtime" | "raw"
classes: { EveChildContainer, Tr2Effect, Tr2PointLight /* … by Red type */ },
});
const payload = red.Read(source); // compact public payload
const text = JSON.stringify(red.ToJSON(payload));source is either an already-parsed Red object graph, or a YAML string (parsed
with the optional yaml dependency, or an options.parse(text) function you
supply).
Static one-shot methods are also available:
const payload = CjsFormatRed.readPayload(source);
const runtime = CjsFormatRed.readRuntime(source, { classes });
const raw = CjsFormatRed.readRaw(source);
const summary = CjsFormatRed.inspect(source);Read modes
Read/readPayload— compact public payload: each node carries_type, repeated (aliased) nodes emit{ _reference: id }after the first full emission (which gains_idlazily), so the result is a JSON-safe tree.ReadRuntime/readRuntime— constructs caller classes (by Redtype) via the core-types hydration adapter: construct → applyValues → finalize, with shared nodes resolving to one instance. Provideclassesand/or aregistry; passadapter: createLifecycleAdapter()forSetValues/Initialize-style classes.ReadRaw/readRaw— the cleaned parsed graph (metadata stripped, typed tables decoded), shared references preserved by identity.Inspect/inspect— root type and atypehistogram, without building the object graph.
Typed tables
Red's compact columnar encoding ({ structure, items }, used by curve keys,
effect options, and samplerOverrides) decodes to an array of row objects
keyed by column name — e.g. curve keys become
[{ time, value, leftTangent, rightTangent, id, interpolation, tangentType }, …].
Options
emit,schema,classes,registry,familyadapter/adapters— hydration adapter(s) (see@carbonenginejs/core-types)parse—(text) => objectYAML parser overridepayloadTypeField/payloadIdField/payloadReferenceField— default_type/_id/_reference; set tofalseto omit.
Baseline Checks
npm test
npm run lint