Files
passkit-generator/schema.js
2018-07-22 23:48:55 +02:00

54 lines
1.9 KiB
JavaScript

const Joi = require("joi");
const CONSTANTS = {
instance: Joi.object().keys({
modelDir: Joi.string().required(),
modelName: Joi.string(),
certificates: Joi.object().keys({
dir: Joi.string().required(),
wwdr: Joi.string().required(),
signerCert: Joi.string().required(),
signerKey: Joi.object().keys({
keyFile: Joi.string().required(),
passphrase: Joi.string().required(),
}).required()
}).required(),
handlers: Joi.object().keys({
barcode: Joi.func(),
serialNumber: Joi.func()
}),
overrides: Joi.object()
}),
barcode: Joi.object().keys({
altText: Joi.string(),
messageEncoding: Joi.string(),
format: Joi.string().required().regex(/(PKBarcodeFormatQR|PKBarcodeFormatPDF417|PKBarcodeFormatAztec|PKBarcodeFormatCode128)/, "barcodeType"),
message: Joi.string().required()
}),
field: Joi.object().keys({
attributedValue: Joi.string(),
changeMessage: Joi.string(),
dataDetectorType: Joi.array().items(Joi.string().regex(/(PKDataDetectorTypePhoneNumber|PKDataDetectorTypeLink|PKDataDetectorTypeAddress|PKDataDetectorTypeCalendarEvent)/, "dataDetectorType")),
label: Joi.string(),
textAlignment: Joi.string().regex(/(PKTextAlignmentLeft|PKTextAlignmentCenter|PKTextAlignmentRight|PKTextAlignmentNatural)/, "graphic-alignment"),
key: Joi.string().required(),
value: Joi.string().required()
}),
structure: Joi.object().keys({
auxiliaryFields: Joi.array().items(this.field),
backFields: Joi.array().items(this.field),
headerFields: Joi.array().items(this.field),
primaryFields: Joi.array().items(this.field),
secondaryFields: Joi.array().items(this.field),
transitType: Joi.string().regex(/(PKTransitTypeAir|PKTransitTypeBoat|PKTransitTypeBus|PKTransitTypeGeneric|PKTransitTypeTrain)/)
})
};
module.exports = {
CONSTANTS,
isValid: (opts, schemaName) => {
let validation = Joi.validate(opts, schemaName);
return !validation.error;
}
};