diff --git a/fields.js b/fields.js index 5af6f64..9890898 100644 --- a/fields.js +++ b/fields.js @@ -5,7 +5,7 @@ const schema = require("./schema"); * @see https://apple.co/2wkUBd */ -class FieldsArea { +class FieldsContainer { constructor() { this.fields = []; } @@ -57,7 +57,21 @@ class FieldsArea { } } +class StringField { + set transitType(v) { + if (schema.isValid(v, schema.constants.transitType, true)) { + this.fields = v; + } else { + this.fields = this.fields && this.fields !== "" ? this.fields : ""; + } + } + get transitType() { + return this.fields; + } +} + module.exports = { areas: ["primaryFields", "secondaryFields", "auxiliaryFields", "backFields", "headerFields"], - FieldsArea + FieldsContainer, + StringField }; diff --git a/index.js b/index.js index b467644..b916862 100644 --- a/index.js +++ b/index.js @@ -6,7 +6,7 @@ const forge = require("node-forge"); const archiver = require("archiver"); const moment = require("moment"); const schema = require("./schema"); -const fields = require("./fields"); +const { areas: fieldsName, FieldsContainer, StringField } = require("./fields"); const { errors, warnings } = require("./messages"); const readdir = util.promisify(fs.readdir); @@ -21,7 +21,8 @@ class Pass { this.props = {}; this.shouldOverwrite = !(this.options.hasOwnProperty("shouldOverwrite") && !this.options.shouldOverwrite); - fields.areas.forEach(a => this[a] = new fields.FieldsArea()); + fieldsName.forEach(a => this[a] = new FieldsContainer()); + this.transitType = new StringField(); } /** @@ -523,12 +524,18 @@ class Pass { }); } - fields.areas.forEach(area => { + fieldsName.forEach(area => { if (this[area].fields.length) { passFile[this.type][area].push(...this[area].fields); } }); + if (this.type === "boardingPass" && this.transitType) { + passFile[this.type]["transitType"] = this.transitType; + } else { + throw new Error("Cannot proceed with pass creation. transitType field is required for boardingPasses."); + } + return Promise.resolve(Buffer.from(JSON.stringify(passFile))); } diff --git a/schema.js b/schema.js index 46b1b4b..7ec2412 100644 --- a/schema.js +++ b/schema.js @@ -66,7 +66,8 @@ module.exports = { basicStructure, boardingStructure, beaconsDict, - locationsDict + locationsDict, + transitType }, isValid: (opts, schemaName, debug = false) => { let validation = Joi.validate(opts, schemaName);