{"version":3,"file":"yonius.cjs","sources":["../js/api/observable.js","../js/util/assert.js","../js/util/fs.js","../js/util/config.js","../js/util/data.js","../js/util/mixins.js","../js/util/mongo.js","../js/util/object.js","../js/util/regex.js","../js/util/size.js","../js/util/string.js","../js/util/url.js","../js/base/error.js","../js/util/validation.js","../js/api/api.js","../js/api/oauth.js","../js/api/oauth1.js","../js/api/oauth2.js","../js/base/auth.js","../js/base/main.js","../js/base/struct.js","../js/data/typesf.js","../js/data/collection.js","../js/data/model.js","../js/express/auth.js","../js/rollup/plugins.js","../js/index.js"],"sourcesContent":["export class Observable {\r\n    constructor() {\r\n        this.callbacks = {};\r\n    }\r\n\r\n    bind(event, callback) {\r\n        const callbacks = this.callbacks[event] || [];\r\n        callbacks.push(callback);\r\n        this.callbacks[event] = callbacks;\r\n        return callback;\r\n    }\r\n\r\n    unbind(event, callback) {\r\n        const callbacks = this.callbacks[event] || [];\r\n        if (!callback) {\r\n            delete this.callbacks[event];\r\n            return;\r\n        }\r\n\r\n        const index = callbacks.indexOf(callback);\r\n        if (index === -1) {\r\n            return;\r\n        }\r\n        callbacks.splice(index, 1);\r\n        this.callbacks[event] = callbacks;\r\n    }\r\n\r\n    trigger(event) {\r\n        const callbacks = this.callbacks[event] || [];\r\n        const results = [];\r\n        for (const callback of callbacks) {\r\n            const result = callback.apply(this, Array.prototype.slice.call(arguments, 1));\r\n            result !== undefined && result !== null && results.push(result);\r\n        }\r\n        return Promise.all(results);\r\n    }\r\n}\r\n\r\nexport default Observable;\r\n","export const verify = function(\r\n    condition,\r\n    message = null,\r\n    code = null,\r\n    exception = null,\r\n    kwargs = {},\r\n    safeKeys = [\"message\"]\r\n) {\r\n    if (condition) return;\r\n    message = message || \"Verification failed\";\r\n    const Exception = exception || Error;\r\n    kwargs = Object.assign({}, kwargs);\r\n    if (message !== null && message !== undefined) kwargs.message = message;\r\n    if (code !== null && message !== undefined) kwargs.code = code;\r\n    const throwable = new Exception(kwargs.message || undefined);\r\n    throwable.kwargs = kwargs;\r\n    for (const [key, value] of Object.entries(kwargs)) {\r\n        if (safeKeys.includes(key) && throwable[key] !== undefined) {\r\n            continue;\r\n        }\r\n        throwable[key] = value;\r\n    }\r\n    throw throwable;\r\n};\r\n\r\nexport const verifyEqual = function(\r\n    first,\r\n    second,\r\n    message = null,\r\n    code = null,\r\n    exception = null,\r\n    kwargs = {}\r\n) {\r\n    message = message || `Expected ${first} got ${second}`;\r\n    return this.verify(first === second, message, code, exception, kwargs);\r\n};\r\n\r\nexport const verifyNotEqual = function(\r\n    first,\r\n    second,\r\n    message = null,\r\n    code = null,\r\n    exception = null,\r\n    kwargs = {}\r\n) {\r\n    message = message || `Expected ${first} not equal to ${second}`;\r\n    return this.verify(first !== second, message, code, exception, kwargs);\r\n};\r\n\r\nexport const verifyMany = function(\r\n    sequence,\r\n    message = null,\r\n    code = null,\r\n    exception = null,\r\n    kwargs = {}\r\n) {\r\n    sequence.forEach(element => {\r\n        verify(element, message, code, exception, kwargs);\r\n    });\r\n};\r\n\r\nexport default verify;\r\n","import * as fs from \"fs\";\r\nimport { join } from \"path\";\r\nimport { env } from \"process\";\r\n\r\nlet HOME_DIR = null;\r\n\r\nexport const pathExists = async function(path) {\r\n    try {\r\n        await fs.promises.access(path);\r\n    } catch (err) {\r\n        return false;\r\n    }\r\n    return true;\r\n};\r\n\r\nexport const expandUser = function(path) {\r\n    if (!path) return path;\r\n    if (path === \"~\") return _homeDir();\r\n    if (path.slice(0, 2) !== \"~/\") return path;\r\n    return join(HOME_DIR, path.slice(2));\r\n};\r\n\r\nexport const getEnv = function(name) {\r\n    // eslint-disable-next-line no-undef\r\n    if (typeof Deno !== \"undefined\") return Deno.env.get(name);\r\n    return env[name];\r\n};\r\n\r\nexport const getEnvObject = function() {\r\n    // eslint-disable-next-line no-undef\r\n    if (typeof Deno !== \"undefined\") return Deno.env.toObject();\r\n    return env;\r\n};\r\n\r\nconst _homeDir = function() {\r\n    if (HOME_DIR !== null) return HOME_DIR;\r\n    const isWindows = Boolean(typeof process !== \"undefined\" && process.platform === \"win32\");\r\n    HOME_DIR = getEnv(isWindows ? \"USERPROFILE\" : \"HOME\") || \"/\";\r\n    return HOME_DIR;\r\n};\r\n","import * as fs from \"fs\";\r\nimport { resolve, join, normalize, dirname } from \"path\";\r\nimport { pathExists, expandUser, getEnvObject } from \"./fs\";\r\n\r\nconst FILE_NAME = \"yonius.json\";\r\n\r\nconst HOME_FILE = \"~/.home\";\r\n\r\nconst IMPORT_NAMES = [\"$import\", \"$include\", \"$IMPORT\", \"$INCLUDE\"];\r\n\r\nconst CASTS = {\r\n    int: v => (typeof v === \"number\" ? v : parseInt(v)),\r\n    float: v => (typeof v === \"number\" ? v : parseFloat(v)),\r\n    bool: v => (typeof v === \"boolean\" ? v : [\"1\", \"true\", \"True\"].includes(v)),\r\n    list: v => (Array.isArray(v) ? v : v.split(\";\")),\r\n    tuple: v => (Array.isArray(v) ? v : v.split(\";\"))\r\n};\r\n\r\nexport const globals =\r\n    typeof global === \"undefined\"\r\n        ? typeof window === \"undefined\"\r\n            ? typeof self === \"undefined\"\r\n                ? {}\r\n                : self\r\n            : window\r\n        : global;\r\n\r\nglobals.CONFIGS = globals.CONFIGS === undefined ? {} : globals.CONFIGS;\r\n\r\nglobals.CONFIG_F = globals.CONFIG_F === undefined ? [] : globals.CONFIG_F;\r\n\r\nglobals.HOMES = globals.HOMES === undefined ? [] : globals.HOMES;\r\n\r\nglobals.LOADED = globals.LOADED === undefined ? false : globals.LOADED;\r\n\r\nexport const conf = function(name, fallback = undefined, cast = null, ctx = null) {\r\n    const configs = ctx ? ctx.configs : globals.CONFIGS;\r\n    cast = _castR(cast);\r\n    let value = configs[name] === undefined ? fallback : configs[name];\r\n    if (cast && value !== undefined && value !== null) value = cast(value);\r\n    return value;\r\n};\r\n\r\nexport const confP = async function(name, fallback = undefined, cast = null, ctx = null) {\r\n    await load();\r\n    return conf(name, fallback, cast, ctx);\r\n};\r\n\r\nexport const confS = function(name, value, ctx = null) {\r\n    const configs = ctx ? ctx.configs : globals.CONFIGS;\r\n    configs[name] = value;\r\n};\r\n\r\nexport const load = async function(\r\n    names = [FILE_NAME],\r\n    path = null,\r\n    encoding = \"utf-8\",\r\n    force = false,\r\n    ctx = null\r\n) {\r\n    if (globals.LOADED && !force) return;\r\n    let paths = [];\r\n    const homes = await getHomes();\r\n    for (const home of homes) {\r\n        paths = paths.concat([join(home), join(home, \".config\")]);\r\n    }\r\n    paths.push(path);\r\n    for (const path of paths) {\r\n        for (const name of names) {\r\n            await loadFile(name, path, encoding, ctx);\r\n        }\r\n    }\r\n    await loadEnv(ctx);\r\n    globals.LOADED = true;\r\n};\r\n\r\nexport const loadFile = async function(\r\n    name = FILE_NAME,\r\n    path = null,\r\n    encoding = \"utf-8\",\r\n    ctx = null\r\n) {\r\n    const configs = ctx ? ctx.configs : globals.CONFIGS;\r\n    const configF = ctx ? ctx.configF : globals.CONFIG_F;\r\n\r\n    let key;\r\n    let value;\r\n    let exists;\r\n    let filePath;\r\n\r\n    if (path) path = normalize(path);\r\n    if (path) filePath = join(path, name);\r\n    else filePath = name;\r\n\r\n    filePath = resolve(filePath);\r\n    filePath = normalize(filePath);\r\n    const basePath = dirname(filePath);\r\n\r\n    exists = await pathExists(filePath);\r\n    if (!exists) return;\r\n\r\n    exists = configF.includes(filePath);\r\n    if (exists) configF.splice(configF.indexOf(filePath), 1);\r\n    configF.push(filePath);\r\n\r\n    const data = await fs.promises.readFile(filePath, { encoding: encoding });\r\n    const dataJ = JSON.parse(data);\r\n\r\n    await _loadIncludes(basePath, dataJ, encoding);\r\n\r\n    for ([key, value] of Object.entries(dataJ)) {\r\n        if (!_isValid(key)) continue;\r\n        configs[key] = value;\r\n    }\r\n};\r\n\r\nexport const loadEnv = async function(ctx = null) {\r\n    const env = getEnvObject();\r\n    const configs = ctx ? ctx.configs : globals.CONFIGS;\r\n    if (env === undefined || env === null) return;\r\n    Object.entries(env).forEach(function([key, value]) {\r\n        configs[key] = value;\r\n    });\r\n};\r\n\r\nexport const getHomes = async function(\r\n    filePath = HOME_FILE,\r\n    fallback = \"~\",\r\n    encoding = \"utf-8\",\r\n    forceDefault = false\r\n) {\r\n    if (globals.HOMES.length > 0) return globals.HOMES;\r\n\r\n    const env = getEnvObject();\r\n\r\n    globals.HOMES = env.HOMES === undefined ? null : env.HOMES;\r\n    globals.HOMES = globals.HOMES ? globals.HOMES.split(\";\") : globals.HOMES;\r\n    if (globals.HOMES !== null) return globals.HOMES;\r\n\r\n    fallback = expandUser(fallback);\r\n    fallback = normalize(fallback);\r\n    globals.HOMES = [fallback];\r\n\r\n    filePath = expandUser(filePath);\r\n    filePath = normalize(filePath);\r\n    const exists = await pathExists(filePath);\r\n    if (!exists) return globals.HOMES;\r\n\r\n    if (!forceDefault) globals.HOMES.splice(0, globals.HOMES.length);\r\n\r\n    let data = await fs.promises.readFile(filePath, { encoding: encoding });\r\n    data = data.trim();\r\n\r\n    let paths = data.split(/\\r?\\n/);\r\n    paths = paths.map(v => v.trim());\r\n\r\n    for (let path of paths) {\r\n        path = path.trim();\r\n        if (!path) continue;\r\n        path = expandUser(path);\r\n        path = normalize(path);\r\n        globals.HOMES.push(path);\r\n    }\r\n\r\n    return globals.HOMES;\r\n};\r\n\r\nexport const _castR = function(cast) {\r\n    return CASTS[cast] === undefined ? cast : CASTS[cast];\r\n};\r\n\r\nexport const _loadIncludes = async function(basePath, config, encoding = \"utf-8\") {\r\n    let includes = [];\r\n\r\n    for (const alias of IMPORT_NAMES) {\r\n        includes = config[alias] === undefined ? includes : config[alias];\r\n    }\r\n\r\n    if (typeof includes === \"string\") {\r\n        includes = includes.split(\";\");\r\n    }\r\n\r\n    for (const include of includes) {\r\n        await loadFile(include, basePath, encoding);\r\n    }\r\n};\r\n\r\nexport const _isValid = function(key) {\r\n    if (IMPORT_NAMES.includes(key)) return false;\r\n    return true;\r\n};\r\n\r\nexport const _isDevel = function() {\r\n    return [\"DEBUG\"].includes(conf(\"LEVEL\", \"INFO\"));\r\n};\r\n\r\nexport const _isSecure = function() {\r\n    return conf(\"SECURE\", true, \"bool\");\r\n};\r\n\r\nexport default conf;\r\n","/**\r\n * The map containing the various attribute alias between the normalized\r\n * manned and the Yonius manner.\r\n */\r\nexport const ALIAS = {\r\n    context: \"find_d\",\r\n    filters: \"find_d\",\r\n    \"filters[]\": \"find_d\",\r\n    filter_def: \"find_d\",\r\n    filter_string: \"find_s\",\r\n    filter_name: \"find_n\",\r\n    filter_operator: \"find_o\",\r\n    insensitive: \"find_i\",\r\n    order: \"sort\",\r\n    offset: \"skip\",\r\n    start_record: \"skip\",\r\n    number_records: \"limit\"\r\n};\r\n\r\n/**\r\n * The map associating the various find fields with their respective\r\n * types, note that in case a special conversion operation is required\r\n * the associated value may represent a conversion function instead.\r\n */\r\nexport const FIND_TYPES = {\r\n    skip: v => parseInt(v),\r\n    limit: v => Math.max(0, parseInt(v)),\r\n    find_s: v => v,\r\n    find_d: v => (Array.isArray(v) ? v : [v]),\r\n    find_i: v => Boolean(v),\r\n    find_t: v => v,\r\n    find_n: v => v,\r\n    find_o: v => v,\r\n    sort: v => _toSort(v),\r\n    meta: v => Boolean(v),\r\n    fields: v => v\r\n};\r\n\r\n/**\r\n * The map that defines the various default values for a series of\r\n * find related attributes.\r\n */\r\nexport const FIND_DEFAULTS = { limit: 10 };\r\n\r\n/**\r\n * The map associating the normalized (text) way of representing sorting\r\n * with the current infra-structure number way of representing the same\r\n * information.\r\n */\r\nexport const SORT_MAP = {\r\n    1: 1,\r\n    \"-1\": -1,\r\n    ascending: 1,\r\n    descending: -1\r\n};\r\n\r\nexport const getObject = function(params = {}, options = {}) {\r\n    const { alias = false, page = false, find = false, norm = true } = options;\r\n    let result = params;\r\n\r\n    // in case the alias flag is set tries to resolve the attribute alias and\r\n    // in case the find types are set converts the find based attributes using\r\n    // the currently defined mapping map\r\n    if (alias) result = _resolveAlias(result);\r\n    if (page) result = _pageTypes(result);\r\n    if (find) {\r\n        result = _findTypes(result);\r\n        result = _findDefaults(result, options);\r\n    }\r\n\r\n    // in case the normalization flag is set runs the normalization of the\r\n    // provided object so that sequences are properly handled as defined in\r\n    // the specification (this allows multiple references)\r\n    if (norm) result = _normParams(result);\r\n\r\n    // returns the constructed object to the caller method this object\r\n    // should be a structured representation of the data in the request\r\n    return result;\r\n};\r\n\r\nconst _resolveAlias = function(params) {\r\n    const result = {};\r\n    Object.entries(params).forEach(([key, value]) => {\r\n        result[ALIAS[key] || key] = value;\r\n    });\r\n    return result;\r\n};\r\n\r\nconst _pageTypes = function(params, defaultSize = 50) {\r\n    const result = Object.assign({}, params);\r\n\r\n    const page = parseInt(params.page || 1);\r\n    const size = parseInt(params.size || defaultSize);\r\n    const offset = page - 1;\r\n    result.skip = offset * size;\r\n    result.limit = size;\r\n\r\n    const sorter = params.sorter;\r\n    const direction = params.direction || \"descending\";\r\n    if (sorter) result.sort = `${sorter}:${direction}`;\r\n\r\n    return result;\r\n};\r\n\r\nconst _toSort = function(value) {\r\n    const values = value.split(\":\", 2);\r\n    if (values.length === 1) values.push(\"descending\");\r\n    const [name, direction] = values;\r\n    if (name === \"default\") return null;\r\n    values[1] = SORT_MAP[direction] || 1;\r\n    return [values];\r\n};\r\n\r\nconst _findTypes = function(params) {\r\n    const result = {};\r\n    Object.entries(params).forEach(([key, value]) => {\r\n        const converter = FIND_TYPES[key];\r\n        const converted = converter ? converter(value) : value;\r\n        result[key] = converted;\r\n    });\r\n    return result;\r\n};\r\n\r\nconst _findDefaults = function(params, options = {}) {\r\n    const result = Object.assign({}, params);\r\n    Object.entries(options)\r\n        .filter(([key]) => FIND_TYPES[key])\r\n        .forEach(([key, value]) => {\r\n            result[key] = params[key] ?? value;\r\n        });\r\n    Object.entries(FIND_DEFAULTS).forEach(([key, value]) => {\r\n        result[key] = params[key] ?? value;\r\n    });\r\n    return result;\r\n};\r\n\r\nconst _normParams = function(params) {\r\n    const result = Object.assign({}, params);\r\n\r\n    // iterates over all the key value association in the object,\r\n    // trying to find the ones that refer sequences so that they\r\n    // may be normalized\r\n    for (const [key, value] of Object.entries(params)) {\r\n        // verifies if the current name references a sequence and\r\n        // if that's not the case continues the loop trying to find\r\n        // any other sequence based value\r\n        if (!key.endsWith(\"[]\")) {\r\n            result[key] = value;\r\n            continue;\r\n        }\r\n\r\n        // removes the extra sequence indication value\r\n        const name = key.substring(0, key.length - 2);\r\n\r\n        // in case the current value is not valid (empty) the object\r\n        // is set with an empty list for the current iteration as this\r\n        // is considered to be the default value\r\n        if (!value) {\r\n            result[name] = [];\r\n            continue;\r\n        }\r\n\r\n        // retrieves the normalized and linearized list of leafs\r\n        // for the current value and ten verifies the size of each\r\n        // of its values and uses it to measure the number of\r\n        // dictionary elements that are going to be contained in\r\n        // the sequence to be \"generated\", then uses this (size)\r\n        // value to pre-generate the complete set of dictionaries\r\n        const leafs = _leafs(value);\r\n        const [, values] = leafs[0] || [null, []];\r\n        const list = values.map(_ => ({}));\r\n\r\n        // sets the list of generates dictionaries in the object for\r\n        // the newly normalized name of structure\r\n        result[name] = list;\r\n\r\n        // iterates over the complete set of key value pairs in the\r\n        // leafs list to gather the value into the various objects that\r\n        // are contained in the sequence (normalization process)\r\n        for (const [name, value] of leafs) {\r\n            for (let index; index < list.length; index++) {\r\n                const object = list[index];\r\n                const nameList = name.split(\".\");\r\n                _setObject(object, nameList, value[index]);\r\n            }\r\n        }\r\n    }\r\n\r\n    return result;\r\n};\r\n\r\n/**\r\n * Retrieves a list containing a series of tuples that each represent a\r\n * leaf of the current object structure. A leaf is the last element of an\r\n * object that is not a map, the other intermediary maps are considered to\r\n * be trunks and should be percolated recursively.\r\n * This is a recursive function that takes some memory for the construction\r\n * of the list, and so should be used with the proper care to avoid bottlenecks.\r\n *\r\n * @param {Object} params The object for which the leafs list structure is\r\n * meant to be retrieved.\r\n * @returns {Array} The list of leaf node tuples for the provided object,\r\n * as requested for each of the sequences.\r\n */\r\nconst _leafs = function(params) {\r\n    // the list that will hold the various leaf nodes \"gathered\" by\r\n    // the current recursion function\r\n    let result = [];\r\n\r\n    // iterates over all the key and value relations in the object trying\r\n    // to find the leaf nodes (no map nodes) creating a tuple of fqn\r\n    // (fully qualified name) and value\r\n    for (const [key, value] of Object.entries(params)) {\r\n        // retrieves the data type for the current value and validation\r\n        // if it is a object or any other type in case it's an object a\r\n        // new iteration step must be performed retrieving the leafs of\r\n        // the value and then incrementing the name with the current prefix\r\n        if (typeof value === \"object\") {\r\n            const leafs = _leafs(value).map(([name, value]) => [`${key}.${name}`, value]);\r\n            result = Array.concat(result, leafs);\r\n        } else {\r\n            // otherwise this is a leaf node and so the leaf tuple node\r\n            // must be constructed with the current value (properly validated\r\n            // for sequence presence)\r\n            result.push([key, Array.isArray(value) ? value : [value]]);\r\n        }\r\n    }\r\n\r\n    return result;\r\n};\r\n\r\n/**\r\n * Sets a composite value in an object, allowing for dynamic setting of\r\n * random size key values.\r\n * This method is useful for situations where one wants to set a value\r\n * at a randomly defined depth inside an object without having to much\r\n * work with the creation of the inner dictionaries.\r\n *\r\n * @param {Object} object The target object that is going to be\r\n * changed and set with the target value.\r\n * @param {Array} nameList The list of names that defined the fully\r\n * qualified name to be used in the setting of the value\r\n * for example path.to.end will be a three size list containing each\r\n * of the partial names.\r\n * @param {Object} value The value that is going to be set in the\r\n * defined target of the object.\r\n */\r\nconst _setObject = function(object, nameList, value) {\r\n    // retrieves the first name in the names list this is the\r\n    // value that is going to be used for the current iteration\r\n    const [name, ...tail] = nameList[0];\r\n\r\n    // in case the length of the current names list has reached\r\n    // one this is the final iteration and so the value is set\r\n    // at the current naming point\r\n    if (nameList.length === 1) {\r\n        object[name] = value;\r\n    } else {\r\n        // otherwise this is a \"normal\" step and so a new map must\r\n        // be created/retrieved and the iteration step should be\r\n        // performed on this new map as it's set on the current naming\r\n        // place (recursion step)\r\n\r\n        const map = object[name] || {};\r\n        object[name] = map;\r\n        _setObject(map, tail, value);\r\n    }\r\n};\r\n\r\nexport default getObject;\r\n","export class MixinBuilder {\r\n    constructor(superclass) {\r\n        this.superclass = superclass;\r\n    }\r\n\r\n    with(...mixins) {\r\n        return mixins.reduce((c, mixin) => mixin(c), this.superclass);\r\n    }\r\n}\r\n\r\nexport const mix = superclass => new MixinBuilder(superclass);\r\n\r\nexport default mix;\r\n","export const initMongo = async (mongoose, uri) => {\r\n    _setSafe(mongoose, \"useNewUrlParser\", true);\r\n    _setSafe(mongoose, \"useFindAndModify\", false);\r\n    _setSafe(mongoose, \"useCreateIndex\", true);\r\n    _setSafe(mongoose, \"useUnifiedTopology\", true);\r\n    _setSafe(mongoose, \"strictQuery\", true);\r\n    try {\r\n        await mongoose.connect(uri, {\r\n            useNewUrlParser: true,\r\n            useUnifiedTopology: true\r\n        });\r\n    } catch (err) {\r\n        await mongoose.connect(uri);\r\n    }\r\n};\r\n\r\nexport const destroyMongo = async mongoose => {\r\n    await mongoose.disconnect();\r\n};\r\n\r\nconst _setSafe = (mongoose, key, value) => {\r\n    try {\r\n        mongoose.set(key, value);\r\n    } catch (err) {\r\n        // silently ignore errors when setting mongoose options\r\n    }\r\n};\r\n","export const equal = function(first, second) {\r\n    if (first === second) {\r\n        return true;\r\n    }\r\n\r\n    if (typeof_(first) !== typeof_(second)) {\r\n        return false;\r\n    }\r\n\r\n    if (isPrimitive(first) && isPrimitive(second)) {\r\n        return first === second;\r\n    }\r\n\r\n    if (first instanceof Date && second instanceof Date) {\r\n        return first === second;\r\n    }\r\n\r\n    if (Object.keys(first).length !== Object.keys(second).length) {\r\n        return false;\r\n    }\r\n\r\n    for (const key in first) {\r\n        if (!(key in second)) return false;\r\n        if (!equal(first[key], second[key])) return false;\r\n    }\r\n\r\n    return true;\r\n};\r\n\r\nexport const isPrimitive = function(object) {\r\n    return object !== Object(object);\r\n};\r\n\r\nexport const typeof_ = function(object) {\r\n    if (object === null) return \"null\";\r\n    if (Array.isArray(object)) return \"array\";\r\n    return typeof object;\r\n};\r\n\r\nexport default equal;\r\n","const matchOperatorsRegex = /[|\\\\{}()[\\]^$+*?.-]/g;\r\n\r\nexport const escapeStringRegexp = function(string) {\r\n    if (typeof string !== \"string\") {\r\n        throw new TypeError(\"Expected a string\");\r\n    }\r\n\r\n    return string.replace(matchOperatorsRegex, \"\\\\$&\");\r\n};\r\n","/* The default minimum value meaning that this is the\r\nmaximum value that one integer value may have for the\r\nsize rounding operation to be performed */\r\nconst DEFAULT_MINIMUM = 1024;\r\n\r\n/* The default number of places (digits) that are going\r\nto be used for the string representation in the round\r\nbased conversion of size units to be performed */\r\nconst DEFAULT_PLACES = 3;\r\n\r\n/* The size unit coefficient as an integer value, this is\r\ngoing to be used in each of the size steps as divisor */\r\nconst SIZE_UNIT_COEFFICIENT = 1024;\r\n\r\n/* The simplified size units list that contains the complete set of\r\nunits indexed by the depth they represent */\r\nconst SIZE_UNITS_LIST_S = [\"B\", \"K\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"];\r\n\r\n/* The size units list that contains the complete set of\r\nunits indexed by the depth they represent */\r\nconst SIZE_UNITS_LIST = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n\r\nexport const sizeRoundUnit = function(\r\n    sizeValue,\r\n    minimum = DEFAULT_MINIMUM,\r\n    places = DEFAULT_PLACES,\r\n    reduce = true,\r\n    space = false,\r\n    justify = false,\r\n    simplified = false,\r\n    depth = 0\r\n) {\r\n    // in case the current size value is acceptable (less than\r\n    // the minimum) this is the final iteration and the final\r\n    // string representation is going to be created\r\n    if (sizeValue < minimum) {\r\n        // calculates the maximum size of the string that is going\r\n        // to represent the base size value as the number of places\r\n        // plus one (representing the decimal separator character)\r\n        const sizeS = places + 1;\r\n\r\n        // calculates the target number of decimal places taking\r\n        // into account the size (in digits) of the current size\r\n        // value, this may never be a negative number\r\n        const logValue = sizeValue && Math.log10(sizeValue);\r\n        const digits = Math.trunc(logValue) + 1;\r\n        places = places - digits;\r\n        places = places > 0 ? places : 0;\r\n\r\n        // rounds the size value, then converts the rounded\r\n        // size value into a string based representation\r\n        let sizeValueS = sizeValue.toFixed(places);\r\n\r\n        // forces the reduce flag when the depth is zero, meaning\r\n        // that an integer value will never be decimal, this is\r\n        // required to avoid strange results for depth zero\r\n        reduce = reduce || depth === 0;\r\n\r\n        // in case the dot value is not present in the size value\r\n        // string adds it to the end otherwise an issue may occur\r\n        // while removing extra padding characters for reduce\r\n        if (reduce && !sizeValueS.includes(\".\")) sizeValueS += \".\";\r\n\r\n        // strips the value from zero appended to the right and\r\n        // then strips the value also from a possible decimal\r\n        // point value that may be included in it, this is only\r\n        // performed in case the reduce flag is enabled\r\n        if (reduce) sizeValueS = sizeValueS.replace(/0+$/, \"\");\r\n        if (reduce) sizeValueS = sizeValueS.replace(/\\.$/, \"\");\r\n\r\n        // in case the justify flag is set runs the justification\r\n        // process on the size value taking into account the maximum\r\n        // size of the associated size string\r\n        if (justify) sizeValueS = _rjust(sizeValueS, sizeS);\r\n        // retrieves the size unit (string mode) for the current\r\n        // depth according to the provided map\r\n        let sizeUnit;\r\n        if (simplified) sizeUnit = SIZE_UNITS_LIST_S[depth];\r\n        else sizeUnit = SIZE_UNITS_LIST[depth];\r\n\r\n        // retrieves the appropriate separator based\r\n        // on the value of the space flag\r\n        const separator = (space && \" \") || \"\";\r\n\r\n        // creates the size value string appending the rounded\r\n        // size value string and the size unit and returns it\r\n        // to the caller method as the size value string\r\n        const sizeValueString = sizeValueS + separator + sizeUnit;\r\n        return sizeValueString;\r\n    }\r\n    // otherwise the value is not acceptable and a new iteration\r\n    // must be ran with one less depth of size value\r\n    else {\r\n        // re-calculates the new size value, increments the depth\r\n        // and runs the size round unit again with the new values\r\n        const newSizeValue = parseFloat(sizeValue) / SIZE_UNIT_COEFFICIENT;\r\n        const newDepth = depth + 1;\r\n        return sizeRoundUnit(\r\n            newSizeValue,\r\n            minimum,\r\n            places,\r\n            reduce,\r\n            space,\r\n            justify,\r\n            simplified,\r\n            newDepth\r\n        );\r\n    }\r\n};\r\n\r\nconst _rjust = function(str, length) {\r\n    const lengthToFill = length - str.length;\r\n    return lengthToFill <= 0 ? str : \" \".repeat(lengthToFill) + str;\r\n};\r\n","export const camelToUnderscore = function(value, separator = \"_\") {\r\n    if (!value) return value;\r\n    return value\r\n        .replace(/\\.?([A-Z])/g, (x, y) => separator + y.toLowerCase())\r\n        .replace(RegExp(\"^\" + separator), \"\");\r\n};\r\n\r\nexport const underscoreToCamel = function(value, lower = false, separator = \"_\") {\r\n    if (!value) return value;\r\n    const slices = value.split(separator);\r\n    return slices\r\n        .map((s, i) => {\r\n            if (i === 0 && lower) return s.charAt(0).toLowerCase() + s.slice(1);\r\n            return s.charAt(0).toUpperCase() + s.slice(1);\r\n        })\r\n        .join(\"\");\r\n};\r\n","import { conf } from \"./config\";\r\n\r\n/**\r\n * Encodes the multiple values as and encoded URI component, the\r\n * values can be wither defined as an array (order is preserved)\r\n * or as an object (where sequence order is not preserved).\r\n *\r\n * The value of each item can be either a primitive type or a sequence\r\n * in case it's of sequence the values are going to be encoded as\r\n * multiple parameters separated by the '&' character.\r\n *\r\n * @param {(Array|Object[])} values The values to be encoded as an\r\n * URI component (like GET params).\r\n * @returns {String} A string with the query encoded values.\r\n */\r\nexport const urlEncode = function(values) {\r\n    // constructs the parts array that is going to\r\n    // store the multiple and values\r\n    const parts = [];\r\n\r\n    // in case the provided value is not an array\r\n    // then assumes it's an object and retrieve entries\r\n    if (!Array.isArray(values)) {\r\n        values = Object.entries(values);\r\n    }\r\n\r\n    // iterates over the complete set of pairs available\r\n    // from the key value pairs to be able to encode them\r\n    // properly, notice that the values themselves can be\r\n    // sequences allowing multiple repetition of key\r\n    values.forEach(([key, value]) => {\r\n        if (!Array.isArray(value)) {\r\n            value = [value];\r\n        }\r\n        const keyEncoded = encodeURIComponent(key);\r\n        value.forEach(_value => {\r\n            if (_value === undefined || _value === null) {\r\n                return;\r\n            }\r\n            const valueEncoded = encodeURIComponent(_value);\r\n            parts.push(`${keyEncoded}=${valueEncoded}`);\r\n        });\r\n    });\r\n\r\n    // joins the complete set of parts with the and\r\n    // separator and then returns the final string value\r\n    return parts.join(\"&\");\r\n};\r\n\r\nexport const absoluteUrl = function(path, name = \"BASE_URL\", fallback = undefined) {\r\n    const baseUrl = conf(name, fallback);\r\n    if (!baseUrl) return null;\r\n    return `${baseUrl}${path}`;\r\n};\r\n\r\nexport default urlEncode;\r\n","export class YoniusError extends Error {\r\n    constructor(message, code = 500) {\r\n        super(message);\r\n        this.name = this.constructor.name;\r\n        this.message = message;\r\n        this.code = code;\r\n    }\r\n\r\n    get isClient() {\r\n        return Math.floor(this.code / 100) === 4;\r\n    }\r\n\r\n    get isServer() {\r\n        return Math.floor(this.code / 100) === 5;\r\n    }\r\n}\r\n\r\nexport class OperationalError extends YoniusError {\r\n    constructor(message = \"Operational error\", code = 500) {\r\n        super(message, code);\r\n    }\r\n}\r\n\r\nexport class NotFoundError extends OperationalError {\r\n    constructor(message = \"Not found\", code = 404) {\r\n        super(message, code);\r\n    }\r\n}\r\n\r\nexport class NotImplementedError extends OperationalError {\r\n    constructor(message = \"Not implemented\", code = 501) {\r\n        super(message, code);\r\n    }\r\n}\r\n\r\nexport class ValidationError extends OperationalError {\r\n    constructor(message = \"Validation of submitted data failed\", code = 400) {\r\n        super(message, code);\r\n    }\r\n}\r\n\r\nexport class AttributeError extends YoniusError {\r\n    constructor(message = \"Attribute not found\") {\r\n        super(message);\r\n    }\r\n}\r\n\r\nexport default YoniusError;\r\n","import { ValidationError } from \"../base/error\";\r\n\r\n/**\r\n * The simple regex used to validate\r\n * if the provided value is a \"simple\" one meaning\r\n * that it may be used safely for URL parts\r\n */\r\nconst SIMPLE_REGEX = /^[\\:\\.\\s\\w-]+$/;\r\n\r\n/**\r\n * The email regex used to validate\r\n * if the provided value is in fact an email\r\n */\r\nconst EMAIL_REGEX = /^[\\w\\d\\._%+-]+@[\\w\\d\\.\\-]+$/;\r\n\r\n/**\r\n * The URL regex used to validate\r\n * if the provided value is in fact an URL/URI\r\n */\r\nconst URL_REGEX = /^\\w+\\:\\/\\/([^@]+\\:[^@]+@)?[^\\:\\/\\?#]+(\\:\\d+)?(\\/[^\\?#]+)*\\/?(\\?[^#]*)?(#.*)?$/;\r\n\r\nexport const eq = function(valueC, message = \"Must be equal to %{1}\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value === valueC) return true;\r\n        throw new ValidationError(message.replace(\"%{1}\", String(valueC)));\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const gt = function(valueC, message = \"Must be greater than %{1}\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value > valueC) return true;\r\n        throw new ValidationError(message.replace(\"%{1}\", String(valueC)));\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const gte = function(valueC, message = \"Must be greater than or equal to %{1}\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value >= valueC) return true;\r\n        throw new ValidationError(message.replace(\"%{1}\", String(valueC)));\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const notEmpty = function(message = \"Value is empty\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value.length) return true;\r\n        throw new ValidationError(message);\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const isIn = function(valueC, message = \"Value must be one of: %{1}\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (valueC.includes(value)) return true;\r\n        throw new ValidationError(message.replace(\"%{1}\", valueC.join(\", \")));\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const isUpper = function(message = \"Value contains lower cased characters\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value === \"\") return true;\r\n        if (value === value.toUpperCase()) return true;\r\n        throw new ValidationError(message);\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const isLower = function(message = \"Value contains upper cased characters\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value === \"\") return true;\r\n        if (value === value.toLowerCase()) return true;\r\n        throw new ValidationError(message);\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const isSimple = function(message = \"Value contains invalid characters\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value === \"\") return true;\r\n        if (value.match(SIMPLE_REGEX)) return true;\r\n        throw new ValidationError(message);\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const isEmail = function(message = \"Value is not a valid email\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value === \"\") return true;\r\n        if (value.match(EMAIL_REGEX)) return true;\r\n        throw new ValidationError(message);\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const isUrl = function(message = \"Value is not a valid URL\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value === \"\") return true;\r\n        if (value.match(URL_REGEX)) return true;\r\n        throw new ValidationError(message);\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const isRegex = function(regex, message = \"Value has incorrect format\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value === \"\") return true;\r\n        if (value.match(new RegExp(regex))) return true;\r\n        throw new ValidationError(message);\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const stringGt = function(valueC, message = \"Must be larger than %{1} characters\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value.length > valueC) return true;\r\n        throw new ValidationError(message.replace(\"%{1}\", String(valueC)));\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const stringLt = function(valueC, message = \"Must be smaller than %{1} characters\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value.length < valueC) return true;\r\n        throw new ValidationError(message.replace(\"%{1}\", String(valueC)));\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const stringEq = function(valueC, message = \"Must be exactly %{1} characters\") {\r\n    const validation = (value, ctx) => {\r\n        if (value === undefined) return true;\r\n        if (value === null) return true;\r\n        if (value.length === valueC) return true;\r\n        throw new ValidationError(message.replace(\"%{1}\", String(valueC)));\r\n    };\r\n    return validation;\r\n};\r\n\r\nexport const all = function(validation) {\r\n    const _validation = (sequence, ctx) => {\r\n        if (sequence === undefined) return true;\r\n        if (sequence === null) return true;\r\n        for (const value of sequence) {\r\n            validation(value, ctx);\r\n        }\r\n        return true;\r\n    };\r\n    return _validation;\r\n};\r\n","import { Observable } from \"./observable\";\r\nimport { verify, urlEncode, globals } from \"../util\";\r\nimport fetch from \"node-fetch\";\r\n\r\nconst AUTH_ERRORS = [401, 403, 440, 499];\r\n\r\nexport class API extends Observable {\r\n    constructor(kwargs = {}) {\r\n        super();\r\n        this.kwargs = kwargs;\r\n    }\r\n\r\n    async build(method, url, options = {}) {}\r\n\r\n    async authCallback(params, headers) {}\r\n\r\n    async get(url, options = {}) {\r\n        const result = await this.methodBasic(\"GET\", url, options);\r\n        return result;\r\n    }\r\n\r\n    async post(url, options = {}) {\r\n        const result = await this.methodPayload(\"POST\", url, options);\r\n        return result;\r\n    }\r\n\r\n    async put(url, options = {}) {\r\n        const result = await this.methodPayload(\"PUT\", url, options);\r\n        return result;\r\n    }\r\n\r\n    async delete(url, options = {}) {\r\n        const result = await this.methodBasic(\"DELETE\", url, options);\r\n        return result;\r\n    }\r\n\r\n    async patch(url, options = {}) {\r\n        const result = await this.methodPayload(\"PATCH\", url, options);\r\n        return result;\r\n    }\r\n\r\n    async options(url, options = {}) {\r\n        const result = await this.methodBasic(\"OPTIONS\", url, options);\r\n        return result;\r\n    }\r\n\r\n    async methodBasic(method, url, options = {}) {\r\n        options.params = options.params !== undefined ? options.params : {};\r\n        options.headers = options.headers !== undefined ? options.headers : {};\r\n        try {\r\n            return await this._methodBasic(method, url, options);\r\n        } catch (err) {\r\n            if (AUTH_ERRORS.includes(err.code)) {\r\n                await this.authCallback(options.params, options.headers);\r\n                return await this._methodBasic(method, url, options);\r\n            } else {\r\n                throw err;\r\n            }\r\n        }\r\n    }\r\n\r\n    async methodPayload(method, url, options = {}) {\r\n        options.params = options.params !== undefined ? options.params : {};\r\n        options.headers = options.headers !== undefined ? options.headers : {};\r\n        try {\r\n            return await this._methodPayload(method, url, options);\r\n        } catch (err) {\r\n            if (AUTH_ERRORS.includes(err.code)) {\r\n                await this.authCallback(options.params, options.headers);\r\n                return await this._methodPayload(method, url, options);\r\n            } else {\r\n                throw err;\r\n            }\r\n        }\r\n    }\r\n\r\n    async _methodBasic(method, url, options = {}) {\r\n        const params = options.params !== undefined ? options.params : {};\r\n        let headers = options.headers !== undefined ? options.headers : {};\r\n        const kwargs = options.kwargs !== undefined ? options.kwargs : {};\r\n        const handle = options.handle !== undefined ? options.handle : true;\r\n        const getAgent = options.getAgent !== undefined ? options.getAgent : undefined;\r\n        await this.build(method, url, {\r\n            params: params,\r\n            headers: headers,\r\n            kwargs: kwargs\r\n        });\r\n        const query = urlEncode(params || {});\r\n        if (query) url += url.includes(\"?\") ? \"&\" + query : \"?\" + query;\r\n\r\n        // runs a dummy agent retrieval to check if the current agent\r\n        // is set to keep connections alive\r\n        const _getAgent = getAgent || globals.getAgent || undefined;\r\n        const agent = _getAgent ? _getAgent(new URL(url)) : undefined;\r\n        const keepAlive = (agent && agent.keepAlive) || false;\r\n\r\n        headers = Object.assign({}, headers);\r\n        if (keepAlive) headers.Connection = \"keep-alive\";\r\n\r\n        // adds a new forced loop, tick to the event loop, this should\r\n        // help solve closed connection handling problems in node-fetch\r\n        // while not adding extra issues\r\n        await new Promise(resolve => setTimeout(resolve, 0));\r\n\r\n        const response = await fetchRetry(url, {\r\n            method: method,\r\n            headers: headers || {},\r\n            agent: getAgent || globals.getAgent || undefined\r\n        });\r\n        const result = handle ? await this._handleResponse(response) : response;\r\n        return result;\r\n    }\r\n\r\n    async _methodPayload(method, url, options = {}) {\r\n        const params = options.params !== undefined ? options.params : {};\r\n        let headers = options.headers !== undefined ? options.headers : {};\r\n        let data = options.data !== undefined ? options.data : null;\r\n        const dataJ = options.dataJ !== undefined ? options.dataJ : null;\r\n        const dataM = options.dataM !== undefined ? options.dataM : null;\r\n        let mime = options.mime !== undefined ? options.mime : null;\r\n        const kwargs = options.kwargs !== undefined ? options.kwargs : {};\r\n        const handle = options.handle !== undefined ? options.handle : true;\r\n        const getAgent = options.getAgent !== undefined ? options.getAgent : undefined;\r\n\r\n        await this.build(method, url, {\r\n            params: params,\r\n            headers: headers,\r\n            data: data,\r\n            dataJ: dataJ,\r\n            dataM: dataM,\r\n            mime: mime,\r\n            kwargs: kwargs\r\n        });\r\n\r\n        const query = urlEncode(params || {});\r\n\r\n        if (data !== null) {\r\n            if (query) url += url.includes(\"?\") ? \"&\" + query : \"?\" + query;\r\n        } else if (dataJ !== null) {\r\n            data = JSON.stringify(dataJ);\r\n            if (query) url += url.includes(\"?\") ? \"&\" + query : \"?\" + query;\r\n            mime = mime || \"application/json\";\r\n        } else if (dataM !== null) {\r\n            if (query) url += url.includes(\"?\") ? \"&\" + query : \"?\" + query;\r\n            [mime, data] = this._encodeMultipart(dataM, mime, true);\r\n        } else if (query) {\r\n            data = query;\r\n            mime = mime || \"application/x-www-form-urlencoded\";\r\n        }\r\n\r\n        // runs a dummy agent retrieval to check if the current agent\r\n        // is set to keep connections alive\r\n        const _getAgent = getAgent || globals.getAgent || undefined;\r\n        const agent = _getAgent ? _getAgent(new URL(url)) : undefined;\r\n        const keepAlive = (agent && agent.keepAlive) || false;\r\n\r\n        headers = Object.assign({}, headers);\r\n        if (mime) headers[\"Content-Type\"] = mime;\r\n        if (keepAlive) headers.Connection = \"keep-alive\";\r\n\r\n        // adds a new forced loop, tick to the event loop, this should\r\n        // help solve closed connection handling problems in node-fetch\r\n        // while not adding extra issues\r\n        await new Promise(resolve => setTimeout(resolve, 0));\r\n\r\n        const response = await fetchRetry(url, {\r\n            method: method,\r\n            headers: headers || {},\r\n            body: data,\r\n            agent: getAgent || global.getAgent || undefined\r\n        });\r\n        const result = handle ? await this._handleResponse(response) : response;\r\n        return result;\r\n    }\r\n\r\n    async _handleResponse(response, errorMessage = \"Problem in request\") {\r\n        let result = null;\r\n        if (\r\n            response.headers.get(\"content-type\") &&\r\n            response.headers.get(\"content-type\").toLowerCase().startsWith(\"application/json\")\r\n        ) {\r\n            result = await response.json();\r\n        } else if (\r\n            response.headers.get(\"content-type\") &&\r\n            response.headers.get(\"content-type\").toLowerCase().startsWith(\"text/\")\r\n        ) {\r\n            result = await response.text();\r\n        } else {\r\n            result = await response.blob();\r\n        }\r\n        verify(\r\n            response.ok,\r\n            (result.error && result.error.message) ||\r\n                (result.exception && result.exception.message) ||\r\n                result.error ||\r\n                result.exception ||\r\n                errorMessage,\r\n            response.status || 500,\r\n            undefined,\r\n            {\r\n                response: response,\r\n                result: result\r\n            }\r\n        );\r\n        return result;\r\n    }\r\n\r\n    _encodeMultipart(fields, mime = null, doseq = false) {\r\n        mime = mime || \"multipart/form-data\";\r\n\r\n        const boundary = this._createBoundary(fields, undefined, doseq);\r\n\r\n        const encoder = new TextEncoder(\"utf-8\");\r\n\r\n        const buffer = [];\r\n\r\n        for (let [key, values] of Object.entries(fields)) {\r\n            const isList = doseq && Array.isArray(values);\r\n            values = isList ? values : [values];\r\n\r\n            for (let value of values) {\r\n                if (value === null) continue;\r\n\r\n                let header;\r\n\r\n                if (\r\n                    typeof value === \"object\" &&\r\n                    !(value instanceof Array) &&\r\n                    value.constructor !== Uint8Array\r\n                ) {\r\n                    const headerL = [];\r\n                    let data = null;\r\n                    for (const [key, item] of Object.entries(value)) {\r\n                        if (key === \"data\") data = item;\r\n                        else headerL.push(`${key}: ${item}`);\r\n                    }\r\n                    value = data;\r\n                    header = headerL.join(\"\\r\\n\");\r\n                } else if (value instanceof Array) {\r\n                    let name = null;\r\n                    let contents = null;\r\n                    let contentTypeD = null;\r\n                    if (value.length === 2) [name, contents] = value;\r\n                    else [name, contentTypeD, contents] = value;\r\n                    header = `Content-Disposition: form-data; name=\"${key}\"; filename=\"${name}\"`;\r\n                    if (contentTypeD) header += `\\r\\nContent-Type: ${contentTypeD}`;\r\n                    value = contents;\r\n                } else {\r\n                    header = `Content-Disposition: form-data; name=\"${key}\"`;\r\n                    value = value.constructor === Uint8Array ? value : encoder.encode(value);\r\n                }\r\n\r\n                buffer.push(encoder.encode(\"--\" + boundary + \"\\r\\n\"));\r\n                buffer.push(encoder.encode(header + \"\\r\\n\"));\r\n                buffer.push(encoder.encode(\"\\r\\n\"));\r\n                buffer.push(value);\r\n                buffer.push(encoder.encode(\"\\r\\n\"));\r\n            }\r\n        }\r\n\r\n        buffer.push(encoder.encode(\"--\" + boundary + \"--\\r\\n\"));\r\n        buffer.push(encoder.encode(\"\\r\\n\"));\r\n        const body = this._joinBuffer(buffer);\r\n        const contentType = `${mime}; boundary=${boundary}`;\r\n\r\n        return [contentType, body];\r\n    }\r\n\r\n    _createBoundary(fields, size = 32, doseq = false) {\r\n        return \"Vq2xNWWHbmWYF644q9bC5T2ALtj5CynryArNQRXGYsfm37vwFKMNsqPBrpPeprFs\";\r\n    }\r\n\r\n    _joinBuffer(bufferArray) {\r\n        const bufferSize = bufferArray.map(item => item.byteLength).reduce((a, v) => a + v, 0);\r\n        const buffer = new Uint8Array(bufferSize);\r\n        let offset = 0;\r\n        for (const item of bufferArray) {\r\n            buffer.set(item, offset);\r\n            offset += item.byteLength;\r\n        }\r\n        return buffer;\r\n    }\r\n}\r\n\r\nexport const fetchRetry = async (url, options = {}, retries = 5, delay = 0, timeout = 100) => {\r\n    // loops around the multiple retries to catching any premature\r\n    // connection close, resulting from dropped connections in the\r\n    // pool, this is a common problem in node.js related to keep-alive\r\n    while (true) {\r\n        const start = Date.now();\r\n        try {\r\n            return await fetch(url, options);\r\n        } catch (err) {\r\n            const isReset = err.code === \"ECONNRESET\";\r\n            const elapsed = Date.now() - start;\r\n            if (retries === 0 || elapsed > timeout || !isReset) {\r\n                throw err;\r\n            }\r\n            await new Promise(resolve => setTimeout(resolve, delay));\r\n            retries--;\r\n        }\r\n    }\r\n};\r\n\r\nexport const buildGetAgent = (AgentHttp, AgentHttps, set = true, options = {}) => {\r\n    const httpAgent = new AgentHttp({\r\n        keepAlive: options.keepAlive === undefined ? true : options.keepAlive,\r\n        keepAliveMsecs: options.keepAliveMsecs || 120000,\r\n        timeout: options.timeout || 60000,\r\n        scheduling: options.scheduling || \"fifo\"\r\n    });\r\n    const httpsAgent = new AgentHttps({\r\n        keepAlive: options.keepAlive === undefined ? true : options.keepAlive,\r\n        keepAliveMsecs: options.keepAliveMsecs || 120000,\r\n        timeout: options.timeout || 60000,\r\n        scheduling: options.scheduling || \"fifo\"\r\n    });\r\n    const getAgent = parsedURL => (parsedURL.protocol === \"http:\" ? httpAgent : httpsAgent);\r\n    if (set) globals.getAgent = getAgent;\r\n    return getAgent;\r\n};\r\n\r\n/**\r\n * Tries to patch the global environment with a proper `getAgent`\r\n * function that can handle HTTP and HTTP connection polling.\r\n *\r\n * This can only be performed in a node.js environment (uses `require`).\r\n *\r\n * @returns {Function} The `getAgent` function that has just been\r\n * built and set in the globals.\r\n */\r\nexport const patchAgent = () => {\r\n    if (typeof require !== \"function\") return;\r\n    if (globals.getAgent) return;\r\n    let http, https;\r\n    try {\r\n        http = require(\"http\");\r\n        https = require(\"https\");\r\n    } catch (err) {\r\n        return;\r\n    }\r\n    if (!http || !https) return;\r\n    if (!http.Agent || !https.Agent) return;\r\n    return buildGetAgent(http.Agent, https.Agent, true);\r\n};\r\n\r\n// patches the global agent if possible, using the\r\n// global dynamic require statements\r\npatchAgent();\r\n\r\nexport default API;\r\n","import { API } from \"./api\";\r\n\r\nexport class OAuthAPI extends API {}\r\n\r\nexport default OAuthAPI;\r\n","import { OAuthAPI } from \"./oauth\";\r\n\r\nexport class OAuth1API extends OAuthAPI {}\r\n\r\nexport default OAuth1API;\r\n","import { OAuthAPI } from \"./oauth\";\r\n\r\nexport class OAuth2API extends OAuthAPI {\r\n    constructor(kwargs = {}) {\r\n        super(kwargs);\r\n        this.accessToken = null;\r\n    }\r\n\r\n    async build(method, url, options = {}) {\r\n        await super.build(method, url, options);\r\n        const params = options.params !== undefined ? options.params : {};\r\n        const headers = options.headers !== undefined ? options.headers : {};\r\n        const kwargs = options.kwargs !== undefined ? options.kwargs : {};\r\n        const token = kwargs.token === undefined ? this.tokenDefault : kwargs.token;\r\n        delete kwargs.token;\r\n        if (token && this.oauthTypes.includes(\"param\")) {\r\n            params[this.oauthParam] = this.getAccessToken();\r\n        }\r\n        if (token && this.oauthTypes.includes(\"header\")) {\r\n            headers.Authorization = `Bearer ${this.getAccessToken()}`;\r\n        }\r\n    }\r\n\r\n    getAccessToken() {\r\n        if (this.accessToken) return this.accessToken;\r\n        throw new Error(\"No access token found must re-authorize\");\r\n    }\r\n\r\n    get oauthTypes() {\r\n        return [\"param\", \"header\"];\r\n    }\r\n\r\n    get oauthParam() {\r\n        return \"access_token\";\r\n    }\r\n\r\n    get tokenDefault() {\r\n        return true;\r\n    }\r\n}\r\n\r\nexport default OAuth2API;\r\n","import { OperationalError } from \"./error\";\r\n\r\n/**\r\n * Ensures that the current \"session\" context contains the\r\n * requested ACL token as valid.\r\n *\r\n * In case the validation fails an exception is raised\r\n * indicating the auth validation error.\r\n *\r\n * @param {String} token The ACL token to ensure permission,\r\n * the logged user should be allowed to id.\r\n * @param {Object} ctx The context object to be used in\r\n * the session basic ACL retrieval, should contain proper\r\n * injected methods for retrieval (eg: `getAcl`).\r\n */\r\nexport const ensurePermissions = async (token, ctx) => {\r\n    // retrieves the ACL values from the current context and\r\n    // then uses the ACL to obtain the valid expanded tokens map\r\n    const acl = ctx.getAcl ? await ctx.getAcl(ctx) : {};\r\n    const tokens = toTokensM(acl);\r\n\r\n    // in case the permission validation test is not positive\r\n    // then an exception should be raised indicating the issue\r\n    if (!hasPermission(token, tokens)) {\r\n        throw new OperationalError(\"You don't have authorization to access this resource\", 401);\r\n    }\r\n};\r\n\r\n/**\r\n * Converts the provided list of token strings separated by dots\r\n * into a map based representation on an hierarchical structure.\r\n *\r\n * @param {Array} tokens A linear array of tokens to convert into\r\n * an hierarchical representation.\r\n * @returns {Object} The map containing the hierarchy of tokens\r\n * for the provided linear string based sequence of tokens.\r\n */\r\nexport const toTokensM = tokens => {\r\n    const tokensM = {};\r\n\r\n    if (tokens === undefined) return tokensM;\r\n    if (tokens === null) return tokensM;\r\n    if (!Array.isArray(tokens)) return tokensM;\r\n\r\n    for (const token of tokens) {\r\n        let tokensC = tokensM;\r\n        const tokenL = token.split(\".\");\r\n        const head = tokenL.slice(0, tokenL.length - 1);\r\n        const tail = tokenL[tokenL.length - 1];\r\n\r\n        for (const tokenP of head) {\r\n            let current = tokensC[tokenP] || {};\r\n            const isDict = typeof current === \"object\";\r\n            if (!isDict) current = { _: current };\r\n            tokensC[tokenP] = current;\r\n            tokensC = current;\r\n        }\r\n\r\n        const leaf = tokensC[tail] || null;\r\n        if (leaf && typeof leaf === \"object\") leaf._ = true;\r\n        else tokensC[tail] = true;\r\n    }\r\n\r\n    return tokensM;\r\n};\r\n\r\nexport const hasPermission = (token, tokensM = null) => {\r\n    if (!token) return true;\r\n    if (tokensM === undefined || tokensM === null) return false;\r\n\r\n    const tokenL = token.split(\".\");\r\n    for (const tokenP of tokenL) {\r\n        if (typeof tokensM !== \"object\") return false;\r\n        if (tokensM[\"*\"]) return true;\r\n        if (tokensM[tokenP] === undefined) return false;\r\n        tokensM = tokensM[tokenP];\r\n    }\r\n\r\n    const isDict = typeof tokensM === \"object\";\r\n    const result = isDict ? tokensM._ || false : tokensM;\r\n\r\n    return Boolean(result);\r\n};\r\n\r\nexport default ensurePermissions;\r\n","import { loadConf } from \"../util\";\r\nimport { OperationalError } from \"./error\";\r\n\r\nconst REGISTRY = {};\r\n\r\nexport const load = async function() {\r\n    await loadConf();\r\n};\r\n\r\nexport const unload = async function() {};\r\n\r\nexport const register = function(name, value) {\r\n    REGISTRY[name] = value;\r\n};\r\n\r\nexport const unregister = function(name) {\r\n    delete REGISTRY[name];\r\n};\r\n\r\nexport const request = function(name) {\r\n    if (REGISTRY[name] === undefined) {\r\n        throw new OperationalError(`Name '${name}' not found in registry`);\r\n    }\r\n    return REGISTRY[name];\r\n};\r\n\r\nexport default load;\r\n","export class FileTuple extends Array {\r\n    static fromData(data, name = null, mime = null) {\r\n        const fileTuple = new this(name, mime, data);\r\n        return fileTuple;\r\n    }\r\n\r\n    static fromString(dataString, name = null, mime = null, { encoding = \"utf-8\" } = {}) {\r\n        const data = new TextEncoder(encoding).encode(dataString);\r\n        return this.fromData(data, name, mime);\r\n    }\r\n\r\n    static fromArrayBuffer(arrayBuffer, name = null, mime = null) {\r\n        const buffer = Buffer.from(arrayBuffer);\r\n        return this.fromData(buffer, name, mime);\r\n    }\r\n\r\n    static async fromBlob(blob, name = null, mime = null) {\r\n        const arrayBuffer = await blob.arrayBuffer();\r\n        return this.fromArrayBuffer(arrayBuffer, name, mime);\r\n    }\r\n\r\n    get name() {\r\n        return this[0];\r\n    }\r\n\r\n    get mime() {\r\n        return this[1];\r\n    }\r\n\r\n    get data() {\r\n        return this[2];\r\n    }\r\n}\r\n","import { AttributeError, NotImplementedError } from \"../base\";\r\nimport { verify } from \"../util\";\r\n\r\nclass AbstractType {\r\n    async jsonV() {\r\n        return JSON.stringify(this);\r\n    }\r\n\r\n    async mapV() {\r\n        const result = await this.jsonV();\r\n        return result;\r\n    }\r\n}\r\n\r\nexport class Reference extends AbstractType {}\r\n\r\nexport const reference = function(target, { name = null, dumpall = false } = {}) {\r\n    name = name || \"id\";\r\n    const targetT = target.constructor.name;\r\n    const isReference = targetT === \"string\";\r\n    const reserved = [\"id\", \"_target\", \"_object\", \"_type\", \"__dict__\"];\r\n\r\n    class _Reference extends Reference {\r\n        constructor(id) {\r\n            super(id);\r\n\r\n            this.__start__();\r\n\r\n            const proxy = new Proxy(this, {\r\n                get(target, name) {\r\n                    // special case to avoid this `Proxy` breaking when being accessed in\r\n                    // an async context because of the `then()` method\r\n                    if (name === \"then\") return target.then;\r\n\r\n                    // in case the name being access is already present in the target object\r\n                    // then returns it immediately (no need for remove data source access)\r\n                    if (name in target) return target[name];\r\n\r\n                    const exists = Boolean(target._object && target._object[name] !== undefined);\r\n                    if (exists) return target._object[name];\r\n\r\n                    if (target.isResolved) throw new AttributeError(`'${name}' not found`);\r\n\r\n                    // triggers the base target get method that will resolve the reference\r\n                    // and access the remote data source for value retrieval\r\n                    return target.get(name);\r\n                },\r\n                set(target, name, value) {\r\n                    if (name in target) {\r\n                        target[name] = value;\r\n                        return true;\r\n                    }\r\n\r\n                    // verifies if the reference object exists in the current\r\n                    // reference instance, that's the case if the object name is\r\n                    // defined in the dictionary and the referenced object contains\r\n                    // an attribute with the name referred, for those situations\r\n                    // defers the setting of the attribute to the reference object\r\n                    const exists =\r\n                        target._object !== undefined && target._object[name] !== undefined;\r\n                    if (exists) {\r\n                        target._object[name] = value;\r\n                        return true;\r\n                    }\r\n\r\n                    // otherwise this is a normal attribute setting and the current\r\n                    // object's dictionary must be changed so that the new value is set\r\n                    target[name] = value;\r\n                    return true;\r\n                }\r\n            });\r\n\r\n            if (id instanceof _Reference) return this.buildI(id);\r\n            else if (id instanceof this.constructor._target) return this.buildO(id);\r\n            else this.build(id);\r\n\r\n            return proxy;\r\n        }\r\n\r\n        static get schema() {\r\n            return target.schema;\r\n        }\r\n\r\n        static get schemaSafe() {\r\n            return target.schemaSafe;\r\n        }\r\n\r\n        static get collection() {\r\n            return target.collection;\r\n        }\r\n\r\n        static get idName() {\r\n            return \"id\";\r\n        }\r\n\r\n        static get increments() {\r\n            return target.increments;\r\n        }\r\n\r\n        static get dataOptions() {\r\n            return target.dataOptions;\r\n        }\r\n\r\n        static _collection(options) {\r\n            return target._collection(options);\r\n        }\r\n\r\n        static async _increment(name) {\r\n            return target._increment(name);\r\n        }\r\n\r\n        static async _ensureMin(name, value) {\r\n            return target._ensureMin(name, value);\r\n        }\r\n\r\n        static _eagerB(eager) {\r\n            return target._eagerB(eager);\r\n        }\r\n\r\n        async get(name) {\r\n            await this.resolve();\r\n            const value = this._object[name];\r\n            if (value === undefined) throw new AttributeError(`'${name}' not found`);\r\n            return value;\r\n        }\r\n\r\n        async set(name, value) {\r\n            // in case the name that is being set is not part of the reserved\r\n            // names for the reference underlying structure the object resolution\r\n            // is triggered to make sure the underlying object exists and is loaded\r\n            if (!reserved.includes(name)) {\r\n                await target.resolve();\r\n            }\r\n\r\n            // verifies if the reference object exists in the current\r\n            // reference instance, that's the case if the object name is\r\n            // defined in the dictionary and the referenced object contains\r\n            // an attribute with the name referred, for those situations\r\n            // defers the setting of the attribute to the reference object\r\n            const exists = this._object !== undefined && this._object[name] !== undefined;\r\n            if (exists) {\r\n                this._object[name] = value;\r\n                return true;\r\n            }\r\n\r\n            // otherwise this is a normal attribute setting and the current\r\n            // object's dictionary must be changed so that the new value is set\r\n            this[name] = value;\r\n        }\r\n\r\n        __start__() {\r\n            if (isReference) this._target = this.constructor._target;\r\n            else this._target = target;\r\n            verify(this._target);\r\n            const meta = this._target.schema[name];\r\n            this._type = meta.type || String;\r\n        }\r\n\r\n        /**\r\n         * The name of the key (join) attribute for the\r\n         * reference that is going to be created, this\r\n         * name may latter be used to cast the value\r\n         */\r\n        static get _name() {\r\n            return name;\r\n        }\r\n\r\n        static get _default() {\r\n            return new this(null);\r\n        }\r\n\r\n        static get _target() {\r\n            if (isReference) {\r\n                throw new NotImplementedError(\"References only work with classes, not class names\");\r\n            }\r\n            return target;\r\n        }\r\n\r\n        static _btype() {\r\n            let _target;\r\n            if (isReference) _target = this._target();\r\n            else _target = target;\r\n            const meta = _target.schema[name];\r\n            return meta.type || String;\r\n        }\r\n\r\n        build(id, cast = true) {\r\n            const isUnset = [\"\", null, undefined].includes(id);\r\n            cast = cast && !isUnset;\r\n            if (cast) id = this.constructor._target.cast(name, id);\r\n            this.id = id;\r\n            this._object = null;\r\n        }\r\n\r\n        buildI(reference) {\r\n            this.id = reference.id;\r\n            this._object = reference._object;\r\n        }\r\n\r\n        buildO(object) {\r\n            this.id = object[this.constructor._name];\r\n            this._object = object;\r\n        }\r\n\r\n        async refV() {\r\n            return this.val;\r\n        }\r\n\r\n        async jsonV() {\r\n            if (dumpall) {\r\n                const result = await this.resolve();\r\n                return result;\r\n            }\r\n            return this.val;\r\n        }\r\n\r\n        async mapV() {\r\n            throw new NotImplementedError();\r\n        }\r\n\r\n        get val() {\r\n            const isEmpty = [\"\", null, undefined].includes(this.id);\r\n            if (isEmpty) return null;\r\n            return this._type(this.id);\r\n        }\r\n\r\n        async resolve(kwargs = {}) {\r\n            // verifies if the underlying object reference exists\r\n            // in the current names dictionary and if it exists\r\n            // verifies if it's valid (value is valid) if that's\r\n            // the case returns the current value immediately\r\n            const exists = this._object !== undefined;\r\n            if (exists && this._object) return this._object;\r\n\r\n            // verifies if there's an id value currently set in\r\n            // the reference in case it does not exists sets the\r\n            // object value in the current instance with a none\r\n            // value and then returns this (invalid value)\r\n            if (!this.id) {\r\n                const _object = null;\r\n                this._object = _object;\r\n                return _object;\r\n            }\r\n\r\n            // creates the map of keyword based arguments that are going\r\n            // to be used in the resolution of the reference and uses the\r\n            // data source based get attribute to retrieve the object\r\n            // that represents the reference\r\n            kwargs[name] = this.constructor._target.cast(name, this.id);\r\n            kwargs.raiseE = kwargs.raiseE || false;\r\n            kwargs.eagerL = kwargs.eagerL || false;\r\n            kwargs.resolveA = kwargs.resolveA || false;\r\n            const _object = await this.constructor._target.get(kwargs);\r\n\r\n            // sets the resolved object (using the current id attribute)\r\n            // in the current instance's dictionary and then returns this\r\n            // value to the caller method as the resolved value\r\n            this._object = _object;\r\n            return _object;\r\n        }\r\n\r\n        get isResolved() {\r\n            const exists = this._object !== undefined;\r\n            return Boolean(exists && this._object);\r\n        }\r\n\r\n        async isResolvable() {\r\n            await this.resolve();\r\n            return this._object !== null;\r\n        }\r\n    }\r\n\r\n    return _Reference;\r\n};\r\n\r\nexport class References extends AbstractType {}\r\n\r\nexport const references = function(target, { name = undefined, dumpall = false } = {}) {\r\n    name = name || \"id\";\r\n    const targetT = target.constructor.name;\r\n    const isReference = targetT === \"string\";\r\n    const ReferenceC = reference(target, { name: name, dumpall: dumpall });\r\n\r\n    class _References extends References {\r\n        constructor(ids) {\r\n            super(ids);\r\n\r\n            this.__start__();\r\n\r\n            const proxy = new Proxy(this, {\r\n                get(target, name) {\r\n                    if (name in target) return target[name];\r\n                    return target.objects[name];\r\n                }\r\n            });\r\n\r\n            if (ids instanceof _References) return this.buildI(ids);\r\n            else this.build(ids);\r\n\r\n            return proxy;\r\n        }\r\n\r\n        __start__() {\r\n            if (isReference) this._target = this.constructor._target;\r\n            else this._target = target;\r\n            verify(this._target);\r\n        }\r\n\r\n        /**\r\n         * The name of the key (join) attribute for the\r\n         * reference that is going to be created, this\r\n         * name may latter be used to cast the value\r\n         */\r\n        static get _name() {\r\n            return name;\r\n        }\r\n\r\n        static get _default() {\r\n            return new this([]);\r\n        }\r\n\r\n        static get _target() {\r\n            return ReferenceC._target;\r\n        }\r\n\r\n        static _btype() {\r\n            return ReferenceC._btype;\r\n        }\r\n\r\n        get items() {\r\n            return this.objects;\r\n        }\r\n\r\n        build(ids) {\r\n            const isValid = ![null, undefined].includes(ids);\r\n            if (isValid && !Array.isArray(ids)) ids = [ids];\r\n\r\n            this.ids = ids;\r\n            this.objects = [];\r\n            this.objectsM = {};\r\n\r\n            this.setIds(this.ids);\r\n        }\r\n\r\n        buildI(references) {\r\n            this.ids = references.ids;\r\n            this.objects = references.objects;\r\n            this.objectsM = references.objectsM;\r\n        }\r\n\r\n        setIds(ids = []) {\r\n            this.ids = [];\r\n            ids.forEach(id => {\r\n                if ([\"\", null, undefined].includes(id)) return;\r\n                const object = new ReferenceC(id);\r\n                const objectId = object.id;\r\n                this.ids.push(objectId);\r\n                this.objects.push(object);\r\n                this.objectsM[objectId] = object;\r\n            });\r\n        }\r\n\r\n        async refV() {\r\n            const result = await Promise.all(this.objects.map(async object => await object.refV()));\r\n            return result;\r\n        }\r\n\r\n        async jsonV() {\r\n            const result = await Promise.all(\r\n                this.objects.map(async object => await object.jsonV())\r\n            );\r\n            return result;\r\n        }\r\n\r\n        async mapV() {\r\n            const result = await Promise.all(this.objects.map(async object => await object.mapV()));\r\n            return result;\r\n        }\r\n\r\n        get val() {\r\n            return this.objects.map(object => object.val);\r\n        }\r\n\r\n        get list() {\r\n            return this.objects.map(object => object.val);\r\n        }\r\n\r\n        async resolve(kwargs = {}) {\r\n            const result = await Promise.all(this.objects.map(object => object.resolve(kwargs)));\r\n            return result;\r\n        }\r\n\r\n        find(kwargs = {}) {\r\n            kwargs[name] = {\r\n                $in: this.ids.map(id => this._target.cast(name, id))\r\n            };\r\n            return this._target.find(kwargs);\r\n        }\r\n\r\n        paginate(kwargs = {}) {\r\n            kwargs[name] = {\r\n                $in: this.ids.map(id => this._target.cast(name, id))\r\n            };\r\n            return this._target.paginate(kwargs);\r\n        }\r\n\r\n        get isEmpty() {\r\n            const idsL = self.ids.length;\r\n            return idsL === 0;\r\n        }\r\n\r\n        get isResolved() {\r\n            if (this.objects.length === 0) return true;\r\n            return this.objects[0].isResolved;\r\n        }\r\n    }\r\n\r\n    return _References;\r\n};\r\n","import { NotImplementedError, request } from \"../base\";\r\n\r\nimport { Reference, References } from \"./typesf\";\r\n\r\n/**\r\n * A mapping from yonius types to the schema types to\r\n * be used by the underlying Mongo collection.\r\n */\r\nconst MONGO_TYPES = [\r\n    [Reference, Object],\r\n    [References, Array]\r\n];\r\n\r\n/**\r\n * Abstract class definition that defines the interface\r\n * expected to be implemented by data driven collections\r\n * in the Yonius context.\r\n */\r\nexport class Collection {\r\n    constructor(options) {\r\n        this.options = options;\r\n    }\r\n\r\n    async find(conditions, projection = {}, options = {}) {\r\n        throw new NotImplementedError();\r\n    }\r\n\r\n    async findOne(conditions, projection = {}, options = {}) {\r\n        throw new NotImplementedError();\r\n    }\r\n\r\n    async findOneAndUpdate(conditions, data, options = {}) {\r\n        throw new NotImplementedError();\r\n    }\r\n\r\n    async findOneAndDelete(conditions, options = {}) {\r\n        throw new NotImplementedError();\r\n    }\r\n\r\n    async create(data, options = {}) {\r\n        throw new NotImplementedError();\r\n    }\r\n\r\n    async count(conditions, options = {}) {\r\n        throw new NotImplementedError();\r\n    }\r\n}\r\n\r\n/**\r\n * Mongo based collection that implements the collection\r\n * abstract interface applying it to a specific mongodb\r\n * instance. Most of the interface is already \"mongodb\r\n * oriented\", so only a thin layer of adaptation is required.\r\n */\r\nexport class MongoCollection extends Collection {\r\n    constructor(name, schema) {\r\n        super(name, schema);\r\n        this._mongoose = this.constructor.getModel(this.options.name, this.options.schema);\r\n    }\r\n\r\n    static getModel(name, schema) {\r\n        // verifies if the model is already present in the global\r\n        // cache and if that the case re-uses it\r\n        this._models = this._models || {};\r\n        if (this._models[name]) return this._models[name];\r\n\r\n        // obtains a reference to the mongoose, that\r\n        // should have been registered by 3rd party\r\n        const mongoose = request(\"mongoose\");\r\n\r\n        // creates the internal \"mongoose\" reference to the\r\n        // model by encapsulating its name and schema\r\n        const filteredSchema = { ...schema };\r\n        Object.entries(filteredSchema).forEach(([name, value]) => {\r\n            const found = MONGO_TYPES.find(\r\n                ([type, mongoType]) => value.type.prototype instanceof type\r\n            );\r\n            if (!found) return;\r\n            filteredSchema[name].type = found[1];\r\n        });\r\n        this._models[name] = mongoose.model(name, new mongoose.Schema(filteredSchema));\r\n\r\n        // returns the newly constructor mongoose model to\r\n        // the caller methods\r\n        return this._models[name];\r\n    }\r\n\r\n    async find(conditions, projection = {}, options = {}) {\r\n        const model = await this._mongoose.find(conditions, projection, options);\r\n        return model;\r\n    }\r\n\r\n    async findOne(conditions, projection = {}, options = {}) {\r\n        const model = this._mongoose.findOne(conditions, projection, options);\r\n        return model;\r\n    }\r\n\r\n    async findOneAndUpdate(conditions, data, options = {}) {\r\n        const model = await this._mongoose.findOneAndUpdate(conditions, data, {\r\n            upsert: true,\r\n            new: true,\r\n            ...options\r\n        });\r\n        return model;\r\n    }\r\n\r\n    async findOneAndDelete(conditions, options = {}) {\r\n        const model = await this._mongoose.findOneAndDelete(conditions, options);\r\n        return model;\r\n    }\r\n\r\n    async create(data, options = {}) {\r\n        const models = await this._mongoose.create([data], options);\r\n        return models[0];\r\n    }\r\n\r\n    async count(conditions, options = {}) {\r\n        const count = await this._mongoose.countDocuments(conditions);\r\n        return count;\r\n    }\r\n}\r\n\r\nexport default Collection;\r\n","import * as collection from \"./collection\";\r\nimport { Reference, References } from \"./typesf\";\r\n\r\nimport {\r\n    NotFoundError,\r\n    NotImplementedError,\r\n    ValidationError,\r\n    OperationalError,\r\n    AttributeError\r\n} from \"../base\";\r\nimport { escapeStringRegexp, verify, _isDevel } from \"../util\";\r\n\r\nconst MEMORY_STORAGE = {};\r\n\r\n/**\r\n * Simple lambda function that removes any\r\n * empty element from the provided list values\r\n */\r\nconst RE = v => v.filter(i => i !== \"\");\r\n\r\n/**\r\n * The map associating the various types with the\r\n * custom builder functions to be used when applying\r\n * the types function, this is relevant for the built-in\r\n * types that are meant to avoid using the default constructor\r\n */\r\nconst BUILDERS = {\r\n    [Number]: v => v,\r\n    [String]: v => v,\r\n    [Array]: v => (Array.isArray(v) ? RE(v) : typeof v === \"string\" ? JSON.parse(v) : RE([v])),\r\n    [Boolean]: v => (typeof v === \"boolean\" ? v : ![\"\", \"0\", \"false\", \"False\"].includes(v)),\r\n    [Object]: v => (typeof v === \"string\" ? JSON.parse(v) : v)\r\n};\r\n\r\n/**\r\n * The default values to be set when a type\r\n * conversion fails for the provided string value\r\n * the resulting value may be returned when a validation\r\n * fails an so it must be used carefully\r\n */\r\nconst TYPE_DEFAULTS = {\r\n    bytes: null,\r\n    unicode: null,\r\n    int: null,\r\n    float: null,\r\n    bool: false,\r\n    list: () => [],\r\n    dict: () => ({}),\r\n    object: () => ({})\r\n};\r\n\r\n/**\r\n * The various data types that are considered to be references\r\n * so that they are lazy loaded from the data source, these kind\r\n * of types should be compliant to a common interface so that they\r\n * may be used \"blindly\" from an external entity\r\n */\r\nconst TYPE_REFERENCES = [Reference, References];\r\n\r\n/**\r\n * The map that associates the various operators with the boolean\r\n * values that define if an insensitive base search should be used\r\n * instead of the \"typical\" sensitive search.\r\n */\r\nexport const INSENSITIVE = {\r\n    likei: true,\r\n    llikei: true,\r\n    rlikei: true\r\n};\r\n\r\n/**\r\n * The map containing the mapping association between the\r\n * normalized version of the operators and the infra-structure\r\n * specific value for each of this operations, note that some\r\n * of the values don't have a valid mapping for this operations\r\n * the operator must be ignored and not used explicitly.\r\n */\r\nexport const OPERATORS = {\r\n    eq: null,\r\n    equals: null,\r\n    ne: \"$ne\",\r\n    not_equals: \"$ne\",\r\n    in: \"$in\",\r\n    nin: \"$nin\",\r\n    not_in: \"$nin\",\r\n    like: \"$regex\",\r\n    likei: \"$regex\",\r\n    llike: \"$regex\",\r\n    llikei: \"$regex\",\r\n    rlike: \"$regex\",\r\n    rlikei: \"$regex\",\r\n    gt: \"$gt\",\r\n    greater: \"$gt\",\r\n    gte: \"$gte\",\r\n    greater_equal: \"$gte\",\r\n    lt: \"$lt\",\r\n    lesser: \"$lt\",\r\n    lte: \"$lte\",\r\n    lesser_equal: \"$lte\",\r\n    null: null,\r\n    is_null: null,\r\n    not_null: \"$ne\",\r\n    is_not_null: \"$ne\",\r\n    contains: \"$all\"\r\n};\r\n\r\n/**\r\n * Map that associates each of the normalized operations with\r\n * an inline function that together with the data type maps the\r\n * the base string based value into the target normalized value.\r\n */\r\nexport const VALUE_METHODS = {\r\n    in: (v, t) => v.split(\";\").map(t),\r\n    not_in: (v, t) => v.split(\";\").map(t),\r\n    like: (v, t) => \"^.*\" + escapeStringRegexp(v) + \".*$\",\r\n    likei: (v, t) => \"^.*\" + escapeStringRegexp(v) + \".*$\",\r\n    llike: (v, t) => \"^.*\" + escapeStringRegexp(v) + \"$\",\r\n    llikei: (v, t) => \"^.*\" + escapeStringRegexp(v) + \"$\",\r\n    rlike: (v, t) => \"^\" + escapeStringRegexp(v) + \".*$\",\r\n    rlikei: (v, t) => \"^\" + escapeStringRegexp(v) + \".*$\",\r\n    null: (v, t) => null,\r\n    is_null: (v, t) => null,\r\n    not_null: (v, t) => null,\r\n    is_not_null: (v, t) => null,\r\n    contains: (v, t) => v.split(\";\").map(t)\r\n};\r\n\r\nexport class Model {\r\n    constructor(options = {}) {\r\n        const fill = options.fill === undefined ? true : options.fill;\r\n        if (fill) this.cls.fill(this);\r\n    }\r\n\r\n    static niw() {\r\n        return new this();\r\n    }\r\n\r\n    /**\r\n     * Fills the current model with the proper values so that\r\n     * no values are unset as this would violate the model definition\r\n     * integrity. This is required when retrieving an object(s) from\r\n     * the data source (as some of them may be incomplete).\r\n     *\r\n     * @param {Object} model The model that is going to have its unset\r\n     * attributes filled with \"default\" data, in case none is provided\r\n     * all of the attributes will be filled with \"default\" data.\r\n     * @param {Boolean} safe If the safe mode should be used for the fill\r\n     * operation meaning that under some conditions no unit fill\r\n     * operation is going to be applied (eg: retrieval operations).\r\n     */\r\n    static async fill(model = {}, safe = false) {\r\n        for (const [name, field] of Object.entries(this.schema)) {\r\n            if (model[name] !== undefined) continue;\r\n            if ([\"_id\"].includes(name)) continue;\r\n            const _private = field.private === undefined ? false : field.private;\r\n            const increment = field.increment === undefined ? false : field.increment;\r\n            if (_private && safe) continue;\r\n            if (increment) continue;\r\n            if (field.initial !== undefined) {\r\n                const initial = field.initial;\r\n                model[name] = initial;\r\n            } else {\r\n                const type = field.type || null;\r\n                let _default = typeD(type, null);\r\n                _default = type._default === undefined ? _default : type._default();\r\n                model[name] = _default;\r\n            }\r\n        }\r\n    }\r\n\r\n    static cast(name, value, safe = true) {\r\n        if (!this.schema[name]) return value;\r\n        if (value === null || value === undefined) return value;\r\n        const _definition = this.definitionN(name);\r\n        const _type = _definition.type || String;\r\n        const builder = BUILDERS[_type] || (v => new _type(v));\r\n        try {\r\n            return builder ? builder(value) : value;\r\n        } catch (err) {\r\n            if (!safe) throw err;\r\n            let _default = this.typeD[_type] || null;\r\n            _default = _type._default ? _type._default() : _default;\r\n            return _default;\r\n        }\r\n    }\r\n\r\n    static get eagers() {\r\n        return Object.entries(this.schema)\r\n            .filter(([name, field]) => field.eager)\r\n            .map(([name, field]) => name);\r\n    }\r\n\r\n    /**\r\n     * The name of the data source adapter that is going\r\n     * to be used to handle this model instance.\r\n     *\r\n     * @type {String}\r\n     */\r\n    static get adapter() {\r\n        return process.env.ADAPTER || \"mongo\";\r\n    }\r\n\r\n    async validate() {\r\n        const errors = [...this._validate()];\r\n        if (errors.length) {\r\n            throw new ValidationError(\r\n                `Invalid model: ${errors.map(err => String(err)).join(\", \")}`\r\n            );\r\n        }\r\n    }\r\n\r\n    async apply(model) {\r\n        await this.wrap(model);\r\n        return this;\r\n    }\r\n\r\n    async wrap(model) {\r\n        await this._wrap(model);\r\n        return this;\r\n    }\r\n\r\n    get isNew() {\r\n        return this._id === undefined;\r\n    }\r\n\r\n    get model() {\r\n        return this;\r\n    }\r\n\r\n    async jsonV() {\r\n        return this.model;\r\n    }\r\n\r\n    get string() {\r\n        return JSON.stringify(this.model);\r\n    }\r\n\r\n    /**\r\n     * Wraps the provided model object around the current instance, making\r\n     * sure that all of the elements are compliant with the schema.\r\n     *\r\n     * It should be possible to override the `_wrap` operation to implement\r\n     * a custom \"way\" of setting data into a model.\r\n     *\r\n     * @param {Object} model The model structure that is going to be used\r\n     * to wrap the current model object, meaning that all of its elements\r\n     * are going to be stored in the current object.\r\n     */\r\n    async _wrap(model) {\r\n        for (const key of Object.keys(this.cls.schema)) {\r\n            const value = model[key];\r\n            if (value === undefined) continue;\r\n            this[key] = this.cls.cast(key, value);\r\n        }\r\n        if (model._id !== undefined) this._id = model._id;\r\n    }\r\n\r\n    *_validate() {\r\n        for (const [name, value] of Object.entries(this.cls.schema)) {\r\n            const validation = value.validation || false;\r\n            if (!validation) continue;\r\n            for (const callable of validation) {\r\n                try {\r\n                    callable(this[name]);\r\n                } catch (err) {\r\n                    yield err;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class ModelStore extends Model {\r\n    static _getAttrs(params, attrs) {\r\n        const _attrs = [];\r\n\r\n        attrs.forEach(([attr, value]) => {\r\n            if (params[attr] === undefined) {\r\n                _attrs.push(value);\r\n                return;\r\n            }\r\n\r\n            const _value = params[attr];\r\n            delete params[attr];\r\n            _attrs.push(_value);\r\n        });\r\n\r\n        return _attrs;\r\n    }\r\n\r\n    static async get(params = {}) {\r\n        /* eslint-disable no-unused-vars */\r\n        let [\r\n            fields,\r\n            eager,\r\n            eagerL,\r\n            map,\r\n            rules,\r\n            meta,\r\n            build,\r\n            fill,\r\n            resolveA,\r\n            skip,\r\n            limit,\r\n            sort,\r\n            raiseE\r\n        ] = this._getAttrs(params, [\r\n            [\"fields\", null],\r\n            [\"eager\", null],\r\n            [\"eagerL\", null],\r\n            [\"map\", false],\r\n            [\"rules\", true],\r\n            [\"meta\", false],\r\n            [\"build\", true],\r\n            [\"fill\", true],\r\n            [\"resolveA\", null],\r\n            [\"skip\", 0],\r\n            [\"limit\", 0],\r\n            [\"sort\", null],\r\n            [\"raiseE\", true]\r\n        ]);\r\n        /* eslint-enable no-unused-vars */\r\n        if (eagerL === null) eagerL = map;\r\n        if (eagerL) eager = this._eagerB(eager);\r\n\r\n        const sortObject = {};\r\n        if (sort) {\r\n            sort.forEach(([key, value]) => (sortObject[key] = value));\r\n        }\r\n\r\n        const found = await this.collection.findOne(params, this.fields, {\r\n            skip: skip,\r\n            limit: limit,\r\n            sort: sortObject\r\n        });\r\n\r\n        if (!found && raiseE) {\r\n            let message;\r\n            if (_isDevel()) {\r\n                message = `${this.name} not found for ${JSON.stringify(params)}`;\r\n            } else {\r\n                message = `${this.name} not found`;\r\n            }\r\n            throw new NotFoundError(message);\r\n        }\r\n        let model = found ? await new this().wrap(found) : found;\r\n        if (model) {\r\n            if (eager) model = await this._eager(model, eager, { map: map });\r\n        }\r\n        return model;\r\n    }\r\n\r\n    static async find(params = {}) {\r\n        /* eslint-disable no-unused-vars */\r\n        const [\r\n            fields,\r\n            eager,\r\n            eagerL,\r\n            map,\r\n            rules,\r\n            meta,\r\n            build,\r\n            fill,\r\n            resolveA,\r\n            skip,\r\n            limit,\r\n            sort,\r\n            raiseE\r\n        ] = this._getAttrs(params, [\r\n            [\"fields\", null],\r\n            [\"eager\", null],\r\n            [\"eagerL\", null],\r\n            [\"map\", false],\r\n            [\"rules\", true],\r\n            [\"meta\", false],\r\n            [\"build\", true],\r\n            [\"fill\", true],\r\n            [\"resolveA\", null],\r\n            [\"skip\", 0],\r\n            [\"limit\", 0],\r\n            [\"sort\", null],\r\n            [\"raiseE\", false]\r\n        ]);\r\n        /* eslint-enable no-unused-vars */\r\n\r\n        this._findS(params);\r\n        this._findD(params);\r\n\r\n        const sortObject = {};\r\n        if (sort) {\r\n            sort.forEach(([key, value]) => (sortObject[key] = value));\r\n        }\r\n\r\n        const found = await this.collection.find(params, this.fields, {\r\n            skip: skip,\r\n            limit: limit,\r\n            sort: sortObject\r\n        });\r\n\r\n        if (found.length === 0 && raiseE) {\r\n            let message;\r\n            if (_isDevel()) {\r\n                message = `${this.name} not found for ${JSON.stringify(params)}`;\r\n            } else {\r\n                message = `${this.name} not found`;\r\n            }\r\n            throw new NotFoundError(message);\r\n        }\r\n\r\n        const models = await Promise.all(found.map(v => new this().wrap(v)));\r\n        return models;\r\n    }\r\n\r\n    static async count(params = {}) {\r\n        let result = null;\r\n        if (Object.keys(params).length > 0) {\r\n            result = await this.collection.find(params);\r\n            result = result.length;\r\n        } else {\r\n            result = await this.collection.count();\r\n        }\r\n        return result;\r\n    }\r\n\r\n    static _findD(params) {\r\n        // retrieves the find definition into a local variable, then\r\n        // removes the find definition from the named arguments map\r\n        // so that it's not going to be erroneously used by the\r\n        // underlying find infra-structure\r\n        const findD = params.find_d;\r\n        delete params.find_d;\r\n\r\n        // in case the find definition is currently not defined in the\r\n        // named arguments map returns immediately as nothing is\r\n        // meant to be done on this method\r\n        if (!findD) return;\r\n\r\n        // tries to retrieve the value of the operator that is going\r\n        // to be used to \"join\" the multiple find parts (find values)\r\n        const findO = params.find_o;\r\n        delete params.find_o;\r\n\r\n        // verifies that the data type for the find definition is a\r\n        // valid sequence and in case its not converts it into one\r\n        // so that it may be used in sequence valid logic\r\n        const _findD = Array.isArray(findD) ? findD : [findD];\r\n\r\n        // iterates over all the filters defined in the filter definition\r\n        // so that they may be used to update the provided arguments with\r\n        // the filter defined in each of their lines\r\n        for (const filter of _findD) {\r\n            // in case the filter is not valid (unset or invalid) it's going\r\n            // to be ignored as no valid information is present\r\n            if (!filter) continue;\r\n\r\n            // splits the filter string into its three main components\r\n            // the name, operator and value, that are going to be processed\r\n            // as defined by the specification to create the filter\r\n            const result = filter.split(\":\", 3);\r\n            if (result.length === 2) result.push(null);\r\n\r\n            // unpacks the result into it's thee components name, operator\r\n            // and value to be used in the parsing of the filter\r\n            const [name, operator, value] = result;\r\n\r\n            // retrieves the definition for the filter attribute and uses\r\n            // it to retrieve it's target data type that is going to be\r\n            // used for the proper conversion, note that in case the base\r\n            // type resolution method exists it's used (recursive resolution)\r\n            const nameDefinition = this.definitionN(name);\r\n            const nameT = nameDefinition._btype || nameDefinition.type || String;\r\n\r\n            // determines if the current filter operation should be performed\r\n            // using a case insensitive based approach to the search, by default\r\n            // all of the operations are considered to be case sensitive\r\n            const insensitive = INSENSITIVE[operator] || false;\r\n\r\n            // retrieves the method that is going to be used for value mapping\r\n            // or conversion based on the current operator and then converts\r\n            // the operator into the domain specific operator\r\n            const valueMethod = VALUE_METHODS[operator];\r\n            const _operator = OPERATORS[operator] === undefined ? operator : OPERATORS[operator];\r\n\r\n            // in case there's a custom value mapped retrieved uses it to convert\r\n            // the string based value into the target specific value for the query\r\n            // otherwise uses the data type for the search field for value conversion\r\n            const _value = valueMethod ? valueMethod(value, nameT) : nameT(value);\r\n\r\n            // constructs the custom find value using a key and value map value\r\n            // in case the operator is defined otherwise (operator not defined)\r\n            // the value is used directly, then merges this find value into the\r\n            // current set of filters for the provided (keyword) arguments\r\n            let findV;\r\n            if (_operator) {\r\n                const obj = {};\r\n                obj[_operator] = _value;\r\n                findV = obj;\r\n            } else {\r\n                findV = _value;\r\n            }\r\n\r\n            if (insensitive) findV.$options = \"-i\";\r\n            this._filterMerge(name, findV, params, findO);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Working at a model map/dictionary level tries to resolve the\r\n     * relations described by the sequence of `.` separated names paths.\r\n     *\r\n     * Should be able to handle both instance and map associated eager\r\n     * loading relations.\r\n     *\r\n     * @param {Object} model The model map to be used as reference for the eager\r\n     * loading of relations.\r\n     * @param {Array} names The list of dot separated name paths to \"guide\" the\r\n     * loading of relations (references).\r\n     * @returns {Object} The resulting model with the required relations loaded.\r\n     */\r\n    static async _eager(model, names, kwargs = {}) {\r\n        // verifies if the provided model instance is a sequence and if\r\n        // that's the case runs the recursive eager loading of names and\r\n        // returns the resulting sequence to the caller method\r\n        const isList = Array.isArray(model);\r\n        if (isList) return Promise.all(model.map(_model => this._eager(_model, names, kwargs)));\r\n\r\n        // iterates over the complete set of names that are meant to be\r\n        // eager loaded from the model and runs the \"resolution\" process\r\n        // for each of them so that they are properly eager loaded\r\n        for (const name of names) {\r\n            let _model = model;\r\n            for (const part of name.split(\".\")) {\r\n                const isSequence = Array.isArray(_model);\r\n                if (isSequence) {\r\n                    _model = await Promise.all(_model.map(value => this._res(value, part, kwargs)));\r\n                } else _model = await this._res(_model, part, kwargs);\r\n                if (!_model) break;\r\n            }\r\n        }\r\n\r\n        // returns the resulting model to the caller method, most of the\r\n        // times this model should have not been touched\r\n        return model;\r\n    }\r\n\r\n    /**\r\n     * Resolves a specific model part taking into account the multiple\r\n     * possible resolution strategies.\r\n     *\r\n     * Most of its logic will be associated with reference like types.\r\n     *\r\n     * This method will also (for map based resolution strategies) change\r\n     * the owner model, setting its references with the resolved maps, this\r\n     * is required as maps do not allow reference objects to exist.\r\n     *\r\n     * @param {Object} model The model map to be used in the resolution process.\r\n     * @param {String} part The name of the model's part to be resolved.\r\n     * @returns {Object} The resolved part that may be either a map or an object\r\n     * depending on the resolution strategy.\r\n     */\r\n    static async _res(model, part, kwargs = {}) {\r\n        // in case the provided is not valid returns it (no resolution is\r\n        // possible) otherwise gather the base value for resolution\r\n        if (!model) return model;\r\n        let value = model[part];\r\n\r\n        // check the data type of the requested name for resolution\r\n        // and in case it's not valid and not a reference returns it\r\n        // immediately, no resolution to be performed\r\n        const isReference = TYPE_REFERENCES.some(type => value instanceof type);\r\n        if (!value && !isReference) return value;\r\n\r\n        // in case the value is a reference type object then runs\r\n        // the resolve operation effectively resolving the values\r\n        // (this is considered a very expensive operation), notice\r\n        // that this operation is going to respect the map vs. instance\r\n        // kind of resolution process so the data type of the resulting\r\n        // value is going to depend on that\r\n        if (isReference) value = await value.resolve({ eagerL: true });\r\n\r\n        // in case the map resolution process was requested an explicit\r\n        // set of the resolved value is required (implicit resolution\r\n        // using `resolve()`) is not enough to ensure proper type structure\r\n        if (kwargs.map) model[part] = value;\r\n\r\n        // returns the \"final\" (possibly resolved) value to the caller method\r\n        // ready to be used for possible merging processes\r\n        return value;\r\n    }\r\n\r\n    static _findS(params) {\r\n        // tries to retrieve the find name value from the provided\r\n        // named arguments defaulting to an unset value otherwise\r\n        const findN = params.find_n;\r\n        delete params.find_n;\r\n\r\n        // retrieves the kind of insensitive strategy that is going\r\n        // to be used for the resolution of regular expressions,\r\n        // this should affect all the filters and so it should be\r\n        // used with some amount of care\r\n        const findI = params.find_i || false;\r\n        delete params.find_i;\r\n\r\n        // retrieves the kind of default operation to be performed\r\n        // this may be either: right, left or both and the default\r\n        // value is both so that the token is matched in case it\r\n        // appears anywhere in the search string\r\n        const findT = params.find_t || \"both\";\r\n        delete params.find_t;\r\n\r\n        // retrieves the find string into a local variable, then\r\n        // removes the find string from the named arguments map\r\n        // so that it's not going to be erroneously used by the\r\n        // underlying find infra-structure\r\n        const findS = params.find_s;\r\n        delete params.find_s;\r\n\r\n        // in case the find string is currently not defined in the\r\n        // named arguments map returns immediately as nothing is\r\n        // meant to be done on this method\r\n        if (!findS) return;\r\n\r\n        // retrieves the \"name\" of the attribute that is considered\r\n        // to be the default (representation) for the model in case\r\n        // there's none returns immediately, as it's not possible\r\n        // to proceed with the filter creation\r\n        const defaultName = findN || this.default; // TODO DEFAULT WORKS?\r\n        if (!defaultName) return;\r\n\r\n        // constructs the proper right and left parts of the regex\r\n        // that is going to be constructed for the matching of the\r\n        // value, this is achieved by checking the find type\r\n        const right = findT === \"right\" ? \"^\" : \"\";\r\n        const left = findT === \"left\" ? \"$\" : \"\";\r\n\r\n        // retrieves the definition for the default attribute and uses\r\n        // it to retrieve it's target data type, defaulting to the\r\n        // string type in case none is defined in the schema\r\n        const defaultT = this.definitionN(defaultName).type || String;\r\n\r\n        let findV;\r\n\r\n        try {\r\n            // in case the target date type for the default field is\r\n            // string the both sides wildcard regex is used for the\r\n            // search\r\n            if (defaultT === String) {\r\n                findV = {\r\n                    $regex: right + escapeStringRegexp(findS) + left,\r\n                    $options: findI ? \"-i\" : \"\"\r\n                };\r\n            } else {\r\n                findV = null;\r\n            }\r\n        } catch (err) {\r\n            // in case there's an error in the conversion for\r\n            // the target type value sets the search value as\r\n            // invalid (not going to be used in filter)\r\n            findV = null;\r\n        }\r\n\r\n        if (findV) this._filterMerge(defaultName, findV, params);\r\n    }\r\n\r\n    static get fields() {\r\n        return Object.keys(this.schema);\r\n    }\r\n\r\n    static get default() {\r\n        const defaultEntry = Object.entries(this.schema).find(\r\n            ([name, definition]) => definition.default\r\n        );\r\n        return defaultEntry ? defaultEntry[0] : null;\r\n    }\r\n\r\n    static definitionN(name) {\r\n        return this.schema[name] || {};\r\n    }\r\n\r\n    static _filterMerge(name, filter, params, operator = null) {\r\n        // retrieves a possible previous filter defined for the\r\n        // provided name in case it does exist must concatenate\r\n        // that previous value in a join statement according to\r\n        // the currently defined operator\r\n        const filterP = params[name];\r\n        if (filterP || operator) {\r\n            // defaults the operator for the join of the names to the\r\n            // value and then ensures that the value of the operator\r\n            // is within a valid range of values\r\n            const _operator = operator || \"$and\";\r\n            verify([\"$and\", \"$or\"].includes(_operator));\r\n\r\n            // retrieves the and references for the current arguments\r\n            // and appends the two filter values (current and previous)\r\n            // then deletes the current name reference in the arguments\r\n            // and updates the name value to the and value\r\n            const filterA = params[_operator] || [];\r\n\r\n            // builds the filter object assigned to the name of the\r\n            // variable and adds to the list of values\r\n            const _filter = {};\r\n            _filter[name] = filter;\r\n            filterA.push(_filter);\r\n\r\n            // in case there's a previous filter also adds it to the\r\n            // list of filter values\r\n            if (filterP) {\r\n                const _filterP = {};\r\n                _filterP[name] = filterP;\r\n                filterA.push(_filterP);\r\n            }\r\n\r\n            // updates the filter reference and updates the operator\r\n            // name (as expected)\r\n            filter = filterA;\r\n            delete params[name];\r\n            name = _operator;\r\n        }\r\n\r\n        // sets the currently defined filter structures in the keyword\r\n        // based arguments map for the currently defined name\r\n        params[name] = filter;\r\n    }\r\n\r\n    static get schema() {\r\n        throw new NotImplementedError();\r\n    }\r\n\r\n    /**\r\n     * Safer version of the schema structure that filters\r\n     * some of the field attributes making it suitable to\r\n     * be used by some of the collection adapters.\r\n     */\r\n    static get schemaSafe() {\r\n        const schema = {};\r\n        for (const [key, value] of Object.entries(this.schema)) {\r\n            schema[key] = {\r\n                type: value.type || String,\r\n                index: value.index || false\r\n            };\r\n        }\r\n        return schema;\r\n    }\r\n\r\n    static get collection() {\r\n        if (this._collectionI) return this._collectionI;\r\n        this._collectionI = this._collection(this.dataOptions);\r\n        return this._collectionI;\r\n    }\r\n\r\n    static get idName() {\r\n        return \"id\";\r\n    }\r\n\r\n    static get dataOptions() {\r\n        return {\r\n            name: this.name,\r\n            schema: this.schemaSafe\r\n        };\r\n    }\r\n\r\n    static get increments() {\r\n        if (this._increments !== undefined) return this._increments;\r\n        const increments = [];\r\n\r\n        for (const [name, value] of Object.entries(this.schema)) {\r\n            const isIncrement = value.increment || false;\r\n            if (!isIncrement) continue;\r\n            increments.push(name);\r\n        }\r\n\r\n        this._increments = increments;\r\n        return increments;\r\n    }\r\n\r\n    static get immutables() {\r\n        if (this._immutables !== undefined) return this._immutables;\r\n        const immutables = [];\r\n\r\n        for (const [name, value] of Object.entries(this.schema)) {\r\n            const isImmutable = value.immutable || false;\r\n            if (!isImmutable) continue;\r\n            immutables.push(name);\r\n        }\r\n\r\n        this._immutables = immutables;\r\n        return immutables;\r\n    }\r\n\r\n    static _collection(options) {\r\n        const adapter = this.adapter[0].toUpperCase() + this.adapter.slice(1);\r\n        return new collection[adapter + \"Collection\"](options);\r\n    }\r\n\r\n    static async _increment(name) {\r\n        const _name = this.name + \":\" + name;\r\n        const store = this._collection({\r\n            name: \"counters\",\r\n            schema: {\r\n                id: { type: String, index: true },\r\n                seq: { type: Number }\r\n            }\r\n        });\r\n        let result = await store.findOneAndUpdate(\r\n            {\r\n                id: _name\r\n            },\r\n            {\r\n                $inc: {\r\n                    seq: 1\r\n                }\r\n            },\r\n            {\r\n                new: true,\r\n                upsert: true\r\n            }\r\n        );\r\n        result = result || (await store.findOne({ id: _name }));\r\n        return result.seq;\r\n    }\r\n\r\n    static async _ensureMin(name, value) {\r\n        const _name = this.name + \":\" + name;\r\n        const store = this._collection({\r\n            name: \"counters\",\r\n            schema: {\r\n                id: { type: String },\r\n                seq: { type: Number }\r\n            }\r\n        });\r\n        let result = await store.findOneAndUpdate(\r\n            {\r\n                id: _name\r\n            },\r\n            {\r\n                $max: {\r\n                    seq: value\r\n                }\r\n            },\r\n            {\r\n                new: true,\r\n                upsert: true\r\n            }\r\n        );\r\n        result = result || (await store.findOne({ id: _name }));\r\n        return result.seq;\r\n    }\r\n\r\n    /**\r\n     * Builds the provided list of eager values, preparing them\r\n     * according to the current model rules.\r\n     *\r\n     * The composition process includes the extension of the provided\r\n     * sequence of eager values with the base ones defined in the\r\n     * model, if not handled correctly this is an expensive operation.\r\n     *\r\n     * @param {Array} eager The base sequence containing the various fields\r\n     * that should be eagerly loaded for the operation.\r\n     * @returns {Array} The \"final\" resolved array that may be used for the eager\r\n     * loaded operation performance.\r\n     */\r\n    static _eagerB(eager) {\r\n        eager = eager || [];\r\n        eager = Array.isArray(eager) ? eager : [eager];\r\n        eager.push(...this.eagers);\r\n        if (eager.length === 0) return eager;\r\n        eager = [...new Set(eager)];\r\n        return eager;\r\n    }\r\n\r\n    get cls() {\r\n        return this.constructor;\r\n    }\r\n\r\n    async save({\r\n        validate = true,\r\n        isNew = undefined,\r\n        incrementA = undefined,\r\n        immutablesA = undefined,\r\n        preSave = true,\r\n        preCreate = true,\r\n        preUpdate = true,\r\n        postSave = true,\r\n        postCreate = true,\r\n        postUpdate = true,\r\n        beforeCallbacks = [],\r\n        afterCallbacks = []\r\n    } = {}) {\r\n        // checks if the instance to be saved is a new instance\r\n        // or if this is an update operation and then determines\r\n        // series of default values taking that into account\r\n        if (isNew === undefined) isNew = this.isNew;\r\n        if (incrementA === undefined) incrementA = isNew;\r\n        if (immutablesA === undefined) immutablesA = !isNew;\r\n\r\n        // in case the validate flag is set runs the model validation\r\n        // defined for the current model\r\n        if (validate) await this.validate();\r\n\r\n        // calls the complete set of event handlers for the current\r\n        // save operation, this should trigger changes in the model\r\n        if (preSave) await this.preSave();\r\n        if (preCreate) await this.preCreate();\r\n        if (preUpdate) await this.preUpdate();\r\n\r\n        // filters the values that are present in the current model\r\n        // so that only the valid ones are stored in, invalid values\r\n        // are going to be removed, note that if the operation is an\r\n        // update operation and the \"immutable rules\" also apply, the\r\n        // returned value is normalized meaning that for instance if\r\n        // any relation is loaded the reference value is returned instead\r\n        // of the loaded relation values (required for persistence)\r\n        let model = await this._filter({\r\n            incrementA: incrementA,\r\n            immutablesA: immutablesA,\r\n            normalize: true\r\n        });\r\n\r\n        // runs the lower layer integrity verifications that should raise\r\n        // exception in case there's a failure, the verifications greatly\r\n        // vary depending if the model is being persisted for the first\r\n        // time or not (`isNew` flag)\r\n        await this.verify(model, isNew);\r\n\r\n        // calls the complete set of callbacks that should be called\r\n        // before the concrete data store save operation\r\n        for (const callback of beforeCallbacks) {\r\n            await callback(this, this.model);\r\n        }\r\n\r\n        // verifies if the current model is a new one or if instead\r\n        // represents an update to a previously stored model and create\r\n        // or update data accordingly\r\n        if (isNew) {\r\n            model = await this.cls.collection.create(model);\r\n        } else {\r\n            const conditions = {};\r\n            conditions[this.cls.idName] = this.identifier;\r\n            model = await this.cls.collection.findOneAndUpdate(conditions, model);\r\n        }\r\n\r\n        // wraps the model object using the current instance\r\n        // effectively making the data available for consumers\r\n        this.wrap(model);\r\n\r\n        // calls the complete set of callbacks that should be called\r\n        // after the concrete data store save operation\r\n        for (const callback of afterCallbacks) {\r\n            await callback(this, this.model);\r\n        }\r\n\r\n        // calls the post save event handlers in order to be able to\r\n        // execute appropriate post operations\r\n        if (postSave) await this.postSave();\r\n        if (postCreate) await this.postCreate();\r\n        if (postUpdate) await this.postUpdate();\r\n\r\n        return this;\r\n    }\r\n\r\n    async delete({\r\n        preDelete = true,\r\n        postDelete = true,\r\n        beforeCallbacks = [],\r\n        afterCallbacks = []\r\n    } = {}) {\r\n        // calls the complete set of event handlers for the current\r\n        // delete operation, this should trigger changes in the model\r\n        if (preDelete) await this.preDelete();\r\n\r\n        // calls the complete set of callbacks that should be called\r\n        // before the concrete data store delete operation\r\n        for (const callback of beforeCallbacks) {\r\n            await callback(this, this.model);\r\n        }\r\n\r\n        // builds the set of conditions that rare going to be used for\r\n        // the concrete delete operation to be performed\r\n        const conditions = {};\r\n        conditions[this.cls.idName] = this.identifier;\r\n        await this.cls.collection.findOneAndDelete(conditions);\r\n\r\n        // calls the complete set of callbacks that should be called\r\n        // after the concrete data store delete operation\r\n        for (const callback of afterCallbacks) {\r\n            await callback(this, this.model);\r\n        }\r\n\r\n        // calls the complete set of event handlers for the current\r\n        // delete operation, this should trigger changes in the model\r\n        if (postDelete) await this.postDelete();\r\n\r\n        return this;\r\n    }\r\n\r\n    async advance(name, delta = 1) {\r\n        const conditions = {};\r\n        conditions[this.cls.idName] = this.identifier;\r\n        const increments = {};\r\n        increments[name] = delta;\r\n        let value = await this.cls.collection.findOneAndUpdate(\r\n            conditions,\r\n            {\r\n                $inc: increments\r\n            },\r\n            {\r\n                new: true\r\n            }\r\n        );\r\n        value = value || (await this.cls.collection.find_one(conditions));\r\n        const _value = value[name];\r\n        this[name] = _value;\r\n        return _value;\r\n    }\r\n\r\n    async reload(params = {}) {\r\n        if (this.isNew) {\r\n            throw new OperationalError(\"Can't reload a new model entity\", 412);\r\n        }\r\n        const model = await this.cls.get({ ...params, _id: this._id });\r\n        return model;\r\n    }\r\n\r\n    /**\r\n     * Runs a series of assertions on the current model\r\n     * definition raising assertion errors in case there\r\n     * are issues with the internal structure of it.\r\n     *\r\n     * @param {Object} model The model that is going to\r\n     * be verified for a series of elements.\r\n     * @param {Boolean} isNew If the model is being persisted\r\n     * for the first time in the data source, or if instead\r\n     * it's a secondary persistence action.\r\n     */\r\n    async verify(model, isNew = true) {\r\n        if (isNew) {\r\n            // ensures that the primary identifier field of the model is set,\r\n            // not having this on initial save would break mode's integrity\r\n            verify(\r\n                this.getIdentifier(model) !== undefined && this.getIdentifier(model) !== null,\r\n                \"The identifier must be defined before saving\",\r\n                400,\r\n                OperationalError\r\n            );\r\n\r\n            // makes sure that all of the required fields in the schema\r\n            // are present in the model\r\n            for (const [name, field] of Object.entries(this.cls.schema)) {\r\n                verify(\r\n                    !field.required || ![undefined, null].includes(model[name]),\r\n                    `No value provided for required field '${name}'`,\r\n                    400,\r\n                    OperationalError\r\n                );\r\n            }\r\n        }\r\n\r\n        // verifies that the model to be saved has at least one field\r\n        // set, otherwise the save operation would be superfluous\r\n        verify(\r\n            Object.keys(model).length > 0,\r\n            \"There must be at least one field being persisted\",\r\n            400,\r\n            OperationalError\r\n        );\r\n    }\r\n\r\n    async preSave() {}\r\n\r\n    async preCreate() {}\r\n\r\n    async preUpdate() {}\r\n\r\n    async preDelete() {}\r\n\r\n    async postSave() {}\r\n\r\n    async postCreate() {}\r\n\r\n    async postUpdate() {}\r\n\r\n    async postDelete() {}\r\n\r\n    async _filter({\r\n        incrementA = true,\r\n        immutablesA = false,\r\n        normalize = false,\r\n        resolve = false,\r\n        all = false,\r\n        evaluator = \"jsonV\"\r\n    } = {}) {\r\n        // creates the object that is going to be populated with the valid\r\n        // values for persistence\r\n        const model = {};\r\n\r\n        // iterates over each of the fields that are meant to have its value\r\n        // increment and performs the appropriate operation taking into account\r\n        // if the value is already populated or not\r\n        for (const name of this.cls.increments) {\r\n            if (incrementA === false) continue;\r\n            const exists = this.model[name] !== undefined;\r\n            if (exists) {\r\n                model[name] = await this.cls._ensureMin(name, this.model[name]);\r\n            } else {\r\n                model[name] = await this.cls._increment(name);\r\n            }\r\n        }\r\n\r\n        // iterates over all the model items to filter the ones\r\n        // that are not valid for the current class context\r\n        await Promise.all(\r\n            Object.entries(this.model).map(async ([name, value]) => {\r\n                if (this.cls.schema[name] === undefined) return;\r\n                if (incrementA && this.cls.increments.includes(name)) return;\r\n                if (immutablesA && this.cls.immutables.includes(name)) return;\r\n                model[name] = await this._evaluate(name, value, evaluator);\r\n            })\r\n        );\r\n\r\n        // in case the normalize flag is set must iterate over all\r\n        // items to try to normalize the values by calling the reference\r\n        // value this will returns the reference index value instead of\r\n        // the normal value that would prevent normalization\r\n        if (normalize) {\r\n            await Promise.all(\r\n                Object.entries(this.model).map(async ([name, value]) => {\r\n                    if (this.cls.schema[name] === undefined) return;\r\n                    if (!value || !value.refV) return;\r\n                    model[name] = await value.refV();\r\n                })\r\n            );\r\n        }\r\n\r\n        // in case the resolution flag is set, it means that a recursive\r\n        // approach must be performed for the resolution of values that\r\n        // implement the map value (recursive resolution) method, this is\r\n        // a complex (and possible computational expensive) process that\r\n        // may imply access to the base data source\r\n        if (resolve) {\r\n            throw new NotImplementedError(\"'resolve' not implemented\");\r\n        }\r\n\r\n        // in case the all flag is set the extra fields (not present\r\n        // in definition) must also be used to populate the resulting\r\n        // (filtered) map so that it contains the complete set of values\r\n        // present in the base map of the current instance\r\n        if (all) {\r\n            throw new NotImplementedError(\"'all' not implemented\");\r\n        }\r\n\r\n        // returns the model containing the \"filtered\" items resulting\r\n        // from the validation of the items against the model class\r\n        return model;\r\n    }\r\n\r\n    async _evaluate(name, value, evaluator = \"jsonV\") {\r\n        // verifies if the current value is an iterable one in case\r\n        // it is runs the evaluate method for each of the values to\r\n        // try to resolve them into the proper representation, note\r\n        // that both base iterable values (lists and dictionaries) and\r\n        // objects that implement the evaluator method are not considered\r\n        // to be iterables and normal operation applies\r\n        let isIterable;\r\n        try {\r\n            isIterable = Boolean((value && value.items) || Array.isArray(value));\r\n        } catch (err) {\r\n            // AttributeErrors are tolerated since they might simply\r\n            // represent a missing \"items\" field when dealing with\r\n            // references\r\n            if (!(err instanceof AttributeError)) throw err;\r\n            isIterable = false;\r\n        }\r\n\r\n        const hasEvaluator = Boolean(\r\n            evaluator && (Array.isArray(value) ? value.length : value) && value[evaluator]\r\n        );\r\n        isIterable = isIterable && !hasEvaluator;\r\n        if (isIterable) {\r\n            const result = await Promise.all(\r\n                (value.items || value).map(item => this._evaluate(name, item, evaluator))\r\n            );\r\n            return result;\r\n        }\r\n\r\n        // verifies the current value's class is sub class of the model\r\n        // class and in case it's extracts the relation name from the\r\n        // value and sets it as the value in iteration\r\n        const isModel = value instanceof Model;\r\n        if (isModel) {\r\n            const meta = this.cls.definitionN(name);\r\n            const type = meta.type || String;\r\n            const _name = type._name;\r\n            value = value[_name];\r\n        }\r\n\r\n        // iterates over all the values and retrieves the map value for\r\n        // each of them in case the value contains a map value retrieval\r\n        // method otherwise uses the normal value returning it to the caller\r\n        const method = hasEvaluator ? value[evaluator] : null;\r\n        value = method ? await method.bind(value)(false) : value;\r\n        return value;\r\n    }\r\n\r\n    getIdentifier(model) {\r\n        return model[this.cls.idName];\r\n    }\r\n\r\n    get identifier() {\r\n        return this.getIdentifier(this.model);\r\n    }\r\n}\r\n\r\nexport class ModelMemory extends ModelStore {\r\n    static get adapter() {\r\n        return \"memory\";\r\n    }\r\n\r\n    static get dataOptions() {\r\n        return Object.assign(super.dataOptions, { storage: this.storage });\r\n    }\r\n\r\n    static get storage() {\r\n        return MEMORY_STORAGE[this.name];\r\n    }\r\n}\r\n\r\n/**\r\n * Retrieves the default (initial) value for the a certain\r\n * provided data type falling back to the provided default\r\n * value in case it's not possible to retrieve a new valid\r\n *  default for value for the type.\r\n *\r\n * The process of retrieval of the default value to a certain\r\n * type may include the calling of a lambda function to obtain\r\n * a new instance of the default value, this avoid the usage\r\n * of global shared structures for the default values, that\r\n * could cause extremely confusing situations.\r\n *\r\n * @param {Type} type The data type object for which to retrieve its\r\n * default value.\r\n * @param {Object} _default The default value to be returned in case it's\r\n * not possible to retrieve a better one.\r\n * @returns {Object} The \"final\" default value for the data type according\r\n * to the best possible strategy.\r\n */\r\nexport const typeD = function(type, _default = null) {\r\n    if (TYPE_DEFAULTS[type] === undefined) return _default;\r\n    _default = TYPE_DEFAULTS[type];\r\n    if (typeof _default !== \"function\") return _default;\r\n    return _default();\r\n};\r\n\r\nexport default Model;\r\n","import { ensurePermissions } from \"../base\";\r\n\r\nexport const ensureExpress = token => {\r\n    return (req, res, next) => {\r\n        ensurePermissions(token, req).catch(next).then(next);\r\n    };\r\n};\r\n\r\nexport default ensureExpress;\r\n","export const yoniusRollup = function() {\r\n    return {\r\n        name: \"yonius\",\r\n        resolveId: function(importee) {\r\n            switch (importee) {\r\n                case \"fs\":\r\n                case \"node-fetch\":\r\n                    return importee;\r\n                default:\r\n                    return null;\r\n            }\r\n        },\r\n        load: function(id) {\r\n            switch (id) {\r\n                case \"fs\":\r\n                    return \"export const promises = {};\";\r\n                case \"node-fetch\":\r\n                    return \"export default fetch;\";\r\n                default:\r\n                    return null;\r\n            }\r\n        }\r\n    };\r\n};\r\n\r\nexport default yoniusRollup;\r\n","import { name, version } from \"../package.json\";\r\n\r\nexport * from \"./api\";\r\nexport * from \"./base\";\r\nexport * from \"./data\";\r\nexport * from \"./express\";\r\nexport * from \"./rollup\";\r\nexport * from \"./util\";\r\n\r\nexport const NAME = name;\r\nexport const VERSION = version;\r\n"],"names":["fs","path","join","env","load","normalize","resolve","dirname","loadConf"],"mappings":"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"}