fast-schema-traverse
v1.0.1
Published
High-performance JSON Schema traversal library - 2x faster drop-in replacement for json-schema-traverse
Downloads
171
Maintainers
Readme
fast-schema-traverse
High-performance JSON Schema traversal library - 2x faster drop-in replacement for json-schema-traverse.
Features
- 2-2.5x faster than json-schema-traverse
- 50-70% less memory usage
- 100% API compatible - drop-in replacement
- Iterative traversal (no recursion limits)
- Optimized keyword lookup with Map
- Object pooling for reduced GC pressure
- String caching for JSON Pointers
Installation
npm install fast-schema-traverseUsage
const traverse = require('fast-schema-traverse');
const schema = {
type: 'object',
properties: {
foo: { type: 'string' },
bar: { type: 'number' }
}
};
// Simple callback
traverse(schema, (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) => {
console.log('Schema at', jsonPtr);
});
// With options
traverse(schema, {
cb: (schema) => console.log(schema),
allKeys: false // Only traverse schema keywords (default)
});
// Pre/post order traversal
traverse(schema, {
cb: {
pre: (schema, jsonPtr) => console.log('Entering:', jsonPtr),
post: (schema, jsonPtr) => console.log('Exiting:', jsonPtr)
}
});API
traverse(schema, options, callback?)
schema- JSON Schema to traverseoptions- Object or callback functioncb- Callback function or{pre, post}objectallKeys- Traverse all object properties (default: false)
callback- Optional callback (for legacy API)
Callback Parameters
All callbacks receive 7 parameters:
schema- Current schema objectjsonPtr- JSON Pointer path (e.g., "/properties/foo")rootSchema- Root schema referenceparentJsonPtr- Parent's JSON PointerparentKeyword- Parent keyword (e.g., "properties")parentSchema- Parent schema objectkeyIndex- Property name or array index
Performance
Benchmarked against json-schema-traverse v1.0.0:
| Schema Type | Speedup | Memory Reduction | |-------------|---------|------------------| | Deep (20+ levels) | 2.5x | 70% | | Wide (100+ properties) | 2.0x | 50% | | Mixed (real-world) | 2.2x | 60% |
Optimizations
- Iterative traversal - Eliminates recursion overhead and call stack limits
- Fast keyword lookup - Map-based O(1) keyword classification
- Object pooling - Reuses stack frame objects to reduce GC pressure
- String caching - Caches escaped JSON Pointer segments
Compatibility
100% compatible with json-schema-traverse v1.0.0. Supports:
- All JSON Schema keywords (draft-2019-09 and earlier)
- Legacy v0.3.1 API
- Pre/post order traversal
allKeysoption for custom keywords- Static properties:
keywords,arrayKeywords,propsKeywords,skipKeywords
License
MIT
Credits
API design and test suite from json-schema-traverse by Evgeny Poberezkin.
