JSON tours
Tours can be plain data: reviewable in pull requests, validated in CI, and compiled to steps. Documents never execute code; handler names resolve only against a registry you pass in.
Valid: 3 steps
import { compileTourDocument, validateTourDocument } from 'svelte-tourlight/document';
import doc from './onboarding.tour.json';
const { valid, issues } = validateTourDocument(doc);
// issues: [{ path: '$.steps[1].route', code: 'invalid-route', message: '…', severity: 'error' }]
const steps = compileTourDocument(doc, {
actions: { openHelp: () => help.open() },
conditions: { isAdmin: () => user.role === 'admin' }
});