Reading through the discussion on document validation, it seems to me that if everything is implemented as a fixed API, horizon will only be used by people with specific use cases.
I don't think document validation should be part of the core, for the simple reason that no one solution will suit every app. You might be thinking about storing the schemas in the database. What if I want to validate login information before the web socket is opened? The schemas might be read from JSON files. What if I want to use YAML? You might pick ajv as the json-schema implementation because it's fast. What if I want to use jsen because it's three times as small? What if my app doesn't need any fancy APIs whatsoever, and I'm just using horizon for the realtime feeds?
This is what I imagine a document validation plugin would look like:
let validate = require("json-something").validate
module.exports = function(hz, opts) {
let schemas = hz("schemas").fetch();
let validate = (table, doc) => validate(schemas[table], doc)
hz.on("insert", validate)
hz.on("update", validate)
}
An auth plugin:
module.exports = function(hz, opts) {
let users = hz("users");
if (!users) {
// initialize
}
hz.on("connect", credentials => users.findOne({user: credentials.user, password: credentials.password}))
}
Plugin configuration would be done in config.toml and/or a configuration module like webpack's config.js.
Reading through the discussion on document validation, it seems to me that if everything is implemented as a fixed API, horizon will only be used by people with specific use cases.
I don't think document validation should be part of the core, for the simple reason that no one solution will suit every app. You might be thinking about storing the schemas in the database. What if I want to validate login information before the web socket is opened? The schemas might be read from JSON files. What if I want to use YAML? You might pick ajv as the json-schema implementation because it's fast. What if I want to use jsen because it's three times as small? What if my app doesn't need any fancy APIs whatsoever, and I'm just using horizon for the realtime feeds?
This is what I imagine a document validation plugin would look like:
An auth plugin:
Plugin configuration would be done in config.toml and/or a configuration module like webpack's config.js.