Simon Priet e69a613a37 feat: Created a mini nodeJS server with NewMan for testing without PostMan GUI.
This will mimic a run in a CD/CI environment or docker container.
2021-09-08 14:01:19 +02:00

80 lines
4.1 KiB
JavaScript

/* eslint-disable object-shorthand */
var semver = require('semver'),
// @todo: Add support for more normalizers
normalizers = {
'1.0.0': require('./v1')
};
module.exports = {
/**
* Accepts the arguments for normalization and invokes the appropriate normalizer with them.
*
* @param {Object} collection - The plain collection JSON to be normalized.
* @param {Object} options - A set of options for the current normalization.
* @param {String} options.normalizeVersion - The base collection schema version for which to normalize.
* @param {?Boolean} [options.mutate=false] - When set to true, normalization is done in place.
* @param {?Boolean} [options.noDefaults=false] - When set to true, sensible defaults are not added.
* @param {?Boolean} [options.prioritizeV2=false] - When set to true, v2 style properties are checked first.
* @param {?Boolean} [options.retainEmptyValues=false] - When set to true, empty values are set to '' instead of
* being removed.
* @param {Function} callback - A function invoked to indicate the completion of the normalization process.
* @returns {*}
*/
normalize: function (collection, options, callback) {
var version;
if (!options || !(version = semver.valid(options.normalizeVersion, true)) || !normalizers[version]) {
return callback(new Error('Version not specified or invalid: ' + options.normalizeVersion));
}
return normalizers[version].normalize(collection, options, callback);
},
/**
* Normalizes a single request or item as per the provided version.
*
* @param {Object} object - The entity to be normalized.
* @param {Object} options - The set of options to be applied to the current normalization.
* @param {String} options.normalizeVersion - The base collection schema version for which to normalize.
* @param {?Boolean} [options.mutate=false] - When set to true, normalization is done in place.
* @param {?Boolean} [options.noDefaults=false] - When set to true, sensible defaults are not added.
* @param {?Boolean} [options.prioritizeV2=false] - When set to true, v2 style properties are checked first.
* @param {?Boolean} [options.retainEmptyValues=false] - When set to true, empty values are set to '' instead of
* being removed.
* @param {Function} callback - The function invoked when the normalization has completed.
*/
normalizeSingle: function (object, options, callback) {
var version;
if (!options || !(version = semver.valid(options.normalizeVersion, true)) || !normalizers[version]) {
return callback(new Error('Version not specified or invalid: ' + options.normalizeVersion));
}
return normalizers[version].normalizeSingle(object, options, callback);
},
/**
* Normalizes a single response as per the provided version.
*
* @param {Object} response - The response to be normalized.
* @param {Object} options - The set of options to be applied to the current normalization.
* @param {String} options.normalizeVersion - The base collection schema version for which to normalize.
* @param {?Boolean} [options.mutate=false] - When set to true, normalization is done in place.
* @param {?Boolean} [options.noDefaults=false] - When set to true, sensible defaults are not added.
* @param {?Boolean} [options.prioritizeV2=false] - When set to true, v2 style properties are checked first.
* @param {?Boolean} [options.retainEmptyValues=false] - When set to true, empty values are set to '' instead of
* being removed.
* @param {Function} callback - The function invoked when the normalization has completed.
*/
normalizeResponse: function (response, options, callback) {
var version;
if (!options || !(version = semver.valid(options.normalizeVersion, true)) || !normalizers[version]) {
return callback(new Error('Version not specified or invalid: ' + options.normalizeVersion));
}
return normalizers[version].normalizeResponse(response, options, callback);
}
};