npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@0x4447/pretzel

v1.0.7

Published

🥨 Recursive JSON data validation.

Downloads

26

Readme

🥨 Pretzel

We created our Pretzel recursive JSON data validation after realizing that there were no npm modules that could recursively validate a JSON object with multiple nested values objects.

We are aware of Validate.js, but as the author explains, the support for complete object is very basic. We did consider proposing a PR to the project, but the source code turned out to be too hard to rezone about. Thus, Pretzel was born.

The goal of this tool is not just to handle nested JSON files like this...

{
	"company_name": "0x4447",
	"address": {
		"street": "42 Life",
		"state": "TX",
		"code": 123456,
		"country": "United States",
		"contact": {
			"email": "[email protected]",
			"phone_nr": "+1 (555) 555-6666"
		}
	},
	"employs": {
		"ceo": {
			"individual": {
				"first_name": "David",
				"last_name": "Gatti"
			},
			"assistant": {
				"first_name": "Very",
				"last_name": "Helpful"
			}
		}
	}
}

...with rules structured this way:

{
	company_name: {
		type: 'string'
	},
	address: {
		street: {
			type: 'string'
		},
		state: {
			includes: ['AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'DC', 'FL', 'GA', 'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY']
		},
		code: {
			type: 'number'
		},
		country: {
			includes: ['United States', 'Canada']
		},
		contact: {
			email: {
				type: 'string'
			},
			phone_nr: {
				type: 'string'
			}
		}
	},
	employs: {
		ceo: {
			individual: {
				first_name: {
					type: 'string'
				},
				last_name: {
					type: 'string'
				}
			},
			assistant: {
				first_name: {
					type: 'string'
				},
				last_name: {
					type: 'string'
				}
			}
		}
	}
}

We also wanted to make the source code as simple to understand as possible. If you check the index.js file, you'll see what we mean. Use it, modify it, learn from it.

How to Install

] npm install @0x4447/pretzel

How to Test

] npm run test

How to Require

let pretzel = require('pretzel');

How to Use


let pretzel = require('pretzel');

//
//	RULES
//
let rules = {
	name: {
		type: "string"
	}
};

//
//	Good DATA
//
let good_data = {
	name: '0x4447'
};

//
//	Bad DATA
//
let bad_data = {
	name: 123321
};

//
//	1.	Execute validation.
//
let good = pretzel(good_data, rules);
let bad = pretzel(bad_data, rules);

//
//	2.	Check the validation result.
//
console.info(good);
console.info(bad);

Rules

Below is a list of all the rules the module supports at this time.

Bigger than

{
	biggerThan: 5
}

Smaller than

{
	smallerThan: 5
}

Comparison

{
	comparison: 1
}

Includes

{
	includes: [9, '0x4447']
}

Regular Expression

{
	regexp: '[aAzZ.-]'
}

Types

{
	type: "string || number || object || array"
}

The End

If you enjoyed this project, please consider giving it a 🌟. And check out our 0x4447 GitHub account, where we have additional resources that you might find useful or interesting.

Sponsor 🎊

This project is brought to you by 0x4447 LLC, a software company specializing in build custom solutions on top of AWS. Find out more by following this link: https://0x4447.com or, say [email protected].