kontur alternatives and similar libraries
Based on the "Data Structure" category.
Alternatively, view kontur alternatives based on common mentions on social networks and blogs.
-
immutable-js
Immutable persistent data collections for Javascript which increase efficiency and simplicity. -
mori
ClojureScript's persistent data structures and supporting API from the comfort of vanilla JavaScript -
object-path
A tiny JavaScript utility to access deep properties using a path (for Node and the Browser) -
schemapack
Create a schema object to encode/decode your JSON in to a compact byte buffer with no overhead. -
hashmap
HashMap JavaScript class for Node.js and the browser. The keys can be anything and won't be stringified -
omniclone
An isomorphic and configurable javascript utility for objects deep cloning that supports circular references. -
property-path
Get and set object properties using a string path, where you can specify the separator character in the path.
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of kontur or a related project?
Popular Comparisons
README
kontur
a little DSL that outputs JSON schema
[instruction](koa.md) on validating request body in koa using ajv and kontur
overview
import { compile, bool, int, str } from 'kontur'
compile({
gender: str,
age: int,
nickname: str,
verified: bool
})
will generate
{
type: 'object',
properties: {
gender: { type: 'string' },
age: { type: 'integer' },
nickname: { type: 'string' },
verified: { type: 'boolean' }
},
required: [ 'gender', 'age', 'nickname', 'verified' ]
}
compile({
gender: str.in('male', 'female').optional,
age: int.between(0, 200),
nickname: str.minlen(3).match(/^[a-zA-Z]/),
verified: bool.optional.default(false)
})
will generate
{
type: 'object',
properties: {
gender: {
enum: ['male', 'female'],
type: 'string'
},
age: {
minimum: 0,
maximum: 200,
type: 'integer'
},
nickname: {
minLength: 3,
pattern: '^[a-zA-Z]',
type: 'string'
},
verified: {
default: false,
type: 'boolean'
}
},
required: [ 'age', 'nickname' ]
}
nested schema
compile({
assignment: {
assignees: array.len(3).uniq.items(str.len(16)),
assigner: object.strict.properties({
id: str.len(16)
}),
assigned_at: str.datetime
}
})
the output can be found [here](lib/compile.test.js)
types
object
strict
, no extra properties should be included
size(num)
, maxsize(num)
, minsize(num)
, limit the number of properties
properties(schema)
, specify schema of children
array
strict
, no extra items should be included
len(num)
, minlen(num)
, maxlen(num)
, limit the length of the array
items(schema)
, all element should match
uniq
contains(schema)
, at least one element should match
string
match(regexp)
, match a regular expression
email
, ipv4
, ipv6
, uri
, datetime
, built-in formats
number/int
min(num)
, max(num)
, between(num, num)
,
min(num).exclusive
, max(num).exclusive
null
nil
just null
boolean
bool
tuple(direived from array)
use plain array
[str, int.between(1,5)]
enum
str.in('created', 'suspended', 'deleted')
any('male', 'female')
miscs
optional
used in context of object, by default all keys are required
depends(keys)
used in context of object
default(value)
add default value
desc(text)
add description
title(text)
add title
combining schemas
all
all(int.min(0), int.max(1))
any
any(int.min(1).exclusive, int.max(0).exclusive)
one
one(int.min(0), int.max(1))
not
not.nil
not.object.array