josdejong/ducktype is tracked by TopGit as an open-source project, with 92 stars on GitHub, written primarily in JavaScript. Flexible data validation using a ducktype interface. For JavaScript and Node.js.
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
Flexible data validation using a duck type interface for JavaScript and Node.js.
As JavaScript is a loosely typed language, any variable can contain any
type of data, and any type of data can be passed as arguments to any function.
When dealing with data inputs coming from external sources, there is a need
to validate the type and contents of the data. Ducktype offers an easy way
to validate both basic data types as well as complex structured data types
in a flexible way.
Replace this kind of type checking mess:
function save (contact) {
if (contact && isInteger(contact.id) && (contact.id > 0) && isString(contact.name) &&
contact.address && isString(contact.address.city) && isString(contact.address.street)) {
// ... save contact
}
else {
throw new Error('Invalid contact');
}
}
with this:
var contactType = ducktype({
id: ducktype(Number, {integer: true, min: 0}),
name: String,
address: {
city: String,
street: String,
}
});
function save (contact) {
contactType.validate(contact);
// ... save contact
}
var type = ducktype([Number, Number]);
function add (a, b) {
type.validate(arguments);
return a + b;
}
var sum = add(2, 3); // ok
var sum = add(2, 'string'); // will throw a TypeError
Alternatively, a ducktype wrapper can be created which validates the
function arguments against the ducktype:
var add = ducktype([Number, Number]).wrap(function add (a, b) {
return a + b;
});
var sum = add(2, 3); // ok
var sum = add(2, 'string'); // will throw a TypeError
A basic type. Choose from Array, Boolean, Date, Function, Number,
Object, RegExp, String, null, undefined.
Another ducktype.
An object. All properties of the object will be checked. Each property
can be a basic type, ducktype, object, or array.
An array.
An array can have zero, one or multiple elements which can be
a basic type, ducktype, object, or array.
Providing an array with zero elements will just return a ducktype(Array).
Providing an array with one element will return a ducktype which will
test each of tested arrays elements against the given type,
for example ducktype([Number]).test(1, 2, 3).
Providing an array with multiple elements will validate the length of
the tested array, and validate each of the array elements one to one
against the provided types. This can be used to test the number and type
of function arguments. Example: ducktype([Number, String]).test(2, 'str').
options is an object which can contain properties:
A string name
A boolean optional
A boolean nullable
A boolean integer. Test whether a number has an integer value.
Only applicable for Numbers.
A number min. Test whether a number is larger or equal to a minimum
value. Only applicable for Numbers.
A number max. Test whether a number is smaller or equal to a maximum
value. Only applicable for Numbers.
A created ducktype has functions:
test(object). A function which returns true when provided object matches
the ducktype, and false otherwise.
validate(object). A function which will throw a TypeError when the provided
object does not match the ducktype.
wrap(fn). Creates a wrapper function around the provided function, which
validates the function arguments against the ducktype.
Only applicable for ducktypes containing an array, as the ducktype is tested
against an array with the function arguments.
Implement a parser accepting a string describing a type in
annotations.
Implement support to define your own tests for custom types.
Implement non-strict type checking: when an object can be converted to the
desired type, it is ok. For example a string containing a numeric value can
be considered a valid Number, or a string containing an ISO date can be
considered a valid Date.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
TopGit's last sync did not record any GitHub topics for josdejong/ducktype. GitHub topics appear in the right sidebar of a repository page; that's the authoritative place to check.
How active is development on josdejong/ducktype?
The most recent commit recorded on josdejong/ducktype was 23 days ago, based on the GitHub push timestamp. The repository has 10 forks — one of the better signals of community interest.
How many stars does josdejong/ducktype have?
josdejong/ducktype has 92 GitHub stars — refresh the page for the live number, or check github.com/josdejong/ducktype. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
What language is josdejong/ducktype written in?
josdejong/ducktype is written primarily in JavaScript. GitHub's language field is based on the largest share of bytes in the default branch.
Where do I read more about josdejong/ducktype?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/josdejong/ducktype is the definitive source.
Read full README in the tab above.
Want a second opinion on ducktype?
Ask an AI that can read this page — one click and you get its take on ducktype.