ObjectStackObjectStack

Seed Loader

Seed Loader protocol schemas

Seed Loader Protocol

Defines the schemas for metadata-driven seed data loading with automatic

relationship resolution, dependency ordering, and multi-pass insertion.

Architecture Alignment

  • Salesforce Data Loader: External ID-based upsert with relationship resolution

  • ServiceNow: Sys ID and display value mapping during import

  • Airtable: Linked record resolution via display names

Loading Flow


1. Build object dependency graph from field metadata (lookup/master_detail)

2. Topological sort → determine insert order (parents before children)

3. Pass 1: Insert/upsert records, resolve references via externalId

4. Pass 2: Fill deferred references (circular/delayed dependencies)

5. Validate & report unresolved references

6. Return structured result with per-object stats

Source: packages/spec/src/data/seed-loader.zod.ts

TypeScript Usage

import { DatasetLoadResult, ObjectDependencyGraph, ObjectDependencyNode, ReferenceResolution, ReferenceResolutionError, SeedLoaderConfig, SeedLoaderRequest, SeedLoaderResult } from '@objectstack/spec/data';
import type { DatasetLoadResult, ObjectDependencyGraph, ObjectDependencyNode, ReferenceResolution, ReferenceResolutionError, SeedLoaderConfig, SeedLoaderRequest, SeedLoaderResult } from '@objectstack/spec/data';

// Validate data
const result = DatasetLoadResult.parse(data);

DatasetLoadResult

Result of loading a single dataset

Properties

PropertyTypeRequiredDescription
objectstringObject that was loaded
modeEnum<'insert' | 'update' | 'upsert' | 'replace' | 'ignore'>Import mode used
insertedintegerRecords inserted
updatedintegerRecords updated
skippedintegerRecords skipped
erroredintegerRecords with errors
totalintegerTotal records in dataset
referencesResolvedintegerReferences resolved via externalId
referencesDeferredintegerReferences deferred to second pass
errorsObject[]Reference resolution errors

ObjectDependencyGraph

Complete object dependency graph for seed data loading

Properties

PropertyTypeRequiredDescription
nodesObject[]All objects in the dependency graph
insertOrderstring[]Topologically sorted insert order
circularDependenciesstring[][]Circular dependency chains (e.g., [["a", "b", "a"]])

ObjectDependencyNode

Object node in the seed data dependency graph

Properties

PropertyTypeRequiredDescription
objectstringObject name (snake_case)
dependsOnstring[]Objects this object depends on
referencesObject[]Field-level reference details

ReferenceResolution

Describes how a field reference is resolved during seed loading

Properties

PropertyTypeRequiredDescription
fieldstringSource field name containing the reference value
targetObjectstringTarget object name (snake_case)
targetFieldstringField on target object used for matching
fieldTypeEnum<'lookup' | 'master_detail'>Relationship field type

ReferenceResolutionError

Actionable error for a failed reference resolution

Properties

PropertyTypeRequiredDescription
sourceObjectstringObject with the broken reference
fieldstringField name with unresolved reference
targetObjectstringTarget object searched for the reference
targetFieldstringExternalId field used for matching
attemptedValueanyValue that failed to resolve
recordIndexintegerIndex of the record in the dataset
messagestringHuman-readable error description

SeedLoaderConfig

Seed data loader configuration

Properties

PropertyTypeRequiredDescription
dryRunbooleanValidate references without writing data
haltOnErrorbooleanStop on first reference resolution error
multiPassbooleanEnable multi-pass loading for circular dependencies
defaultModeEnum<'insert' | 'update' | 'upsert' | 'replace' | 'ignore'>Default conflict resolution strategy
batchSizeintegerMaximum records per batch insert/upsert
transactionbooleanWrap entire load in a transaction (all-or-nothing)
envEnum<'prod' | 'dev' | 'test'>optionalOnly load datasets matching this environment

SeedLoaderRequest

Seed loader request with datasets and configuration

Properties

PropertyTypeRequiredDescription
datasetsObject[]Datasets to load
configObjectLoader configuration

SeedLoaderResult

Complete seed loader result

Properties

PropertyTypeRequiredDescription
successbooleanOverall success status
dryRunbooleanWhether this was a dry-run
dependencyGraphObjectObject dependency graph
resultsObject[]Per-object load results
errorsObject[]All reference resolution errors
summaryObjectSummary statistics

On this page