diff --git a/data/db/index.js b/data/db/index.js deleted file mode 100755 index 2c8d2e1..0000000 --- a/data/db/index.js +++ /dev/null @@ -1 +0,0 @@ -exports.sequelize = require('./sequelize'); \ No newline at end of file diff --git a/data/db/sequelize/index.js b/data/db/sequelize/index.js deleted file mode 100755 index b72b96f..0000000 --- a/data/db/sequelize/index.js +++ /dev/null @@ -1,34 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -var appDir = path.dirname(require.main.filename); -const Sequelize = require('sequelize'); -const nconf = require.main.require(appDir + '/config'); - -const username = nconf.get('database:user'); -const password = nconf.get('database:password'); -const dbName = nconf.get('database:name'); -const options = nconf.get('database:options'); - -const client = new Sequelize(dbName, username, password, options); -const models = {}; - - -fs - .readdirSync(appDir + '/data/models') - .filter(function (file) { - return (file.indexOf('.') !== 0) && (file !== 'index.js'); - }) - .forEach(function (file) { - var model = client.import(path.join(appDir + '/data/models', file)); - models[model.name] = model; - }); - -Object.keys(models).forEach(function (modelName) { - if (models[modelName].hasOwnProperty('associate')) { - models[modelName].associate(models); - } -}); - -module.exports = models; -module.exports.client = client; -module.exports.Sequelize = client.Sequelize; diff --git a/data/index.js b/data/index.js index 7939a66..d46d802 100644 --- a/data/index.js +++ b/data/index.js @@ -1,2 +1 @@ -exports.db = require('./db'); -exports.persistence = require('./persistence'); \ No newline at end of file +exports.persistence = require('./persistence'); diff --git a/data/persistence/utils/persistence-utils.js b/data/persistence/utils/persistence-utils.js index 734c9b0..f4a218a 100644 --- a/data/persistence/utils/persistence-utils.js +++ b/data/persistence/utils/persistence-utils.js @@ -1,365 +1,384 @@ const path = require('path'); const appDir = path.dirname(require.main.filename); const nconf = require.main.require(appDir + '/config'); -const { Sequelize } = require('../../db').sequelize; +// const { Sequelize } = require('../../db').sequelize; -/** - * Construye los settings de sequelize para filtros, ordenamiento y filtro general pasados - * como parametro. Se encarga de inicializar las estructuras where, include y order necesarios - * en el settings de sequelize. - * @param settings los settings de sequelize a ser inicializados. - * @param baseModel el model base sobre el cual estamos trabajando. - * @param filter los filtros a agregar. - * @param orders los ordenamientos a aplicarse - * @param paging informacion de paginado - * @param generalFilterValue valor para el filtro general. - * @param fieldsInGeneralFilter los campos a usarse para el filtro general. Se inicializara - * por default a los atributos del baseModel, exceptuando el id y los atributos de - * created_at y updated_at. - */ -const constructSettings = (exports.constructSettings = ( - settings = {}, - baseModel, - filters, - orders, - paging, - generalFilterValue, - fieldsInGeneralFilter -) => { - if (!orders || orders.length === 0) { - orders = [['id', 'ASC']]; - } - //Procesamos el filtro general. - if (generalFilterValue) { - constructGeneralFilter( - settings, - baseModel, - generalFilterValue, - fieldsInGeneralFilter - ); - } - //Procesamos los filtros especificos - if (filters) { - addFiltersToSettings(settings, baseModel, filters); - } - //Agregamos los orders - if (orders) { - addOrderToSettings(settings, baseModel, orders); - } - //Agregamos informacion de paginacion - if (paging) { - addPagingToSettings(settings, baseModel, paging); - } - return settings; -}); +const getPersistenceUtils = (sequelize) => { + const { Sequelize } = sequelize; + /** + * Construye los settings de sequelize para filtros, ordenamiento y filtro general pasados + * como parametro. Se encarga de inicializar las estructuras where, include y order necesarios + * en el settings de sequelize. + * @param settings los settings de sequelize a ser inicializados. + * @param baseModel el model base sobre el cual estamos trabajando. + * @param filter los filtros a agregar. + * @param orders los ordenamientos a aplicarse + * @param paging informacion de paginado + * @param generalFilterValue valor para el filtro general. + * @param fieldsInGeneralFilter los campos a usarse para el filtro general. Se inicializara + * por default a los atributos del baseModel, exceptuando el id y los atributos de + * created_at y updated_at. + */ + const constructSettings = ( + settings = {}, + baseModel, + filters, + orders, + paging, + generalFilterValue, + fieldsInGeneralFilter + ) => { + if (!orders || orders.length === 0) { + orders = [['id', 'ASC']]; + } + //Procesamos el filtro general. + if (generalFilterValue) { + constructGeneralFilter( + settings, + baseModel, + generalFilterValue, + fieldsInGeneralFilter + ); + } + //Procesamos los filtros especificos + if (filters) { + addFiltersToSettings(settings, baseModel, filters); + } + //Agregamos los orders + if (orders) { + addOrderToSettings(settings, baseModel, orders); + } + //Agregamos informacion de paginacion + if (paging) { + addPagingToSettings(settings, baseModel, paging); + } + return settings; + }; -/** - * Construye el path teniendo en cuenta los atributos aliased. Por ejemplo, si le pasamos - * roles.nombreRol, pero el atributo nombreRol en realidad esta aliased en la base de datos - * bajo el underscore nombre_rol, se encarga de retornar roles.nombre_rol. Opera recursivamente - * sobre todos los elementos del path pasado como argumento - * @param path el path a procesar. - * @param baseModel el model base. - */ -const getAliasedPath = (exports.getAliasedPath = (path, baseModel) => { - const splitted = path.split('.'); - let subPath = splitted[0]; - //Solo verificamos en caso de ser un atributo. Si es una asociacion, - //no hay nada que hacer, ya que recibimos el alias adecuado. - //console.log('Los attributes son', baseModel.attributes); - if (baseModel.attributes[subPath]) { - const attr = baseModel.attributes[subPath]; - if (attr.field) { - subPath = attr.field; + /** + * Construye el path teniendo en cuenta los atributos aliased. Por ejemplo, si le pasamos + * roles.nombreRol, pero el atributo nombreRol en realidad esta aliased en la base de datos + * bajo el underscore nombre_rol, se encarga de retornar roles.nombre_rol. Opera recursivamente + * sobre todos los elementos del path pasado como argumento + * @param path el path a procesar. + * @param baseModel el model base. + */ + const getAliasedPath = (path, baseModel) => { + const splitted = path.split('.'); + let subPath = splitted[0]; + //Solo verificamos en caso de ser un atributo. Si es una asociacion, + //no hay nada que hacer, ya que recibimos el alias adecuado. + //console.log('Los attributes son', baseModel.attributes); + if (baseModel.attributes[subPath]) { + const attr = baseModel.attributes[subPath]; + if (attr.field) { + subPath = attr.field; + } } - } - if (baseModel.associations[subPath]) { - baseModel = baseModel.associations[subPath].target; - } - if (splitted.length > 1) { - splitted.shift(); - subPath = `${subPath}.${getAliasedPath(splitted.join('.'), baseModel)}`; - } - return subPath; -}); -/** - * Agrega un nuevo path a los settings de sequelize recibido como parametro. - * @param el path a ser agregado. - * @param settings es el settings para sequelize. - * @param baseModel el model sequelize base. - * @param required en caso de ser necesario hacer nuevos joins para el path, seran required. - */ -const addPathToSettings = (exports.addPathToSettings = ( - path, - settings, - baseModel, - required = false -) => { - const splitted = path.split('.'); - //Si el path no es compuesto, simplemente retornamos - if (splitted.length == 1) { - return; - } - const subPath = splitted[0]; - //Si no existia include en el settings, agregamos un array vacio - if (!settings.include) { - settings.include = []; - } - const targetModel = baseModel.associations[subPath].target; - //Obtenemos el subsetting del setting actual filtrando en el include - let subsetting = settings.include.filter(x => x.as === subPath)[0]; - //Si no se encuentra el subsetting, entonces creamos un nuevo subsetting - //para el path que representa la asociacion - if (!subsetting) { - subsetting = { - model: targetModel, - as: subPath, - attributes: [], - required - }; - settings.include.push(subsetting); - } + if (baseModel.associations[subPath]) { + baseModel = baseModel.associations[subPath].target; + } + if (splitted.length > 1) { + splitted.shift(); + subPath = `${subPath}.${getAliasedPath(splitted.join('.'), baseModel)}`; + } + return subPath; + }; - //Volvemos a construir el path sin el primer elemento - splitted.shift(); - path = splitted.join('.'); + /** + * Agrega un nuevo path a los settings de sequelize recibido como parametro. + * @param el path a ser agregado. + * @param settings es el settings para sequelize. + * @param baseModel el model sequelize base. + * @param required en caso de ser necesario hacer nuevos joins para el path, seran required. + */ + const addPathToSettings = ( + path, + settings, + baseModel, + required = false + ) => { + const splitted = path.split('.'); + //Si el path no es compuesto, simplemente retornamos + if (splitted.length == 1) { + return; + } + const subPath = splitted[0]; + //Si no existia include en el settings, agregamos un array vacio + if (!settings.include) { + settings.include = []; + } + const targetModel = baseModel.associations[subPath].target; + //Obtenemos el subsetting del setting actual filtrando en el include + let subsetting = settings.include.filter(x => x.as === subPath)[0]; + //Si no se encuentra el subsetting, entonces creamos un nuevo subsetting + //para el path que representa la asociacion + if (!subsetting) { + subsetting = { + model: targetModel, + as: subPath, + attributes: [], + required + }; + settings.include.push(subsetting); + } - //Volvemos a procesar de forma recursiva - addPathToSettings(path, subsetting, targetModel, required); -}); + //Volvemos a construir el path sin el primer elemento + splitted.shift(); + path = splitted.join('.'); -/** - * Contruye el filtro general para un valor determinado. - * Normalmente, value deberia ser una cadena. - * @param settings los settings de sequelize que se estan construyendo. - * @param baseModel model base para el cual se construiran los filtros. - * @param value el valor con el que sera comparado. - * @param pathsToCompare array de paths con los cuales se quiere comparar el - * valor. De no ser proveido, se construye de forma default - */ -const constructGeneralFilter = (exports.constructGeneralFilter = ( - settings, - baseModel, - value, - pathsToCompare -) => { - if (!value) { - return; - } - const pathsExcluded = ['created_at', 'updated_at', 'id']; - if (!pathsToCompare) { - //Incluimos los paths del model que no se encuentran en el array de paths excluidos - pathsToCompare = Object.keys(baseModel.rawAttributes).filter( - x => pathsExcluded.indexOf(x) < 0 - ); - } - //Si no tenemos nada con que comparar, retornamos - if (pathsToCompare.length === 0) { - return; - } + //Volvemos a procesar de forma recursiva + addPathToSettings(path, subsetting, targetModel, required); + }; - const or = []; - for (let path of pathsToCompare) { - //Agregamos el path al settings por si sea compuesto - addPathToSettings(path, settings, baseModel); - if (path.split('.').length === 1) { - path = `${baseModel.name}.${path}`; + /** + * Contruye el filtro general para un valor determinado. + * Normalmente, value deberia ser una cadena. + * @param settings los settings de sequelize que se estan construyendo. + * @param baseModel model base para el cual se construiran los filtros. + * @param value el valor con el que sera comparado. + * @param pathsToCompare array de paths con los cuales se quiere comparar el + * valor. De no ser proveido, se construye de forma default + */ + const constructGeneralFilter = ( + settings, + baseModel, + value, + pathsToCompare + ) => { + if (!value) { + return; + } + const pathsExcluded = ['created_at', 'updated_at', 'id']; + if (!pathsToCompare) { + //Incluimos los paths del model que no se encuentran en el array de paths excluidos + pathsToCompare = Object.keys(baseModel.rawAttributes).filter( + x => pathsExcluded.indexOf(x) < 0 + ); + } + //Si no tenemos nada con que comparar, retornamos + if (pathsToCompare.length === 0) { + return; + } + + const or = []; + for (let path of pathsToCompare) { + //Agregamos el path al settings por si sea compuesto + addPathToSettings(path, settings, baseModel); + if (path.split('.').length === 1) { + path = `${baseModel.name}.${path}`; + } + const likeCondition = nconf.get('database:options:dialect') === 'postgres' ? { $iLike: `%${value}%` } : { $like: `%${value}%` }; + const condition = Sequelize.where( + Sequelize.cast(Sequelize.col(getAliasedPath(path, baseModel)), 'VARCHAR'), + likeCondition + ); + or.push(condition); } - const likeCondition = nconf.get('database:options:dialect') === 'postgres' ? { $iLike: `%${value}%` } : { $like: `%${value}%` }; - const condition = Sequelize.where( - Sequelize.cast(Sequelize.col(getAliasedPath(path, baseModel)), 'VARCHAR'), - likeCondition - ); - or.push(condition); - } - //Ahora, agregamos los ors a las condiciones ya existentes - if (!settings.where) { - settings.where = {}; - } - if (!settings.where.$or) { - settings.where.$or = []; - } - settings.where.$or = [...settings.where.$or, ...or]; -}); + //Ahora, agregamos los ors a las condiciones ya existentes + if (!settings.where) { + settings.where = {}; + } + if (!settings.where.$or) { + settings.where.$or = []; + } + settings.where.$or = [...settings.where.$or, ...or]; + }; -/** - * Agrega los filtros al setting pasado como parametro. Las nuevas condiciones - * son agregadas como and a lo que ya exista en el setting. - * @param setting el setting de sequelize. - * @param baseModelel modelo base sobre el que se esta trabajando - * @param filters los filtros. Cada filtro debe necesariamente tener el formato: - * { - * path: { - * condiciones.... - * } - * } - * Filtros sin el formato especificado tendran comportamiento incorrecto, deben manejarse - * manualmente. - */ -const addFiltersToSettings = (exports.addFiltersToSettings = ( - settings, - baseModel, - filters -) => { - if (!filters || filters.length === 0) { - return; - } + /** + * Agrega los filtros al setting pasado como parametro. Las nuevas condiciones + * son agregadas como and a lo que ya exista en el setting. + * @param setting el setting de sequelize. + * @param baseModelel modelo base sobre el que se esta trabajando + * @param filters los filtros. Cada filtro debe necesariamente tener el formato: + * { + * path: { + * condiciones.... + * } + * } + * Filtros sin el formato especificado tendran comportamiento incorrecto, deben manejarse + * manualmente. + */ + const addFiltersToSettings = ( + settings, + baseModel, + filters + ) => { + if (!filters || filters.length === 0) { + return; + } - if (!settings.where) { - settings.where = {}; - } + if (!settings.where) { + settings.where = {}; + } - for (let filter of filters) { - let paths = Object.keys(filter); - //Por cada uno de los paths de cada filtro, agregamos dicho path al settings - //y transferimos sus condiciones al settings - for (let path of paths) { - addPathToSettings(path, settings, baseModel); - let key = path.split('.').length > 1 ? '$' + path + '$' : path; - if (settings.where[key]) { - settings.where[key] = Object.assign(settings.where[key], filter[path]); - } else { - settings.where[key] = filter[path]; + for (let filter of filters) { + let paths = Object.keys(filter); + //Por cada uno de los paths de cada filtro, agregamos dicho path al settings + //y transferimos sus condiciones al settings + for (let path of paths) { + addPathToSettings(path, settings, baseModel); + let key = path.split('.').length > 1 ? '$' + path + '$' : path; + if (settings.where[key]) { + settings.where[key] = Object.assign(settings.where[key], filter[path]); + } else { + settings.where[key] = filter[path]; + } } } - } -}); + }; -/** - * Agrega ordenamiento al settings pasado como parametro. - * @param settings los settings sequelize que se estan construyendo. - * @param baseModel el modelo sequelize base. - * @param orders la lista de order. Debe tener la siguiente estructura: - * [ - * ["path1", "ASC"], - * ["path2", "DESC"]...... - * ] - */ -const addOrderToSettings = (exports.addOrderToSettings = ( - settings, - baseModel, - orders -) => { - if (!orders || orders.length === 0) { - return; - } - if (!settings.order) { - settings.order = []; - } - for (const order of orders) { - addPathToSettings(order[0], settings, baseModel); - //settings.order.push([`"${order[0]}"`, order[1]]); - settings.order.push([...order[0].split('.'), order[1]]); - } -}); + /** + * Agrega ordenamiento al settings pasado como parametro. + * @param settings los settings sequelize que se estan construyendo. + * @param baseModel el modelo sequelize base. + * @param orders la lista de order. Debe tener la siguiente estructura: + * [ + * ["path1", "ASC"], + * ["path2", "DESC"]...... + * ] + */ + const addOrderToSettings = ( + settings, + baseModel, + orders + ) => { + if (!orders || orders.length === 0) { + return; + } + if (!settings.order) { + settings.order = []; + } + for (const order of orders) { + addPathToSettings(order[0], settings, baseModel); + //settings.order.push([`"${order[0]}"`, order[1]]); + settings.order.push([...order[0].split('.'), order[1]]); + } + }; -/** - * Agrega paginacion al settings pasado como parametro. - * @param settings los settings sequelize que se estan construyendo. - * @param baseModel el modelo sequelize base. - * @param paging la informacion de paging. Debe tener la siguiente estructura - * { - * page: X, - * pageSize: Y - * } - */ -const addPagingToSettings = (exports.addPagingToSettings = ( - settings, - baseModel, - paging -) => { - const DEFAULT_PAGE_SIZE = 10; - const DEFAULT_PAGE = 1; - let pageSize = DEFAULT_PAGE_SIZE; - if (paging.pageSize) { - pageSize = paging.pageSize; - } - let page = DEFAULT_PAGE; - if (paging.page) { - page = paging.page; - } + /** + * Agrega paginacion al settings pasado como parametro. + * @param settings los settings sequelize que se estan construyendo. + * @param baseModel el modelo sequelize base. + * @param paging la informacion de paging. Debe tener la siguiente estructura + * { + * page: X, + * pageSize: Y + * } + */ + const addPagingToSettings = ( + settings, + baseModel, + paging + ) => { + const DEFAULT_PAGE_SIZE = 10; + const DEFAULT_PAGE = 1; + let pageSize = DEFAULT_PAGE_SIZE; + if (paging.pageSize) { + pageSize = paging.pageSize; + } + let page = DEFAULT_PAGE; + if (paging.page) { + page = paging.page; + } + + const offset = (page - 1) * pageSize; + const limit = pageSize; + if (!settings.noLimit) { + //el parser genera un LIMIT y un OFFSET pero es utilizado sobre el total registros recien en el cliente + settings.limit = limit; + settings.offset = offset; + } + }; + + /** + * Agrega un inclusion de relacion a un setting que se debe encontrar inicializado. + * + * @example + * + * const settings = utils.constructSettings({}, db.sequelize.Usuario, filters, orders, paging, generalFilter); + * utils.addIncludeToSetting(settings, db.sequelize.Hotel, 'hotel'); + * utils.addIncludeToSetting(settings, db.sequelize.Tipo, 'tipo'); + * return await db.sequelize.Usuario.findAndCountAll(settings); + * + * @param {object} setting + * @param {object} model + * @param {string} alias + */ + const addIncludeToSetting = ( + settings, + model, + alias + ) => { + if (!settings.include) { + settings.include = []; + } + let subsetting = settings.include.filter(x => x.as === alias)[0]; + if (!subsetting) { + subsetting = { + model: model, + as: alias + }; + settings.include.push(subsetting); + } + delete subsetting.attributes; + }; - const offset = (page - 1) * pageSize; - const limit = pageSize; - if (!settings.noLimit) { - //el parser genera un LIMIT y un OFFSET pero es utilizado sobre el total registros recien en el cliente - settings.limit = limit; - settings.offset = offset; - } -}); + /** + * Retorna un array de paths basicos del modelo que pueden ser utilizados posteriormente para + * la comparacion del filtro general. Por defecto, incluye todos los atributos basicos + * del modelo excluyendo los campos created_at, updated_at, deleted_at e id + * @param {Object} baseModel + */ + const constructPathsToCompare = baseModel => { + const pathsExcluded = ['created_at', 'updated_at', 'deleted_at', 'id']; + //Incluimos los paths del model que no se encuentran en el array de paths excluidos + const pathsToCompare = Object.keys(baseModel.rawAttributes).filter( + x => pathsExcluded.indexOf(x) < 0 + ); + return pathsToCompare; + }; -/** - * Agrega un inclusion de relacion a un setting que se debe encontrar inicializado. - * - * @example - * - * const settings = utils.constructSettings({}, db.sequelize.Usuario, filters, orders, paging, generalFilter); - * utils.addIncludeToSetting(settings, db.sequelize.Hotel, 'hotel'); - * utils.addIncludeToSetting(settings, db.sequelize.Tipo, 'tipo'); - * return await db.sequelize.Usuario.findAndCountAll(settings); - * - * @param {object} setting - * @param {object} model - * @param {string} alias - */ -const addIncludeToSetting = (exports.addIncludeToSetting = ( - settings, - model, - alias -) => { - if (!settings.include) { - settings.include = []; - } - let subsetting = settings.include.filter(x => x.as === alias)[0]; - if (!subsetting) { - subsetting = { - model: model, - as: alias - }; - settings.include.push(subsetting); - } - delete subsetting.attributes; -}); + /** + * * Retorna un array de paths del modelo que pueden ser utilizados posteriormente para + * la comparacion del filtro general. Incluye todos los campos resultantes de + * llamar a constructPathsToCompare, y se agrega los elementos del array pasado como parametro. + * + * @example + * + * + * const pathsInGeneralFilter = utils.constructExtendedPathsToCompare( + * db.sequelize.Usuario, ['tipo.nombre', 'hotel.nombre']) + * const settings = utils.constructSettings({}, db.sequelize.Usuario, filters, + * orders, paging, generalFilter, pathsInGeneralFilter); + * utils.addIncludeToSetting(settings, db.sequelize.Hotel, 'hotel'); + * utils.addIncludeToSetting(settings, db.sequelize.Tipo, 'tipo'); + * return await db.sequelize.Usuario.findAndCountAll(settings); + * + * + * @param {Object} baseModel + * @param {string[]} extendedPaths + */ + const constructExtendedPathsToCompare = ( + baseModel, + extendedPaths + ) => { + return [...constructPathsToCompare(baseModel), ...extendedPaths]; + }; -/** - * Retorna un array de paths basicos del modelo que pueden ser utilizados posteriormente para - * la comparacion del filtro general. Por defecto, incluye todos los atributos basicos - * del modelo excluyendo los campos created_at, updated_at, deleted_at e id - * @param {Object} baseModel - */ -const constructPathsToCompare = (exports.constructPathsToCompare = baseModel => { - const pathsExcluded = ['created_at', 'updated_at', 'deleted_at', 'id']; - //Incluimos los paths del model que no se encuentran en el array de paths excluidos - const pathsToCompare = Object.keys(baseModel.rawAttributes).filter( - x => pathsExcluded.indexOf(x) < 0 - ); - return pathsToCompare; -}); + return { + constructSettings, + getAliasedPath, + addPathToSettings, + constructGeneralFilter, + addFiltersToSettings, + addOrderToSettings, + addPagingToSettings, + addIncludeToSetting, + constructPathsToCompare, + constructExtendedPathsToCompare, + }; +}; -/** - * * Retorna un array de paths del modelo que pueden ser utilizados posteriormente para - * la comparacion del filtro general. Incluye todos los campos resultantes de - * llamar a constructPathsToCompare, y se agrega los elementos del array pasado como parametro. - * - * @example - * - * - * const pathsInGeneralFilter = utils.constructExtendedPathsToCompare( - * db.sequelize.Usuario, ['tipo.nombre', 'hotel.nombre']) - * const settings = utils.constructSettings({}, db.sequelize.Usuario, filters, - * orders, paging, generalFilter, pathsInGeneralFilter); - * utils.addIncludeToSetting(settings, db.sequelize.Hotel, 'hotel'); - * utils.addIncludeToSetting(settings, db.sequelize.Tipo, 'tipo'); - * return await db.sequelize.Usuario.findAndCountAll(settings); - * - * - * @param {Object} baseModel - * @param {string[]} extendedPaths - */ -const constructExtendedPathsToCompare = (exports.constructExtendedPathsToCompare = ( - baseModel, - extendedPaths -) => { - return [...constructPathsToCompare(baseModel), ...extendedPaths]; -}); +exports.getPersistenceUtils = getPersistenceUtils; diff --git a/package-lock.json b/package-lock.json index 12d5e1b..38d6ccd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-toolkit", - "version": "0.2.2", + "version": "0.3.5", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -19,7 +19,7 @@ "resolved": "https://registry.npmjs.org/abs/-/abs-1.3.10.tgz", "integrity": "sha1-napqQ1AQAfN/8VoexIIKRklW/8M=", "requires": { - "ul": "5.2.13" + "ul": "^5.0.0" } }, "ansi-escapes": { @@ -46,7 +46,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -83,7 +83,7 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -93,9 +93,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "buffer-equal-constant-time": { @@ -114,7 +114,7 @@ "integrity": "sha1-4TYwdeogahJ2fZK7cRyKL3ahD2I=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.1" } }, "capture-stack-trace": { @@ -128,11 +128,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-cursor": { @@ -141,7 +141,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-width": { @@ -155,8 +155,8 @@ "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.0.1.tgz", "integrity": "sha1-wlmkgK4CwOUGE0MHuxPbMERu4uc=", "requires": { - "is-bluebird": "1.0.2", - "shimmer": "1.1.0" + "is-bluebird": "^1.0.2", + "shimmer": "^1.1.0" } }, "code-point-at": { @@ -171,14 +171,14 @@ "integrity": "sha1-wNAFNe8mTaf2Nzft/aQiiYP6IpE=", "dev": true, "requires": { - "cachedir": "1.1.1", + "cachedir": "^1.1.0", "chalk": "1.1.3", "cz-conventional-changelog": "1.2.0", "dedent": "0.6.0", "detect-indent": "4.0.0", "find-node-modules": "1.0.4", "find-root": "1.0.0", - "fs-extra": "1.0.0", + "fs-extra": "^1.0.0", "glob": "7.1.1", "inquirer": "1.2.3", "lodash": "4.17.2", @@ -194,12 +194,12 @@ "integrity": "sha1-K8oElkyJGbI/P9aonvXmAIsxs/g=", "dev": true, "requires": { - "conventional-commit-types": "2.2.0", - "lodash.map": "4.6.0", - "longest": "1.0.1", - "pad-right": "0.2.2", - "right-pad": "1.0.1", - "word-wrap": "1.2.3" + "conventional-commit-types": "^2.0.0", + "lodash.map": "^4.5.1", + "longest": "^1.0.1", + "pad-right": "^0.2.2", + "right-pad": "^1.0.1", + "word-wrap": "^1.0.3" } }, "lodash": { @@ -222,9 +222,9 @@ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "conventional-commit-types": { @@ -243,7 +243,7 @@ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "cz-conventional-changelog": { @@ -252,12 +252,12 @@ "integrity": "sha1-Val5r9/pXnAkh50qD1kkYwFwtTM=", "dev": true, "requires": { - "conventional-commit-types": "2.2.0", - "lodash.map": "4.6.0", - "longest": "1.0.1", - "pad-right": "0.2.2", - "right-pad": "1.0.1", - "word-wrap": "1.2.3" + "conventional-commit-types": "^2.0.0", + "lodash.map": "^4.5.1", + "longest": "^1.0.1", + "pad-right": "^0.2.2", + "right-pad": "^1.0.1", + "word-wrap": "^1.0.3" } }, "debug": { @@ -284,7 +284,7 @@ "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.2.2.tgz", "integrity": "sha1-CI9AkTy0cHhlP6b2l8IG4DRx1SM=", "requires": { - "typpy": "2.3.9" + "typpy": "^2.0.0" } }, "depd": { @@ -298,7 +298,7 @@ "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", "dev": true, "requires": { - "fs-exists-sync": "0.1.0" + "fs-exists-sync": "^0.1.0" } }, "detect-indent": { @@ -307,7 +307,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "dottie": { @@ -320,7 +320,7 @@ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.2" } }, "ecdsa-sig-formatter": { @@ -328,8 +328,8 @@ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", "requires": { - "base64url": "2.0.0", - "safe-buffer": "5.1.1" + "base64url": "^2.0.0", + "safe-buffer": "^5.0.1" } }, "err": { @@ -337,7 +337,7 @@ "resolved": "https://registry.npmjs.org/err/-/err-1.1.1.tgz", "integrity": "sha1-65KOLhGjFmSPeCgz0PlyWLpDwvg=", "requires": { - "typpy": "2.3.9" + "typpy": "^2.2.0" } }, "error-ex": { @@ -345,7 +345,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "escape-string-regexp": { @@ -359,8 +359,8 @@ "resolved": "https://registry.npmjs.org/exec-limiter/-/exec-limiter-3.2.9.tgz", "integrity": "sha1-3wR2HxH5KfpITVmI+gbsdWYL7Rc=", "requires": { - "limit-it": "3.2.8", - "typpy": "2.3.9" + "limit-it": "^3.0.0", + "typpy": "^2.1.0" } }, "exit-hook": { @@ -375,7 +375,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -384,7 +384,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "expand-tilde": { @@ -393,7 +393,7 @@ "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.1" } }, "extend": { @@ -408,9 +408,9 @@ "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", "dev": true, "requires": { - "extend": "3.0.1", - "spawn-sync": "1.0.15", - "tmp": "0.0.29" + "extend": "^3.0.0", + "spawn-sync": "^1.0.15", + "tmp": "^0.0.29" }, "dependencies": { "tmp": { @@ -419,7 +419,7 @@ "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } } } @@ -430,7 +430,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "figures": { @@ -439,8 +439,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "filename-regex": { @@ -455,11 +455,11 @@ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "find-node-modules": { @@ -469,7 +469,7 @@ "dev": true, "requires": { "findup-sync": "0.4.2", - "merge": "1.2.0" + "merge": "^1.2.0" } }, "find-root": { @@ -484,10 +484,10 @@ "integrity": "sha1-qBF9D3MST1pFRoOVef5S1xKfteU=", "dev": true, "requires": { - "detect-file": "0.1.0", - "is-glob": "2.0.1", - "micromatch": "2.3.11", - "resolve-dir": "0.1.1" + "detect-file": "^0.1.0", + "is-glob": "^2.0.1", + "micromatch": "^2.3.7", + "resolve-dir": "^0.1.0" } }, "for-in": { @@ -502,7 +502,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "fs-exists-sync": { @@ -517,9 +517,9 @@ "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" } }, "fs.realpath": { @@ -533,7 +533,7 @@ "resolved": "https://registry.npmjs.org/function.name/-/function.name-1.0.9.tgz", "integrity": "sha1-kcRcj5HyACvGgIbGc4crYH3Yc8M=", "requires": { - "noop6": "1.0.7" + "noop6": "^1.0.1" } }, "generic-pool": { @@ -546,14 +546,14 @@ "resolved": "https://registry.npmjs.org/git-package-json/-/git-package-json-1.4.7.tgz", "integrity": "sha1-zRubQIh7vFvU1dIo/OrGHFB20JQ=", "requires": { - "deffy": "2.2.2", - "err": "1.1.1", - "gry": "5.0.7", - "normalize-package-data": "2.4.0", - "oargv": "3.4.8", - "one-by-one": "3.2.6", - "r-json": "1.2.8", - "r-package-json": "1.0.6", + "deffy": "^2.2.1", + "err": "^1.1.1", + "gry": "^5.0.0", + "normalize-package-data": "^2.3.5", + "oargv": "^3.4.1", + "one-by-one": "^3.1.0", + "r-json": "^1.2.1", + "r-package-json": "^1.0.0", "tmp": "0.0.28" } }, @@ -562,7 +562,7 @@ "resolved": "https://registry.npmjs.org/git-source/-/git-source-1.1.7.tgz", "integrity": "sha1-AJJHQdlghls0LUoIMSVfD/TyEcU=", "requires": { - "git-url-parse": "5.0.1" + "git-url-parse": "^5.0.1" } }, "git-up": { @@ -570,8 +570,8 @@ "resolved": "https://registry.npmjs.org/git-up/-/git-up-1.2.1.tgz", "integrity": "sha1-JkSAoAax2EJhrB/gmjpRacV+oZ0=", "requires": { - "is-ssh": "1.3.0", - "parse-url": "1.3.11" + "is-ssh": "^1.0.0", + "parse-url": "^1.0.0" } }, "git-url-parse": { @@ -579,7 +579,7 @@ "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-5.0.1.tgz", "integrity": "sha1-/j15xnRq4FBIz6UIyB553du6OEM=", "requires": { - "git-up": "1.2.1" + "git-up": "^1.0.0" } }, "glob": { @@ -588,12 +588,12 @@ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -602,8 +602,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -612,7 +612,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "global-modules": { @@ -621,8 +621,8 @@ "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", "dev": true, "requires": { - "global-prefix": "0.1.5", - "is-windows": "0.2.0" + "global-prefix": "^0.1.4", + "is-windows": "^0.2.0" } }, "global-prefix": { @@ -631,10 +631,10 @@ "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "0.2.0", - "which": "1.3.0" + "homedir-polyfill": "^1.0.0", + "ini": "^1.3.4", + "is-windows": "^0.2.0", + "which": "^1.2.12" } }, "got": { @@ -642,21 +642,21 @@ "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" } }, "graceful-fs": { @@ -670,10 +670,10 @@ "resolved": "https://registry.npmjs.org/gry/-/gry-5.0.7.tgz", "integrity": "sha1-3JjiUO13eOgsSpLCCNc1CzD56c8=", "requires": { - "abs": "1.3.10", - "exec-limiter": "3.2.9", - "one-by-one": "3.2.6", - "ul": "5.2.13" + "abs": "^1.2.1", + "exec-limiter": "^3.0.0", + "one-by-one": "^3.0.0", + "ul": "^5.0.0" } }, "has-ansi": { @@ -682,7 +682,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "hoek": { @@ -696,7 +696,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { @@ -715,8 +715,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -735,20 +735,20 @@ "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "external-editor": "1.1.1", - "figures": "1.7.0", - "lodash": "4.17.4", + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "external-editor": "^1.1.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", "mute-stream": "0.0.6", - "pinkie-promise": "2.0.1", - "run-async": "2.3.0", - "rx": "4.1.0", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" + "pinkie-promise": "^2.0.0", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" } }, "interpret": { @@ -778,7 +778,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-dotfile": { @@ -793,7 +793,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -814,7 +814,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -823,7 +823,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-glob": { @@ -832,7 +832,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-number": { @@ -841,7 +841,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-posix-bracket": { @@ -877,7 +877,7 @@ "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.0.tgz", "integrity": "sha1-6+oRaaJhTaOSpjdANmw84EnY3/Y=", "requires": { - "protocols": "1.4.6" + "protocols": "^1.1.0" } }, "is-stream": { @@ -926,10 +926,10 @@ "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", "requires": { - "hoek": "2.16.3", - "isemail": "1.2.0", - "moment": "2.19.1", - "topo": "1.1.0" + "hoek": "2.x.x", + "isemail": "1.x.x", + "moment": "2.x.x", + "topo": "1.x.x" } }, "jsonfile": { @@ -938,7 +938,7 @@ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonwebtoken": { @@ -946,11 +946,11 @@ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=", "requires": { - "joi": "6.10.1", - "jws": "3.1.4", - "lodash.once": "4.1.1", - "ms": "2.0.0", - "xtend": "4.0.1" + "joi": "^6.10.1", + "jws": "^3.1.4", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" } }, "jwa": { @@ -961,7 +961,7 @@ "base64url": "2.0.0", "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.9", - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "jws": { @@ -969,9 +969,9 @@ "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", "requires": { - "base64url": "2.0.0", - "jwa": "1.1.5", - "safe-buffer": "5.1.1" + "base64url": "^2.0.0", + "jwa": "^1.1.4", + "safe-buffer": "^5.0.1" } }, "kind-of": { @@ -980,7 +980,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "klaw": { @@ -989,7 +989,7 @@ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.9" } }, "koa-jwt": { @@ -1011,7 +1011,7 @@ "resolved": "https://registry.npmjs.org/limit-it/-/limit-it-3.2.8.tgz", "integrity": "sha1-uXsBRhzPVNt3fP3318Dty/sBCUo=", "requires": { - "typpy": "2.3.9" + "typpy": "^2.0.0" } }, "lodash": { @@ -1053,19 +1053,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "minimatch": { @@ -1074,7 +1074,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -1092,7 +1092,7 @@ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz", "integrity": "sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=", "requires": { - "moment": "2.19.1" + "moment": ">= 2.9.0" } }, "ms": { @@ -1121,10 +1121,10 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -1133,7 +1133,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "number-is-nan": { @@ -1147,8 +1147,8 @@ "resolved": "https://registry.npmjs.org/oargv/-/oargv-3.4.8.tgz", "integrity": "sha1-e248D8y9TEHkTLQy0PQLc+Ecg1g=", "requires": { - "iterate-object": "1.3.2", - "ul": "5.2.13" + "iterate-object": "^1.1.0", + "ul": "^5.0.0" } }, "obj-def": { @@ -1156,7 +1156,7 @@ "resolved": "https://registry.npmjs.org/obj-def/-/obj-def-1.0.6.tgz", "integrity": "sha1-d1ThcohJwvk00f3SvnL+Yn7LWxQ=", "requires": { - "deffy": "2.2.2" + "deffy": "^2.2.2" } }, "object-assign": { @@ -1170,8 +1170,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "once": { @@ -1180,7 +1180,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "one-by-one": { @@ -1188,8 +1188,8 @@ "resolved": "https://registry.npmjs.org/one-by-one/-/one-by-one-3.2.6.tgz", "integrity": "sha1-M+Pelthw+alL3LY/ontRcAvhESs=", "requires": { - "obj-def": "1.0.6", - "sliced": "1.0.1" + "obj-def": "^1.0.0", + "sliced": "^1.0.1" } }, "onetime": { @@ -1220,10 +1220,10 @@ "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", "requires": { - "got": "5.7.1", - "registry-auth-token": "3.3.1", - "registry-url": "3.1.0", - "semver": "5.4.1" + "got": "^5.0.0", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, "package-json-path": { @@ -1231,7 +1231,7 @@ "resolved": "https://registry.npmjs.org/package-json-path/-/package-json-path-1.0.7.tgz", "integrity": "sha1-wleQnEcBqbNfzjAwZNTOmISJ3S0=", "requires": { - "abs": "1.3.10" + "abs": "^1.2.1" } }, "package.json": { @@ -1239,9 +1239,9 @@ "resolved": "https://registry.npmjs.org/package.json/-/package.json-2.0.1.tgz", "integrity": "sha1-+IYFnSpJ7QduZIg2ldc7K0bSHW0=", "requires": { - "git-package-json": "1.4.7", - "git-source": "1.1.7", - "package-json": "2.4.0" + "git-package-json": "^1.4.0", + "git-source": "^1.1.0", + "package-json": "^2.3.1" } }, "pad-right": { @@ -1250,7 +1250,7 @@ "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", "dev": true, "requires": { - "repeat-string": "1.6.1" + "repeat-string": "^1.5.2" } }, "parse-glob": { @@ -1259,10 +1259,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -1270,7 +1270,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -1284,8 +1284,8 @@ "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz", "integrity": "sha1-V8FUKKuKiSsfQ4aWRccR0OFEtVQ=", "requires": { - "is-ssh": "1.3.0", - "protocols": "1.4.6" + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" } }, "path-exists": { @@ -1294,7 +1294,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -1319,7 +1319,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "prepend-http": { @@ -1353,8 +1353,8 @@ "resolved": "https://registry.npmjs.org/r-package-json/-/r-package-json-1.0.6.tgz", "integrity": "sha1-du7E94/EtcGsXD7NsIRA+ChEIsU=", "requires": { - "package-json-path": "1.0.7", - "r-json": "1.2.8" + "package-json-path": "^1.0.0", + "r-json": "^1.2.1" } }, "randomatic": { @@ -1363,8 +1363,8 @@ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -1373,7 +1373,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -1382,7 +1382,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -1393,7 +1393,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -1403,10 +1403,10 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" } }, "read-all-stream": { @@ -1414,8 +1414,8 @@ "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.3" + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" } }, "readable-stream": { @@ -1423,13 +1423,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "rechoir": { @@ -1438,7 +1438,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "^1.1.6" } }, "regex-cache": { @@ -1447,7 +1447,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "registry-auth-token": { @@ -1455,8 +1455,8 @@ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", "requires": { - "rc": "1.2.2", - "safe-buffer": "5.1.1" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -1464,7 +1464,7 @@ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "requires": { - "rc": "1.2.2" + "rc": "^1.0.1" } }, "remove-trailing-separator": { @@ -1491,7 +1491,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "resolve": { @@ -1500,7 +1500,7 @@ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-dir": { @@ -1509,8 +1509,8 @@ "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", "dev": true, "requires": { - "expand-tilde": "1.2.2", - "global-modules": "0.2.3" + "expand-tilde": "^1.2.2", + "global-modules": "^0.2.3" } }, "restore-cursor": { @@ -1519,8 +1519,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "retry-as-promised": { @@ -1528,8 +1528,8 @@ "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.1.tgz", "integrity": "sha1-91BZGD+XMHccCbrR7tV1N5McvJ0=", "requires": { - "bluebird": "3.5.1", - "debug": "2.6.9" + "bluebird": "^3.4.6", + "debug": "^2.2.0" }, "dependencies": { "debug": { @@ -1554,7 +1554,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rx": { @@ -1578,23 +1578,23 @@ "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.18.0.tgz", "integrity": "sha512-mq5ExgGArDq23fkhjbHHtElUBVO4r/gF9chH0jzCOR+vDMn7Dz/MAgrXR5t1RQHDOoXacTOXzMxJmXbICsZI8A==", "requires": { - "bluebird": "3.5.1", - "cls-bluebird": "2.0.1", - "debug": "3.1.0", - "depd": "1.1.1", - "dottie": "2.0.0", - "generic-pool": "3.2.0", + "bluebird": "^3.4.6", + "cls-bluebird": "^2.0.1", + "debug": "^3.0.0", + "depd": "^1.1.0", + "dottie": "^2.0.0", + "generic-pool": "^3.1.8", "inflection": "1.12.0", - "lodash": "4.17.4", - "moment": "2.19.1", - "moment-timezone": "0.5.13", - "retry-as-promised": "2.3.1", - "semver": "5.4.1", - "terraformer-wkt-parser": "1.1.2", - "toposort-class": "1.0.1", - "uuid": "3.1.0", - "validator": "9.1.1", - "wkx": "0.4.2" + "lodash": "^4.17.1", + "moment": "^2.13.0", + "moment-timezone": "^0.5.4", + "retry-as-promised": "^2.3.1", + "semver": "^5.0.1", + "terraformer-wkt-parser": "^1.1.2", + "toposort-class": "^1.0.1", + "uuid": "^3.0.0", + "validator": "^9.1.0", + "wkx": "^0.4.1" } }, "shelljs": { @@ -1603,9 +1603,9 @@ "integrity": "sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0=", "dev": true, "requires": { - "glob": "7.1.1", - "interpret": "1.0.4", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "shimmer": { @@ -1624,8 +1624,8 @@ "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", "dev": true, "requires": { - "concat-stream": "1.6.0", - "os-shim": "0.1.3" + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" } }, "spdx-correct": { @@ -1633,7 +1633,7 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "requires": { - "spdx-license-ids": "1.2.2" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { @@ -1646,23 +1646,23 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -1671,7 +1671,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -1690,7 +1690,7 @@ "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", "requires": { - "@types/geojson": "1.0.5" + "@types/geojson": "^1.0.0" } }, "terraformer-wkt-parser": { @@ -1698,7 +1698,7 @@ "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", "requires": { - "terraformer": "1.0.8" + "terraformer": "~1.0.5" } }, "through": { @@ -1717,7 +1717,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } }, "topo": { @@ -1725,7 +1725,7 @@ "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "toposort-class": { @@ -1744,7 +1744,7 @@ "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.3.9.tgz", "integrity": "sha1-KGZP2l6nHdcYck+J0ABgrx8Jw44=", "requires": { - "function.name": "1.0.9" + "function.name": "^1.0.3" } }, "ul": { @@ -1752,8 +1752,8 @@ "resolved": "https://registry.npmjs.org/ul/-/ul-5.2.13.tgz", "integrity": "sha1-n/BQTqNcofdMC/WeZIDe8Am617U=", "requires": { - "deffy": "2.2.2", - "typpy": "2.3.9" + "deffy": "^2.2.2", + "typpy": "^2.3.4" } }, "unzip-response": { @@ -1766,7 +1766,7 @@ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "util-deprecate": { @@ -1784,8 +1784,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" } }, "validator": { @@ -1799,7 +1799,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "wkx": { @@ -1807,7 +1807,7 @@ "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.2.tgz", "integrity": "sha1-d201pjSlwi5lbkdEvetU+D/Szo0=", "requires": { - "@types/node": "8.0.47" + "@types/node": "*" } }, "word-wrap": { diff --git a/package.json b/package.json index 8a97615..f1ea0b3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-toolkit", - "version": "0.3.4", + "version": "1.0.0", "description": "Helpers para crear APIs con NodeJS", "main": "app.js", "scripts": {