Companions
Constants, guards, factories, formatters, and labels for the record lexicon
Every vocabulary in the lexicon ships companions — at minimum a constants array and a type guard, plus labels and formatters where the values surface in a UI. This page is the reference for what records provides and where.
Subpaths
| Subpath | Contents |
|---|---|
@disclosureos/records/constants | Value arrays: SOURCE_TYPES, TIMES_OF_DAY, SITE_TYPES, OBJECT_SHAPES, ... |
@disclosureos/records/guards | Type guards: isSourceType, isTimeOfDay, isObjectShape, ... |
@disclosureos/records/factories | createObservation, createTemporalData, createMediaAttachment, createSensorReading |
@disclosureos/records/formatters | formatTemporalData, formatFuzzyDate, formatDateRange, formatSourceType, ... |
@disclosureos/records/labels | Display maps: SOURCE_TYPE_LABELS, TIME_OF_DAY_LABELS, OBJECT_SHAPE_LABELS, ... |
@disclosureos/records/validators | validateObservation, isValidLatitude, isValidLongitude, isValidISODate |
Everything is also re-exported from the package barrel.
Constants and guards
Constants are derived directly from the Zod schemas (Schema.options), so they can never drift from the types. Guards are built with makeGuard(Schema) — they narrow unknown to the schema's type:
import { SOURCE_CREDIBILITIES } from '@disclosureos/records/constants';
import { isSourceCredibility } from '@disclosureos/records/guards';
SOURCE_CREDIBILITIES;
// ['official', 'verified', 'credible', 'unverified', 'questionable', 'disputed', 'unknown']
if (isSourceCredibility(input)) {
// input: SourceCredibility
}Covered vocabularies include source types and credibility, temporal certainty, date granularity and range types, time of day, media types, site/terrain types, airspace classes, location sensitivity, coordinate precision, object shapes, maneuver types, relation kinds, confidence levels, and publication status.
Factories
Factories fill defaults, generate ids, and parse on construction — they throw on invalid input and their return values are guaranteed valid:
import {
createObservation,
createTemporalData,
createMediaAttachment,
createSensorReading,
} from '@disclosureos/records/factories';
const temporal = createTemporalData('2004-11-14', 'exact', { durationSeconds: 300 });
const photo = createMediaAttachment('image', 'https://example.org/frame.png');
// photo.id auto-generated — citable via evidenceRef('media', photo.id)
const radar = createSensorReading('shipborne_radar', 'radar_phased_array');
// radar.id auto-generated — citable via evidenceRef('sensor', radar.id)createMediaAttachment and createSensorReading auto-generate stable ids precisely so that claims can cite them.
Formatters and labels
Formatters turn structured values into prose; labels map enum values to display names:
import { formatTemporalData, formatFuzzyDate } from '@disclosureos/records/formatters';
import { OBJECT_SHAPE_LABELS } from '@disclosureos/records/labels';
formatTemporalData({ date: '2004-11-14', dateCertainty: 'approximate' });
// "2004-11-14 [Approximate]"
formatFuzzyDate({ value: '1947-07', granularity: 'month', certainty: 'approximate' });
// "July 1947"
OBJECT_SHAPE_LABELS['tic_tac']; // "Tic Tac"The temporal formatters understand the full fuzzy-date model — exact dates, ranges, granularities, and relative dates — so UIs never reimplement date display logic.
Validators
import {
validateObservation,
isValidLatitude,
isValidLongitude,
isValidISODate,
} from '@disclosureos/records/validators';validateObservation is the package's record-level validator — see Validating at Boundaries for usage patterns and the strip hazard.