joi-full
v10.0.6-rel3
Published
joi object schema validation with extensions - universal/isomorphic works with Node.js and is bundled for the browser
Readme
joi-full
joi object schema validation with extensions as universal/isomorphic libarary for Node.js and bundled for the browser (babelified and bundled). Includes joi-date-extensions.
Why?
There has been some difficulty in getting a reasonable version of Joi packaged for the browser both due to the size of bundling and with Joi 7.x.x switching to ES6 modules has added additional challenges.
I made a browser build of joi available at joi-browser, but Joi@10 split date functionality into its own package joi-date-extensions, so I also created joi-date-extensions-browser but currently are having trouble when combining joi-browser and joi-date-extensions together.
In the meantime, this build was created which includes joi and joi-date-extensions and works on Node.js and provides a bundle for brower builds.
Usage
Moment is a peer dependency so it needs to be installed as well.
npm install joi-full momentvar Joi = require('joi-full'); // includes joi-date-extensionsNote: if you are using webpack with a babel loader you may need to exclude joi-full from being run through babel again.
In your webpack.config.js loaders, add an exclude: [ /joi-full/ ]
Isomorphic / Universal JS - using in browser and on server (Node.js)
The joi-full package.json includes the browser field which directs browser builds to use to the prebuilt dist/joi-full.js
Webpack
An example of using joi-full with webpack is in examples/webpack-basic
npm install joi-full momentYou might need to add the following to your app's webpack.config.js to enable the package aliasing we configured in package.json
resolve: {
packageAlias: 'browser'
}Note: if you are using webpack with a babel loader you may need to exclude joi-full from being run through babel again.
In your webpack.config.js loaders, add an exclude: [ /joi-full/ ].
So in your code, you just require joi-full
var Joi = require('joi-full'); // includes joi-date-extensionsBrowserify
You can also use browserify to use joi-full. It should pick up the proper bundled file when it reads joi-full/package.json browser field.
npm install joi-full momentSo in your code, you just require joi-full
var Joi = require('joi-full'); // includes joi-date-extensionsThere is an example in examples/browserify-basic.
Examples
There are three examples:
- examples/browserify-basic - uses browserify to bundle joi-full with our src for browser
- examples/node-basic - use joi-full with node.js
- examples/webpack-basic - use webpack to bundle joi-full with our src for the browser
To use any of them:
cd examples/___
npm install
npm startDevelopment
# builds dist/joi-full.js and dist/joi-full.min.js
npm install
npm run prepublish # when you want to rebuildDiscussion
The main discussion about these difficulties has been in this github issue.
https://github.com/hapijs/joi/issues/528#issuecomment-128532221
See joi-browser for more details on the bundling issues.
Since this package is simply a bundling of the original joi and joi-date-extensions, please discuss defects or suggestions for those packages at:

