API Reference

Quick reference for @vaagatech/snapline-core. Install one package — it re-exports engine, adapters, and utilities.

Core orchestration

ExportDescription
testSuite(name, config)Run one or more test modes; returns TestSuiteResult
runApiFixtureCases(options)HTTP fixture cases from fixtures/cases/
runSnaplineFixtureCases(options)Offline fixture cases (live.json vs expected.json)

testSuite config

FieldDescription
authOptional auth.oauth2(), auth.openid(), or auth.basic()
baseUrlPrepended to relative API endpoints
apiAPI ↔ JSON fixture
dbComparisonDB ↔ DB (SQL or NoSQL)
apiToDbAPI response vs DB row
dbToApiDB row vs API response (inputFromDb)
publishAndPollPublish to queue → poll DB, file, or response topic
fetchImplCustom fetch for mocking

Reconciliation

ExportDescription
snapline(live, expected, options)Full pipeline
assertAgainstFile(live, path, options)Compare live data vs JSON file
loadJsonFile(path, rootDir?)Load JSON with optional path sandboxing

Snapline options

OptionTypeDescription
ignoreFieldsstring[]Fields to strip before compare (dot paths)
transformationsRecord<string, fn>Normalize live values per field
dataMappingRecord<string, map|fn>Map codes across systems

API factories

import { api } from '@vaagatech/snapline-core';

api.rest({ endpoint, method, inputFile, body, headers })
api.graphql({ endpoint, query, queryFile, variables, variablesFile, dataPath })
api.soap({ endpoint, soapAction, envelope, inputFile, headers })

Database connection contract

Published packages do not ship SQL drivers. Implement DbConnectionLike with your Postgres/MySQL client:

import type { DbConnectionLike } from '@vaagatech/snapline-core';

/** async query(sql, params?) → DbRow[] */
const appDb: DbConnectionLike = {
  async query(sql, params) {
    // your pg/mysql driver here
    return rows;
  },
};

Demos use @vaagatech/snapline-demo-shared for SQLite and in-memory stubs (createSqliteConnection, seedDb, db.postgres/mysql/sqlite). See packages/core/examples/in-memory-db.mjs for a minimal stub you can copy.

Queue & async polling

Install @vaagatech/snapline-messaging-adapters for queue publishers. Core provides polling and comparison:

ExportDescription
runPublishAndPoll(config)Publish message, wait for async result, compare
createDbAsyncResultResolver(config)Poll SQL until rows match until predicate
createFileAsyncResultResolver(config)Poll {correlationId}.json on disk
createMessageAsyncResultResolver(config)Wait on response topic via MessageConsumerLike
waitForResult(check, options)Generic poll-until-ready helper
import { messaging } from '@vaagatech/snapline-messaging-adapters';
import { testSuite } from '@vaagatech/snapline-core';

const { publisher } = messaging.memory();

await testSuite('Order pipeline', {
  publishAndPoll: {
    publish: { publisher, topic: 'orders.request', payload: { orderId: 'ORD-1' } },
    poll: {
      db: {
        db: appDb,
        query: 'SELECT status FROM orders WHERE correlationId = :correlationId',
        until: (rows) => rows[0]?.status === 'PROCESSED',
      },
    },
    expected: { status: 'PROCESSED' },
    pollOptions: { timeoutMs: 30_000 },
  },
});

Poll targets: { db }, { file: { directory } }, { message: { consumer, topic } }, or { resolver }.

Warehouse comparison

import { runWarehouseComparison, nosql, createStreamReportWriter } from '@vaagatech/snapline-core';

await runWarehouseComparison({
  sourceDb,                    // DbConnectionLike — your SQL warehouse
  targetStore: nosql.memory(), // DocumentStoreLike — e.g. MongoDB adapter
  tables: [/* WarehouseTableSpec[] */],
  chunkSize: 50,
  report: { outputPath: './reports/warehouse.jsonl' },
});

createStreamReportWriter appends JSONL events without holding the full dataset in memory.

NoSQL

import { nosql } from '@vaagatech/snapline-core';

const store = nosql.memory();
nosql.seed(store, collection, documents);

Reporting

ExportDescription
resolveReportConfig(options)Parse CLI args and env vars
writeTestReport(suites, config, meta?)Write JSON, HTML, or text report
pushTestReportToHub(report, { hubUrl, project, tags })Push report to Snapline Hub
resolveHubConfig(options)Parse SNAPLINE_HUB_URL / --hub-url
redactFields(data, fields)Mask sensitive fields in report data
redactSuiteResults(suites, fields)Redact all step results in suites

Environment variables:

Fixture utilities

import { fixturesDir, moduleDir, DEFAULT_FIXTURE_LAYOUT } from '@vaagatech/snapline-core';

fixturesDir(import.meta.url, { relativePath: '../fixtures' })
moduleDir(import.meta.url)

case.json fields

FieldDescription
nameDisplay name
expectMatchtrue = expect match; false = expect mismatch
expectStatusExpected HTTP status (default 200)
skipAuthSkip auth headers for 401 tests
failureTypedataMapping, transformation, or auth
expectedDiffPathAssert diff occurs at specific path

Package examples

Runnable examples ship in the repo under packages/*/examples/: