{"version":3,"file":"index.mjs","sources":["../src/constants.ts","../src/utils/object.ts","../src/utils/array.ts","../src/utils/mapping.ts","../src/utils/key.ts","../src/utils/merge.ts","../src/utils/relation.ts","../src/utils/url.ts","../src/parameter/utils/parse/allowed-option.ts","../src/parameter/fields/container.ts","../src/parameter/fields/constants.ts","../src/errors/code.ts","../src/errors/base.ts","../src/errors/build.ts","../src/errors/parse.ts","../src/parameter/fields/errors/build.ts","../src/parameter/fields/errors/parse.ts","../src/parameter/fields/utils/domain.ts","../src/parameter/fields/utils/input.ts","../src/parameter/fields/utils/name.ts","../src/parameter/fields/parse.ts","../src/parameter/filters/constants.ts","../src/parameter/filters/utils/value.ts","../src/parameter/filters/utils/operator.ts","../src/parameter/filters/container.ts","../src/parameter/filters/build.ts","../src/parameter/filters/errors/build.ts","../src/parameter/filters/errors/parse.ts","../src/parameter/filters/parse.ts","../src/parameter/pagination/errors/build.ts","../src/parameter/pagination/errors/parse.ts","../src/parameter/pagination/parse.ts","../src/parameter/relations/errors/build.ts","../src/parameter/relations/errors/parse.ts","../src/parameter/relations/utils/parents.ts","../src/parameter/relations/utils/path.ts","../src/parameter/relations/parse.ts","../src/parameter/sort/type.ts","../src/parameter/sort/build.ts","../src/parameter/sort/container.ts","../src/parameter/sort/errors/build.ts","../src/parameter/sort/errors/parse.ts","../src/parameter/sort/utils.ts","../src/parameter/sort/parse.ts","../src/build/builder.ts","../src/build/module.ts","../src/parse/utils.ts","../src/parse/parser.ts","../src/parse/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n// -----------------------------------------------------------\n\nexport enum Parameter {\n    FILTERS = 'filters',\n    FIELDS = 'fields',\n    PAGINATION = 'pagination',\n    RELATIONS = 'relations',\n    SORT = 'sort',\n}\n\n// -----------------------------------------------------------\n\nexport enum URLParameter {\n    FILTERS = 'filter',\n    FIELDS = 'fields',\n    PAGINATION = 'page',\n    RELATIONS = 'include',\n    SORT = 'sort',\n}\n\n// -----------------------------------------------------------\n\nexport const DEFAULT_ID = '__DEFAULT__';\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n    return (\n        !!item &&\n        typeof item === 'object' &&\n        !Array.isArray(item)\n    );\n}\n\nexport function extendObject(target: Record<string, any>, source: Record<string, any>) {\n    const keys = Object.keys(source);\n    for (let i = 0; i < keys.length; i++) {\n        target[keys[i]] = source[keys[i]];\n    }\n\n    return target;\n}\n\nexport function hasOwnProperty<\n    X extends Record<string, any>,\n    Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n    return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\ntype Options = {\n    transformer?: (\n        input: unknown,\n        output: Record<string, any>,\n        key: string\n    ) => boolean | undefined,\n    validator?: (\n        input: unknown,\n        key: string\n    ) => boolean | undefined,\n    prefixParts?: string[]\n};\n\nexport function toFlatObject(\n    data: Record<string, any>,\n    options: Options = {},\n): Record<string, any> {\n    const prefixParts = options.prefixParts || [];\n    let output: Record<string, string> = {};\n\n    const keys = Object.keys(data);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n\n        if (isObject(data[key])) {\n            output = {\n                ...output,\n                ...toFlatObject(data[key], {\n                    ...options,\n                    prefixParts: [...prefixParts, key],\n                }),\n            };\n\n            continue;\n        }\n\n        const destinationKey = [...prefixParts, key].join('.');\n\n        if (options.transformer) {\n            const result = options.transformer(data[key], output, destinationKey);\n            if (result) {\n                continue;\n            }\n        }\n\n        if (options.validator) {\n            const result = options.validator(data[key], destinationKey);\n            if (!result) {\n                continue;\n            }\n        }\n\n        output[destinationKey] = data[key];\n    }\n\n    return output;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DEFAULT_ID } from '../constants';\nimport { isObject } from './object';\n\nexport function buildKeyPath(key: string, prefix?: string) {\n    if (typeof prefix === 'string') {\n        return `${prefix}.${key}`;\n    }\n\n    return key;\n}\n\ntype Options = {\n    transformer?: (\n        input: unknown,\n        output: string[],\n        prefix?: string\n    ) => boolean | undefined\n};\n\nexport function toKeyPathArray(\n    input: unknown,\n    options?: Options,\n    prefix?: string,\n): string[] {\n    options = options || {};\n\n    const output: string[] = [];\n\n    if (options.transformer) {\n        const result = options.transformer(input, output, prefix);\n        if (result) {\n            return output;\n        }\n    }\n\n    if (Array.isArray(input)) {\n        for (let i = 0; i < input.length; i++) {\n            if (options.transformer) {\n                const result = options.transformer(input[i], output, prefix);\n                if (result) {\n                    return output;\n                }\n            }\n\n            if (Array.isArray(input[i])) {\n                for (let j = 0; j < input[i].length; j++) {\n                    const key = buildKeyPath(input[i][j], prefix);\n                    output.push(key);\n                }\n\n                continue;\n            }\n\n            if (typeof input[i] === 'string') {\n                output.push(buildKeyPath(input[i], prefix));\n\n                continue;\n            }\n\n            if (isObject(input[i])) {\n                const keys = Object.keys(input[i]);\n                for (let j = 0; j < keys.length; j++) {\n                    const value = buildKeyPath(keys[j] as string, prefix);\n                    const data = toKeyPathArray(input[i][keys[j]], options, value);\n                    if (data.length === 0) {\n                        output.push(value);\n                    } else {\n                        output.push(...data);\n                    }\n                }\n            }\n        }\n\n        return output;\n    }\n\n    if (isObject(input)) {\n        const keys = Object.keys(input);\n        for (let i = 0; i < keys.length; i++) {\n            const value = buildKeyPath(keys[i], prefix);\n            const data = toKeyPathArray(input[keys[i]], options, value);\n            if (data.length === 0) {\n                output.push(value);\n            } else {\n                output.push(...data);\n            }\n        }\n\n        return output;\n    }\n\n    if (typeof input === 'string') {\n        const value = buildKeyPath(input, prefix);\n        output.push(value);\n\n        return output;\n    }\n\n    return output;\n}\n\nexport function groupArrayByKeyPath(input: string[]): Record<string, string[]> {\n    const pathItems: Record<string, string[]> = {};\n\n    for (let i = 0; i < input.length; i++) {\n        const parts = input[i].split('.');\n\n        let key: string;\n        let name: string;\n        if (parts.length === 1) {\n            key = DEFAULT_ID;\n            name = input[i];\n        } else {\n            name = parts.pop() as string;\n            key = parts.join('.');\n        }\n\n        if (!Object.prototype.hasOwnProperty.call(pathItems, key)) {\n            pathItems[key] = [];\n        }\n\n        pathItems[key].push(name);\n    }\n\n    return pathItems;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from './object';\n\nexport function applyMapping(\n    name: string,\n    map?: Record<string, string>,\n    onlyKey?: boolean,\n) {\n    if (typeof map === 'undefined') {\n        return name;\n    }\n\n    const keys = Object.keys(map);\n    if (keys.length === 0) {\n        return name;\n    }\n\n    let parts = name.split('.');\n\n    const output = [];\n    let run = true;\n    while (run) {\n        const value = parts.shift();\n        if (typeof value === 'undefined') {\n            run = false;\n            break;\n        }\n\n        if (hasOwnProperty(map, value)) {\n            output.push(map[value]);\n        } else {\n            let found = false;\n\n            const rest : string[] = [];\n            const copy = [...parts];\n            while (copy.length > 0) {\n                const key = [value, ...copy].join('.');\n                if (hasOwnProperty(map, key)) {\n                    output.push(map[key]);\n                    found = true;\n                    break;\n                } else {\n                    const last = copy.pop();\n                    if (last) {\n                        rest.unshift(last);\n                    }\n                }\n            }\n\n            if (found) {\n                parts = rest;\n            } else {\n                output.push(value);\n            }\n        }\n    }\n\n    if (onlyKey) {\n        return output.pop() || name;\n    }\n\n    if (output.length === 0) {\n        return name;\n    }\n\n    return output.join('.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { KeyDetails } from './type';\n\nexport function parseKey(\n    field: string,\n) : KeyDetails {\n    const parts : string[] = field.split('.');\n\n    const name = parts.pop() as string;\n\n    return {\n        name,\n        path: parts.length > 0 ? parts.join('.') : undefined,\n    };\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createMerger } from 'smob';\n\nexport const merge = createMerger({\n    clone: true,\n    inPlace: false,\n    array: true,\n    arrayDistinct: true,\n});\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from 'smob';\nimport type { RelationsParseOutput } from '../parameter';\nimport type { KeyDetails } from './type';\n\nexport function isPathAllowedByRelations(\n    path?: string,\n    includes?: RelationsParseOutput,\n) : boolean {\n    if (typeof path === 'undefined' || typeof includes === 'undefined') {\n        return true;\n    }\n\n    return includes.some(\n        (include) => include.key === path,\n    );\n}\n\nexport function buildKeyWithPath(input: KeyDetails) : string;\nexport function buildKeyWithPath(key: string, path: string): string;\nexport function buildKeyWithPath(\n    name: string | KeyDetails,\n    path?: string,\n) : string {\n    let details : KeyDetails;\n    if (isObject(name)) {\n        details = name;\n    } else {\n        details = {\n            name,\n            path,\n        };\n    }\n\n    return details.path || path ?\n        `${details.path || path}.${details.name}` :\n        details.name;\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from 'smob';\n\ntype Options = {\n    withoutQuestionMark?: boolean,\n    prefixParts?: string[]\n};\n\nexport function serializeAsURI(data: Record<string, any>, options: Options = {}) : string {\n    // Loop through the data object\n    const keys = Object.keys(data);\n    if (keys.length === 0) {\n        return '';\n    }\n\n    const prefixParts = options.prefixParts || [];\n\n    // Create a query array to hold the key/value pairs\n    const query: string[] = [];\n\n    for (let i = 0; i < keys.length; i++) {\n        let value = data[keys[i]];\n\n        if (isObject(value)) {\n            query.push(...serializeAsURI(value, {\n                ...options,\n                prefixParts: [...prefixParts, keys[i]],\n            }));\n\n            continue;\n        }\n\n        if (Array.isArray(value)) {\n            value = value\n                .map((el) => `${el}`)\n                .filter(Boolean)\n                .join(',');\n        }\n\n        if (value) {\n            const destinationKey = [...prefixParts, keys[i]]\n                .reduce((acc, curr) => `${acc}[${curr}]`, '');\n\n            // Encode each key and value, concatenate them into a string, and push them to the array\n            query.push(`${encodeURIComponent(destinationKey)}=${encodeURIComponent(value)}`);\n        }\n    }\n\n    return query.join('&');\n}\n\nexport function buildURLQueryString(data?: string | Record<string, any>, options: Options = {}) {\n    if (typeof data === 'undefined' || data === null) return '';\n\n    // If the data is already a string, return it as-is\n    if (typeof data === 'string') return data;\n\n    const output = serializeAsURI(data);\n    if (output.length === 0) {\n        return '';\n    }\n\n    // Join each item in the array with a `&` and return the resulting string\n    return (options.withoutQuestionMark ? '' : '?') + output;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { NestedKeys, NestedResourceKeys, ObjectLiteral } from '../../../types';\nimport { toKeyPathArray } from '../../../utils';\nimport type { ParseAllowedOption } from '../../type';\n\nexport function flattenParseAllowedOption<T>(\n    input?: ParseAllowedOption<T>,\n) : string[] {\n    if (typeof input === 'undefined') {\n        return [];\n    }\n\n    return toKeyPathArray(input);\n}\n\nexport function isPathCoveredByParseAllowedOption<T extends ObjectLiteral>(\n    input: ParseAllowedOption<T> |\n    NestedKeys<T>[] |\n    NestedResourceKeys<T>[],\n    path: string | string[],\n) : boolean {\n    const paths = Array.isArray(path) ? path : [path];\n\n    const items = toKeyPathArray(input);\n    for (let i = 0; i < items.length; i++) {\n        if (paths.indexOf(items[i]) !== -1) {\n            return true;\n        }\n    }\n\n    return false;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ObjectLiteral } from '../../types';\nimport { groupArrayByKeyPath, merge, toFlatObject } from '../../utils';\nimport { flattenParseAllowedOption } from '../utils';\nimport type { FieldsParseOptions } from './type';\n\nexport class FieldsOptionsContainer<T extends ObjectLiteral = ObjectLiteral> {\n    public options : FieldsParseOptions<T>;\n\n    public default : Record<string, string[]>;\n\n    public defaultIsUndefined : boolean;\n\n    public allowed : Record<string, string[]>;\n\n    public allowedIsUndefined : boolean;\n\n    public items : Record<string, string[]>;\n\n    public keys : string[];\n\n    public reverseMapping : Record<string, string>;\n\n    constructor(input: FieldsParseOptions<T> = {}) {\n        this.options = input;\n\n        this.allowed = {};\n        this.allowedIsUndefined = true;\n\n        this.default = {};\n        this.defaultIsUndefined = true;\n\n        this.items = {};\n        this.keys = [];\n\n        this.reverseMapping = {};\n\n        this.initDefault();\n        this.initAllowed();\n        this.initItems();\n\n        this.initReverseMapping();\n    }\n\n    protected initDefault() {\n        if (typeof this.options.default === 'undefined') {\n            this.default = {};\n            this.defaultIsUndefined = true;\n            return;\n        }\n\n        this.default = groupArrayByKeyPath(\n            flattenParseAllowedOption(this.options.default),\n        );\n        this.defaultIsUndefined = false;\n    }\n\n    protected initAllowed() {\n        if (typeof this.options.allowed === 'undefined') {\n            if (typeof this.options.default !== 'undefined') {\n                const items = toFlatObject(this.options.default, {\n                    validator(input) {\n                        if (!Array.isArray(input)) {\n                            return false;\n                        }\n\n                        return !input.some((el) => typeof el !== 'string');\n                    },\n                });\n\n                if (items.length > 0) {\n                    this.allowed = items;\n                    this.allowedIsUndefined = false;\n                    return;\n                }\n            }\n\n            this.allowed = {};\n            this.allowedIsUndefined = true;\n            return;\n        }\n\n        this.allowed = groupArrayByKeyPath(\n            flattenParseAllowedOption(this.options.allowed),\n        );\n        this.allowedIsUndefined = false;\n    }\n\n    protected initItems() {\n        this.items = merge(this.default || {}, this.allowed || {});\n        this.keys = Object.keys(this.items);\n    }\n\n    protected initReverseMapping() {\n        if (typeof this.options.mapping === 'undefined') {\n            return;\n        }\n\n        this.reverseMapping = this.buildReverseRecord(this.options.mapping);\n    }\n\n    private buildReverseRecord(\n        record: Record<string, string>,\n    ) : Record<string, string> {\n        const keys = Object.keys(record);\n        const output : Record<string, string> = {};\n\n        for (let i = 0; i < keys.length; i++) {\n            output[record[keys[i]]] = keys[i];\n        }\n\n        return output;\n    }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum FieldOperator {\n    INCLUDE = '+',\n    EXCLUDE = '-',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum ErrorCode {\n    NONE = 'none',\n\n    INPUT_INVALID = 'inputInvalid',\n\n    KEY_INVALID = 'keyInvalid',\n\n    KEY_PATH_INVALID = 'keyPathInvalid',\n\n    KEY_NOT_ALLOWED = 'keyNotAllowed',\n\n    KEY_VALUE_INVALID = 'keyValueInvalid',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ErrorCode } from './code';\nimport type { BaseErrorOptions } from './types';\n\nexport class BaseError extends Error {\n    public readonly code : `${ErrorCode}`;\n\n    constructor(input: BaseErrorOptions | string) {\n        if (typeof input === 'string') {\n            super(input);\n\n            this.code = ErrorCode.NONE;\n        } else {\n            super(input.message);\n\n            this.code = input.code || ErrorCode.NONE;\n        }\n    }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '../utils';\nimport { BaseError } from './base';\nimport type { BaseErrorOptions } from './types';\n\nexport class BuildError extends BaseError {\n    constructor(message?: string | BaseErrorOptions) {\n        if (isObject(message)) {\n            message.message = 'A building error has occurred.';\n        }\n\n        super(message || 'A building error has occurred.');\n    }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '../utils';\nimport { BaseError } from './base';\nimport { ErrorCode } from './code';\nimport type { BaseErrorOptions } from './types';\n\nexport class ParseError extends BaseError {\n    constructor(message?: string | BaseErrorOptions) {\n        if (isObject(message)) {\n            message.message = message.message || 'A parsing error has occurred.';\n        }\n\n        super(message || 'A parsing error has occurred.');\n    }\n\n    static inputInvalid() {\n        return new this({\n            message: 'The shape of the input is not valid.',\n            code: ErrorCode.INPUT_INVALID,\n        });\n    }\n\n    static keyNotAllowed(name: string) {\n        return new this({\n            message: `The key ${name} is not covered by allowed/default options.`,\n            code: ErrorCode.KEY_NOT_ALLOWED,\n        });\n    }\n\n    static keyInvalid(key: string) {\n        return new this({\n            message: `The key ${key} is invalid.`,\n            code: ErrorCode.KEY_INVALID,\n        });\n    }\n\n    static keyPathInvalid(key: string) {\n        return new this({\n            message: `The key path ${key} is invalid.`,\n            code: ErrorCode.KEY_PATH_INVALID,\n        });\n    }\n\n    static keyValueInvalid(key: string) {\n        return new this({\n            message: `The value of the key ${key} is invalid.`,\n            code: ErrorCode.KEY_VALUE_INVALID,\n        });\n    }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuildError } from '../../../errors';\n\nexport class FieldsBuildError extends BuildError {\n\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ParseError } from '../../../errors';\n\nexport class FieldsParseError extends ParseError {\n\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DEFAULT_ID } from '../../../constants';\n\nexport function buildFieldDomainRecords(\n    data?: Record<string, string[]> | string[],\n): Record<string, string[]> {\n    if (typeof data === 'undefined') {\n        return {};\n    }\n\n    let domainFields: Record<string, string[]> = {};\n\n    if (Array.isArray(data)) {\n        domainFields[DEFAULT_ID] = data;\n    } else {\n        domainFields = data;\n    }\n\n    return domainFields;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function parseFieldsInput(input: unknown): string[] {\n    let output: string[] = [];\n\n    if (typeof input === 'string') {\n        output = input.split(',');\n    } else if (Array.isArray(input)) {\n        for (let i = 0; i < input.length; i++) {\n            if (typeof input[i] === 'string') {\n                output.push(input[i]);\n            }\n        }\n    }\n\n    return output;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isValidFieldName(input: string) : boolean {\n    return /^[a-zA-Z_][a-zA-Z0-9_]*$/gu.test(input);\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { distinctArray, isObject } from 'smob';\nimport { DEFAULT_ID } from '../../constants';\nimport type { ObjectLiteral } from '../../types';\nimport {\n    applyMapping, hasOwnProperty, isPathAllowedByRelations,\n} from '../../utils';\nimport { FieldOperator } from './constants';\nimport { FieldsOptionsContainer } from './container';\nimport { FieldsParseError } from './errors';\nimport type { FieldsInputTransformed, FieldsParseOptions, FieldsParseOutput } from './type';\nimport { isValidFieldName, parseFieldsInput } from './utils';\n\nexport function parseQueryFields<T extends ObjectLiteral = ObjectLiteral>(\n    input: unknown,\n    options?: FieldsParseOptions<T> | FieldsOptionsContainer<T>,\n) : FieldsParseOutput {\n    let container : FieldsOptionsContainer<T>;\n    if (options instanceof FieldsOptionsContainer) {\n        container = options;\n    } else {\n        container = new FieldsOptionsContainer<T>(options);\n    }\n\n    // If it is an empty array nothing is allowed\n    if (\n        (!container.allowedIsUndefined || !container.defaultIsUndefined) &&\n        container.keys.length === 0\n    ) {\n        return [];\n    }\n\n    let data : Record<string, any> = {\n        [DEFAULT_ID]: [],\n    };\n\n    if (isObject(input)) {\n        data = input;\n    } else if (typeof input === 'string' || Array.isArray(input)) {\n        data = { [DEFAULT_ID]: input };\n    } else if (container.options.throwOnFailure) {\n        throw FieldsParseError.inputInvalid();\n    }\n\n    let { keys } = container;\n\n    if (\n        keys.length > 0 &&\n        hasOwnProperty(data, DEFAULT_ID)\n    ) {\n        data = {\n            [keys[0]]: data[DEFAULT_ID],\n        };\n    } else {\n        keys = distinctArray([...keys, ...Object.keys(data)]);\n    }\n\n    const output : FieldsParseOutput = [];\n\n    for (let i = 0; i < keys.length; i++) {\n        const path = keys[i];\n\n        if (\n            path !== DEFAULT_ID &&\n            !isPathAllowedByRelations(path, container.options.relations)\n        ) {\n            if (container.options.throwOnFailure) {\n                throw FieldsParseError.keyPathInvalid(path);\n            }\n\n            continue;\n        }\n\n        let fields : string[] = [];\n\n        if (hasOwnProperty(data, path)) {\n            fields = parseFieldsInput(data[path]);\n        } else if (\n            hasOwnProperty(container.reverseMapping, path) &&\n            hasOwnProperty(data, container.reverseMapping[path])\n        ) {\n            fields = parseFieldsInput(data[container.reverseMapping[path]]);\n        }\n\n        const transformed : FieldsInputTransformed = {\n            default: [],\n            included: [],\n            excluded: [],\n        };\n\n        if (fields.length > 0) {\n            for (let j = 0; j < fields.length; j++) {\n                let operator: FieldOperator | undefined;\n\n                const character = fields[j].substring(0, 1);\n\n                if (character === FieldOperator.INCLUDE) {\n                    operator = FieldOperator.INCLUDE;\n                } else if (character === FieldOperator.EXCLUDE) {\n                    operator = FieldOperator.EXCLUDE;\n                }\n\n                if (operator) {\n                    fields[j] = fields[j].substring(1);\n                }\n\n                fields[j] = applyMapping(fields[j], container.options.mapping, true);\n\n                let isValid : boolean;\n                if (hasOwnProperty(container.items, path)) {\n                    isValid = container.items[path].indexOf(fields[j]) !== -1;\n                } else {\n                    isValid = isValidFieldName(fields[j]);\n                }\n\n                if (!isValid) {\n                    if (container.options.throwOnFailure) {\n                        throw FieldsParseError.keyNotAllowed(fields[j]);\n                    }\n\n                    continue;\n                }\n\n                if (operator === FieldOperator.INCLUDE) {\n                    transformed.included.push(fields[j]);\n                } else if (operator === FieldOperator.EXCLUDE) {\n                    transformed.excluded.push(fields[j]);\n                } else {\n                    transformed.default.push(fields[j]);\n                }\n            }\n        }\n\n        if (\n            transformed.default.length === 0 &&\n            hasOwnProperty(container.default, path)\n        ) {\n            transformed.default = container.default[path];\n        }\n\n        if (\n            transformed.included.length === 0 &&\n            transformed.default.length === 0 &&\n            hasOwnProperty(container.allowed, path)\n        ) {\n            transformed.default = container.allowed[path];\n        }\n\n        transformed.default = Array.from(new Set([\n            ...transformed.default,\n            ...transformed.included,\n        ]));\n\n        for (let j = 0; j < transformed.excluded.length; j++) {\n            const index = transformed.default.indexOf(transformed.excluded[j]);\n            if (index !== -1) {\n                transformed.default.splice(index, 1);\n            }\n        }\n\n        if (transformed.default.length > 0) {\n            for (let j = 0; j < transformed.default.length; j++) {\n                let destPath : string | undefined;\n                if (path !== DEFAULT_ID) {\n                    destPath = path;\n                } else if (container.options.defaultPath) {\n                    destPath = container.options.defaultPath;\n                }\n\n                output.push({\n                    key: transformed.default[j],\n                    ...(destPath ? { path: destPath } : {}),\n                });\n            }\n        }\n    }\n\n    return output;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum FilterComparisonOperator {\n    EQUAL = '$eq',\n    NOT_EQUAL = '$ne',\n    LIKE = '$l',\n    NOT_LIKE = '$nl',\n    LESS_THAN_EQUAL = '$lte',\n    LESS_THAN = '$lt',\n    GREATER_THAN_EQUAL = '$gte',\n    GREATER_THAN = '$gt',\n    IN = '$in',\n    NOT_IN = '$nin',\n}\n\nexport enum FilterInputOperatorValue {\n    NEGATION = '!',\n    LIKE = '~',\n    LESS_THAN_EQUAL = '<=',\n    LESS_THAN = '<',\n    MORE_THAN_EQUAL = '>=',\n    MORE_THAN = '>',\n    IN = ',',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { FilterValueSimple } from '../type';\n\nexport function transformFilterValue(input: FilterValueSimple) : FilterValueSimple {\n    if (typeof input === 'string') {\n        input = input.trim();\n        const lower = input.toLowerCase();\n\n        if (lower === 'true') {\n            return true;\n        }\n\n        if (lower === 'false') {\n            return false;\n        }\n\n        if (lower === 'null') {\n            return null;\n        }\n\n        if (input.length === 0) {\n            return input;\n        }\n\n        const num = Number(input);\n        if (!Number.isNaN(num)) {\n            return num;\n        }\n\n        const parts = input.split(',');\n        if (parts.length > 1) {\n            return transformFilterValue(parts);\n        }\n    }\n\n    if (Array.isArray(input)) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] = transformFilterValue(input[i]) as string | number;\n        }\n\n        return (input as unknown[])\n            .filter((n) => n === 0 || n === null || !!n) as FilterValueSimple;\n    }\n\n    if (typeof input === 'undefined' || input === null) {\n        return null;\n    }\n\n    return input;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { FilterComparisonOperator, FilterInputOperatorValue } from '../constants';\nimport type { FilterValueSimple } from '../type';\n\nfunction matchOperator(key: string, value: FilterValueSimple, position: 'start' | 'end' | 'global') : FilterValueSimple | undefined {\n    if (typeof value === 'string') {\n        switch (position) {\n            case 'start': {\n                if (value.substring(0, key.length) === key) {\n                    return value.substring(key.length);\n                }\n                break;\n            }\n            case 'end': {\n                if (value.substring(0 - key.length) === key) {\n                    return value.substring(0, value.length - key.length - 1);\n                }\n                break;\n            }\n        }\n\n        return undefined;\n    }\n\n    if (Array.isArray(value)) {\n        let match = false;\n        for (let i = 0; i < value.length; i++) {\n            const output = matchOperator(key, value[i], position);\n            if (typeof output !== 'undefined') {\n                match = true;\n                value[i] = output as string | number;\n            }\n        }\n\n        if (match) {\n            return value;\n        }\n    }\n\n    return undefined;\n}\n\nexport function parseFilterValue(input: FilterValueSimple) : {\n    operator: `${FilterComparisonOperator}`,\n    value: FilterValueSimple\n} {\n    if (\n        typeof input === 'string' &&\n        input.includes(FilterInputOperatorValue.IN)\n    ) {\n        input = input.split(FilterInputOperatorValue.IN);\n    }\n\n    let negation = false;\n\n    let value = matchOperator(FilterInputOperatorValue.NEGATION, input, 'start');\n    if (typeof value !== 'undefined') {\n        negation = true;\n        input = value;\n    }\n\n    if (Array.isArray(input)) {\n        return {\n            value: input,\n            operator: negation ?\n                FilterComparisonOperator.NOT_IN :\n                FilterComparisonOperator.IN,\n        };\n    }\n\n    value = matchOperator(FilterInputOperatorValue.LIKE, input, 'start');\n    if (typeof value !== 'undefined') {\n        return {\n            value,\n            operator: negation ?\n                FilterComparisonOperator.NOT_LIKE :\n                FilterComparisonOperator.LIKE,\n        };\n    }\n\n    value = matchOperator(FilterInputOperatorValue.LESS_THAN_EQUAL, input, 'start');\n    if (typeof value !== 'undefined') {\n        return {\n            value,\n            operator: FilterComparisonOperator.LESS_THAN_EQUAL,\n        };\n    }\n\n    value = matchOperator(FilterInputOperatorValue.LESS_THAN, input, 'start');\n    if (typeof value !== 'undefined') {\n        return {\n            value,\n            operator: FilterComparisonOperator.LESS_THAN,\n        };\n    }\n\n    value = matchOperator(FilterInputOperatorValue.MORE_THAN_EQUAL, input, 'start');\n    if (typeof value !== 'undefined') {\n        return {\n            value,\n            operator: FilterComparisonOperator.GREATER_THAN_EQUAL,\n        };\n    }\n\n    value = matchOperator(FilterInputOperatorValue.MORE_THAN, input, 'start');\n    if (typeof value !== 'undefined') {\n        return {\n            value,\n            operator: FilterComparisonOperator.GREATER_THAN,\n        };\n    }\n\n    return {\n        value: input,\n        operator: negation ?\n            FilterComparisonOperator.NOT_EQUAL :\n            FilterComparisonOperator.EQUAL,\n    };\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ObjectLiteral } from '../../types';\nimport {\n    buildKeyWithPath, hasOwnProperty, parseKey, toFlatObject,\n} from '../../utils';\nimport { flattenParseAllowedOption } from '../utils';\nimport { FilterComparisonOperator } from './constants';\nimport type {\n    FiltersParseOptions, FiltersParseOutput, FiltersParseOutputElement,\n} from './type';\nimport { parseFilterValue, transformFilterValue } from './utils';\n\nexport class FiltersOptionsContainer<T extends ObjectLiteral = ObjectLiteral> {\n    public options : FiltersParseOptions<T>;\n\n    public default : Record<string, any>;\n\n    public defaultKeys : string[];\n\n    public defaultOutput : FiltersParseOutput;\n\n    public allowed : string[];\n\n    public allowedIsUndefined : boolean;\n\n    constructor(input: FiltersParseOptions<T> = {}) {\n        this.options = input;\n\n        this.allowed = [];\n        this.allowedIsUndefined = true;\n\n        this.default = {};\n        this.defaultKeys = [];\n        this.defaultOutput = [];\n\n        this.initDefault();\n        this.initAllowed();\n    }\n\n    protected initDefault() {\n        if (!this.options.default) {\n            this.default = {};\n            this.defaultKeys = [];\n            this.defaultOutput = this.buildParseOutput();\n            return;\n        }\n\n        this.default = toFlatObject(this.options.default);\n        this.defaultKeys = Object.keys(this.default);\n        this.defaultOutput = this.buildParseOutput();\n    }\n\n    protected initAllowed() {\n        if (typeof this.options.allowed === 'undefined') {\n            if (typeof this.options.default !== 'undefined') {\n                const flatten = toFlatObject(this.options.default);\n                const allowed = Object.keys(flatten);\n                if (allowed.length > 0) {\n                    this.allowed = allowed;\n                    this.allowedIsUndefined = false;\n                    return;\n                }\n            }\n\n            this.allowed = [];\n            this.allowedIsUndefined = true;\n            return;\n        }\n\n        this.allowed = flattenParseAllowedOption(this.options.allowed);\n        this.allowedIsUndefined = false;\n    }\n\n    public buildParseOutput(\n        input: Record<string, FiltersParseOutputElement> = {},\n    ) : FiltersParseOutput {\n        const inputKeys = Object.keys(input || {});\n\n        if (\n            !this.options.defaultByElement &&\n            inputKeys.length > 0\n        ) {\n            return Object.values(input);\n        }\n\n        if (this.defaultKeys.length > 0) {\n            const output : FiltersParseOutput = [];\n\n            for (let i = 0; i < this.defaultKeys.length; i++) {\n                const keyDetails = parseKey(this.defaultKeys[i]);\n\n                if (\n                    this.options.defaultByElement &&\n                    inputKeys.length > 0\n                ) {\n                    const keyWithPath = buildKeyWithPath(keyDetails);\n                    if (hasOwnProperty(input, keyWithPath)) {\n                        continue;\n                    }\n                }\n\n                if (this.options.defaultByElement || inputKeys.length === 0) {\n                    let path : string | undefined;\n                    if (keyDetails.path) {\n                        path = keyDetails.path;\n                    } else if (this.options.defaultPath) {\n                        path = this.options.defaultPath;\n                    }\n\n                    output.push(this.transformParseOutputElement({\n                        ...(path ? { path } : {}),\n                        key: keyDetails.name,\n                        value: this.default[this.defaultKeys[i]],\n                    }));\n                }\n            }\n\n            return input ? [...Object.values(input), ...output] : output;\n        }\n\n        return input ? Object.values(input) : [];\n    }\n\n    // ^([0-9]+(?:\\.[0-9]+)*){0,1}([a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]+)*){0,1}$\n    public transformParseOutputElement(element: FiltersParseOutputElement) : FiltersParseOutputElement {\n        if (\n            hasOwnProperty(element, 'path') &&\n            (typeof element.path === 'undefined' || element.path === null)\n        ) {\n            delete element.path;\n        }\n\n        if (element.operator) {\n            return element;\n        }\n\n        if (typeof element.value === 'string') {\n            element = {\n                ...element,\n                ...parseFilterValue(element.value),\n            };\n        } else {\n            element.operator = FilterComparisonOperator.EQUAL;\n        }\n\n        element.value = transformFilterValue(element.value);\n\n        return element;\n    }\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n    extendObject, isObject, toFlatObject,\n} from '../../utils';\nimport type { FiltersBuildInput } from './type';\n\nexport function transformFiltersBuildInput(input: FiltersBuildInput<any>) : Record<string, any> {\n    return toFlatObject(input, {\n        transformer: (input, output, key) => {\n            if (typeof input === 'undefined') {\n                output[key] = null;\n\n                return true;\n            }\n\n            if (Array.isArray(input)) {\n                // preserve null values\n                const data : string[] = [];\n                for (let i = 0; i < input.length; i++) {\n                    if (input[i] === null) {\n                        input[i] = 'null';\n                    }\n\n                    if (typeof input[i] === 'number') {\n                        input[i] = `${input[i]}`;\n                    }\n\n                    if (typeof input[i] === 'string') {\n                        data.push(input[i]);\n                    }\n                }\n\n                output[key] = data.join(',');\n\n                return true;\n            }\n\n            if (isObject(input)) {\n                const tmp = transformFiltersBuildInput(input as FiltersBuildInput<any>);\n                extendObject(output, tmp);\n            }\n\n            return undefined;\n        },\n    });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuildError } from '../../../errors';\n\nexport class FiltersBuildError extends BuildError {\n\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ParseError } from '../../../errors';\n\nexport class FiltersParseError extends ParseError {\n\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { NestedKeys, ObjectLiteral } from '../../types';\nimport type { KeyDetails } from '../../utils';\nimport {\n    applyMapping,\n    buildKeyWithPath,\n    isObject,\n    isPathAllowedByRelations,\n    parseKey,\n} from '../../utils';\nimport { isValidFieldName } from '../fields';\nimport { isPathCoveredByParseAllowedOption } from '../utils';\nimport { FiltersOptionsContainer } from './container';\nimport { FiltersParseError } from './errors';\nimport type { FiltersParseOptions, FiltersParseOutput, FiltersParseOutputElement } from './type';\n\nexport function parseQueryFilters<T extends ObjectLiteral = ObjectLiteral>(\n    data: unknown,\n    options?: FiltersParseOptions<T> | FiltersOptionsContainer<T>,\n) : FiltersParseOutput {\n    let container : FiltersOptionsContainer<T>;\n    if (options instanceof FiltersOptionsContainer) {\n        container = options;\n    } else {\n        container = new FiltersOptionsContainer<T>(options);\n    }\n\n    // If it is an empty array nothing is allowed\n    if (\n        !container.allowedIsUndefined &&\n        container.allowed.length === 0\n    ) {\n        return container.defaultOutput;\n    }\n\n    /* istanbul ignore next */\n    if (!isObject(data)) {\n        if (container.options.throwOnFailure) {\n            throw FiltersParseError.inputInvalid();\n        }\n\n        return container.defaultOutput;\n    }\n\n    const { length } = Object.keys(data);\n    if (length === 0) {\n        return container.defaultOutput;\n    }\n\n    const items : Record<string, FiltersParseOutputElement> = {};\n\n    // transform to appreciate data format & validate input\n    const keys = Object.keys(data);\n    for (let i = 0; i < keys.length; i++) {\n        const value : unknown = data[keys[i]];\n\n        if (\n            typeof value !== 'string' &&\n            typeof value !== 'number' &&\n            typeof value !== 'boolean' &&\n            typeof value !== 'undefined' &&\n            value !== null &&\n            !Array.isArray(value)\n        ) {\n            if (container.options.throwOnFailure) {\n                throw FiltersParseError.keyValueInvalid(keys[i]);\n            }\n            continue;\n        }\n\n        keys[i] = applyMapping(keys[i], container.options.mapping);\n\n        const fieldDetails : KeyDetails = parseKey(keys[i]);\n\n        if (\n            container.allowedIsUndefined &&\n            !isValidFieldName(fieldDetails.name)\n        ) {\n            if (container.options.throwOnFailure) {\n                throw FiltersParseError.keyInvalid(fieldDetails.name);\n            }\n            continue;\n        }\n\n        if (\n            typeof fieldDetails.path !== 'undefined' &&\n            !isPathAllowedByRelations(fieldDetails.path, container.options.relations)\n        ) {\n            if (container.options.throwOnFailure) {\n                throw FiltersParseError.keyPathInvalid(fieldDetails.path);\n            }\n            continue;\n        }\n\n        const fullKey : string = buildKeyWithPath(fieldDetails);\n        if (\n            !container.allowedIsUndefined &&\n            container.allowed &&\n            !isPathCoveredByParseAllowedOption(container.allowed, [keys[i], fullKey])\n        ) {\n            if (container.options.throwOnFailure) {\n                throw FiltersParseError.keyInvalid(fieldDetails.name);\n            }\n\n            continue;\n        }\n\n        const filter = container.transformParseOutputElement({\n            key: fieldDetails.name,\n            value: value as string | boolean | number,\n        });\n\n        if (container.options.validate) {\n            if (Array.isArray(filter.value)) {\n                const output : (string | number)[] = [];\n                for (let j = 0; j < filter.value.length; j++) {\n                    if (container.options.validate(filter.key as NestedKeys<T>, filter.value[j])) {\n                        output.push(filter.value[j]);\n                    } else if (container.options.throwOnFailure) {\n                        throw FiltersParseError.keyValueInvalid(fieldDetails.name);\n                    }\n                }\n\n                filter.value = output as string[] | number[];\n                if (filter.value.length === 0) {\n                    continue;\n                }\n            } else if (!container.options.validate(filter.key as NestedKeys<T>, filter.value)) {\n                if (container.options.throwOnFailure) {\n                    throw FiltersParseError.keyValueInvalid(fieldDetails.name);\n                }\n\n                continue;\n            }\n        }\n\n        if (\n            typeof filter.value === 'string' &&\n            filter.value.length === 0\n        ) {\n            if (container.options.throwOnFailure) {\n                throw FiltersParseError.keyValueInvalid(fieldDetails.name);\n            }\n\n            continue;\n        }\n\n        if (\n            Array.isArray(filter.value) &&\n            filter.value.length === 0\n        ) {\n            if (container.options.throwOnFailure) {\n                throw FiltersParseError.keyValueInvalid(fieldDetails.name);\n            }\n\n            continue;\n        }\n\n        if (fieldDetails.path || container.options.defaultPath) {\n            filter.path = fieldDetails.path || container.options.defaultPath;\n        }\n\n        items[fullKey] = filter;\n    }\n\n    return container.buildParseOutput(items);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuildError } from '../../../errors';\n\nexport class PaginationBuildError extends BuildError {\n\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ParseError } from '../../../errors';\n\nexport class PaginationParseError extends ParseError {\n    static limitExceeded(limit: number) {\n        return new this({\n            message: `The pagination limit must not exceed the value of ${limit}.`,\n        });\n    }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from 'smob';\nimport { PaginationParseError } from './errors';\nimport type { PaginationParseOptions, PaginationParseOutput } from './type';\n\n// --------------------------------------------------\n\nfunction finalizePagination(\n    data: PaginationParseOutput,\n    options: PaginationParseOptions,\n) : PaginationParseOutput {\n    if (typeof options.maxLimit !== 'undefined') {\n        if (\n            typeof data.limit === 'undefined' ||\n            data.limit > options.maxLimit\n        ) {\n            if (options.throwOnFailure) {\n                throw PaginationParseError.limitExceeded(options.maxLimit);\n            }\n\n            data.limit = options.maxLimit;\n        }\n    }\n\n    if (\n        typeof data.limit !== 'undefined' &&\n        typeof data.offset === 'undefined'\n    ) {\n        data.offset = 0;\n    }\n\n    return data;\n}\n\n/**\n * Transform pagination data to an appreciate data format.\n *\n * @param data\n * @param options\n */\nexport function parseQueryPagination(\n    data: unknown,\n    options: PaginationParseOptions = {},\n) : PaginationParseOutput {\n    const output : PaginationParseOutput = {};\n\n    if (!isObject(data)) {\n        if (options.throwOnFailure) {\n            throw PaginationParseError.inputInvalid();\n        }\n\n        return finalizePagination(output, options);\n    }\n\n    let { limit, offset } = data as Record<string, any>;\n\n    if (typeof limit !== 'undefined') {\n        limit = parseInt(limit, 10);\n\n        if (!Number.isNaN(limit) && limit > 0) {\n            output.limit = limit;\n        } else if (options.throwOnFailure) {\n            throw PaginationParseError.keyValueInvalid('limit');\n        }\n    }\n\n    if (typeof offset !== 'undefined') {\n        offset = parseInt(offset, 10);\n\n        if (!Number.isNaN(offset) && offset >= 0) {\n            output.offset = offset;\n        } else if (options.throwOnFailure) {\n            throw PaginationParseError.keyValueInvalid('offset');\n        }\n    }\n\n    return finalizePagination(output, options);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuildError } from '../../../errors';\n\nexport class RelationsBuildError extends BuildError {\n\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ParseError } from '../../../errors';\n\nexport class RelationsParseError extends ParseError {\n\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function includeParents(\n    data: string[],\n) : string[] {\n    for (let i = 0; i < data.length; i++) {\n        const parts: string[] = data[i].split('.');\n\n        while (parts.length > 0) {\n            parts.pop();\n\n            if (parts.length > 0) {\n                const value = parts.join('.');\n                if (data.indexOf(value) === -1) {\n                    data.unshift(value);\n                }\n            }\n        }\n    }\n\n    return data;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isValidRelationPath(input: string) : boolean {\n    return /^[a-zA-Z0-9_-]+([.]*[a-zA-Z0-9_-])*$/gu.test(input);\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ObjectLiteral } from '../../types';\nimport { applyMapping, hasOwnProperty } from '../../utils';\nimport { isPathCoveredByParseAllowedOption } from '../utils';\nimport { RelationsParseError } from './errors';\n\nimport type { RelationsParseOptions, RelationsParseOutput } from './type';\nimport { includeParents, isValidRelationPath } from './utils';\n\n// --------------------------------------------------\n\nexport function parseQueryRelations<T extends ObjectLiteral = ObjectLiteral>(\n    input: unknown,\n    options: RelationsParseOptions<T> = {},\n): RelationsParseOutput {\n    // If it is an empty array nothing is allowed\n    if (\n        Array.isArray(options.allowed) &&\n        options.allowed.length === 0\n    ) {\n        return [];\n    }\n\n    options.mapping = options.mapping || {};\n    options.pathMapping = options.pathMapping || {};\n    if (typeof options.includeParents === 'undefined') {\n        options.includeParents = true;\n    }\n\n    let items: string[] = [];\n\n    if (typeof input === 'string') {\n        items = input.split(',');\n    } else if (Array.isArray(input)) {\n        for (let i = 0; i < input.length; i++) {\n            if (typeof input[i] === 'string') {\n                items.push(input[i]);\n            } else {\n                throw RelationsParseError.inputInvalid();\n            }\n        }\n    } else if (options.throwOnFailure) {\n        throw RelationsParseError.inputInvalid();\n    }\n\n    if (items.length === 0) {\n        return [];\n    }\n\n    const mappingKeys = Object.keys(options.mapping);\n    if (mappingKeys.length > 0) {\n        for (let i = 0; i < items.length; i++) {\n            items[i] = applyMapping(items[i], options.mapping);\n        }\n    }\n\n    for (let j = items.length - 1; j >= 0; j--) {\n        let isValid : boolean;\n        if (options.allowed) {\n            isValid = isPathCoveredByParseAllowedOption(options.allowed as string[], items[j]);\n        } else {\n            isValid = isValidRelationPath(items[j]);\n        }\n\n        if (!isValid) {\n            if (options.throwOnFailure) {\n                throw RelationsParseError.keyInvalid(items[j]);\n            }\n\n            items.splice(j, 1);\n        }\n    }\n\n    if (options.includeParents) {\n        if (Array.isArray(options.includeParents)) {\n            const parentIncludes = items.filter(\n                (item) => item.includes('.') &&\n                    (options.includeParents as string[]).filter((parent) => item.startsWith(parent)).length > 0,\n            );\n            items.unshift(...includeParents(parentIncludes));\n        } else {\n            items = includeParents(items);\n        }\n    }\n\n    items = Array.from(new Set(items));\n\n    return items\n        .map((key) => {\n            const parts = key.split('.');\n\n            let value : string;\n            if (\n                options.pathMapping &&\n                hasOwnProperty(options.pathMapping, key)\n            ) {\n                value = options.pathMapping[key];\n            } else {\n                value = parts.pop() as string;\n            }\n\n            return {\n                key,\n                value,\n            };\n        });\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n    Flatten, KeyWithOptionalPrefix, NestedKeys, OnlyObject, SimpleKeys,\n} from '../../types';\nimport type { RelationsParseOutput } from '../relations';\nimport type {\n    ParseAllowedOption,\n} from '../type';\n\nexport enum SortDirection {\n    ASC = 'ASC',\n    DESC = 'DESC',\n}\n\n// -----------------------------------------------------------\n// Build\n// -----------------------------------------------------------\n\ntype SortWithOperator<T extends string> = KeyWithOptionalPrefix<T, '-'>;\n\nexport type SortBuildInput<T extends Record<string, any>> =\n    {\n        [K in keyof T]?: Flatten<T[K]> extends OnlyObject<T[K]> ?\n            SortBuildInput<Flatten<T[K]>> :\n            `${SortDirection}`\n    }\n    |\n    (\n        SortWithOperator<SimpleKeys<T>>[] |\n        {\n            [K in keyof T]?: Flatten<T[K]> extends OnlyObject<T[K]> ?\n                SortBuildInput<Flatten<T[K]>> :\n                `${SortDirection}`\n        }\n    )[]\n    |\n    SortWithOperator<NestedKeys<T>>[] |\n    SortWithOperator<NestedKeys<T>>;\n\n// -----------------------------------------------------------\n// Parse\n// -----------------------------------------------------------\n\nexport type SortParseDefaultOption<T extends Record<string, any>> = {\n    [K in keyof T]?: Flatten<T[K]> extends OnlyObject<T[K]> ?\n        SortParseDefaultOption<Flatten<T[K]>> :\n        `${SortDirection}`\n} | {\n    [K in NestedKeys<T>]?: `${SortDirection}`\n};\n\nexport type SortParseOptions<\n    T extends Record<string, any> = Record<string, any>,\n    > = {\n        allowed?: ParseAllowedOption<T>,\n        mapping?: Record<string, string>,\n        default?: SortParseDefaultOption<T>,\n        defaultPath?: string,\n        throwOnFailure?: boolean,\n        relations?: RelationsParseOutput,\n    };\nexport type SortParseOutputElement = {\n    key: string,\n    value: `${SortDirection}`,\n    path?: string\n};\nexport type SortParseOutput = SortParseOutputElement[];\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { SortBuildInput } from './type';\nimport { SortDirection } from './type';\nimport {\n    extendObject,\n    isObject,\n    toFlatObject,\n} from '../../utils';\n\nexport function transformSortBuildInput(input: SortBuildInput<any>) : Record<string, SortDirection> {\n    if (typeof input === 'undefined') {\n        return {};\n    }\n\n    if (typeof input === 'string') {\n        return input.split(',')\n            .reduce((acc, curr) => {\n                if (curr.startsWith('-')) {\n                    acc[curr.slice(1)] = SortDirection.DESC;\n                } else {\n                    acc[curr] = SortDirection.ASC;\n                }\n\n                return acc;\n            }, {} as Record<string, SortDirection>);\n    }\n\n    if (Array.isArray(input)) {\n        let output : Record<string, SortDirection> = {};\n        for (let i = 0; i < input.length; i++) {\n            output = {\n                ...output,\n                ...transformSortBuildInput(input[i]),\n            };\n        }\n\n        return output;\n    }\n\n    if (isObject(input)) {\n        return toFlatObject(input, {\n            transformer: (input, output) => {\n                if (isObject(input)) {\n                    const tmp = transformSortBuildInput(input as SortBuildInput<any>);\n                    extendObject(output, tmp);\n\n                    return true;\n                }\n\n                return undefined;\n            },\n        });\n    }\n\n    return {};\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ObjectLiteral } from '../../types';\nimport {\n    parseKey, toFlatObject,\n} from '../../utils';\nimport { flattenParseAllowedOption } from '../utils';\nimport type {\n    SortParseOptions, SortParseOutput,\n} from './type';\n\nexport class SortOptionsContainer<T extends ObjectLiteral = ObjectLiteral> {\n    public options : SortParseOptions<T>;\n\n    public default : Record<string, any>;\n\n    public defaultKeys : string[];\n\n    public defaultOutput : SortParseOutput;\n\n    public allowed : string[];\n\n    public allowedIsUndefined : boolean;\n\n    constructor(input: SortParseOptions<T> = {}) {\n        this.options = input;\n\n        this.allowed = [];\n        this.allowedIsUndefined = true;\n\n        this.default = {};\n        this.defaultKeys = [];\n        this.defaultOutput = [];\n\n        this.buildDefaultDomainFields();\n        this.buildAllowedDomainFields();\n    }\n\n    protected buildDefaultDomainFields() {\n        if (!this.options.default) {\n            this.default = {};\n            this.defaultKeys = [];\n            this.defaultOutput = this.buildParseOutput();\n            return;\n        }\n\n        this.default = toFlatObject(this.options.default);\n        this.defaultKeys = Object.keys(this.default);\n        this.defaultOutput = this.buildParseOutput();\n    }\n\n    protected buildAllowedDomainFields() {\n        if (typeof this.options.allowed === 'undefined') {\n            if (typeof this.options.default !== 'undefined') {\n                const flatten = toFlatObject(this.options.default);\n                const allowed = Object.keys(flatten);\n                if (allowed.length > 0) {\n                    this.allowed = allowed;\n                    this.allowedIsUndefined = false;\n                    return;\n                }\n            }\n\n            this.allowed = [];\n            this.allowedIsUndefined = true;\n            return;\n        }\n\n        this.allowed = flattenParseAllowedOption(this.options.allowed);\n        this.allowedIsUndefined = false;\n    }\n\n    buildParseOutput() : SortParseOutput {\n        if (this.default) {\n            const output : SortParseOutput = [];\n\n            const flatten = toFlatObject(this.default);\n            const keys = Object.keys(flatten);\n\n            for (let i = 0; i < keys.length; i++) {\n                const fieldDetails = parseKey(keys[i]);\n\n                let path : string | undefined;\n                if (fieldDetails.path) {\n                    path = fieldDetails.path;\n                } else if (this.options.defaultPath) {\n                    path = this.options.defaultPath;\n                }\n\n                output.push({\n                    key: fieldDetails.name,\n                    ...(path ? { path } : {}),\n                    value: flatten[keys[i]],\n                });\n            }\n\n            return output;\n        }\n\n        return [];\n    }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuildError } from '../../../errors';\n\nexport class SortBuildError extends BuildError {\n\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ParseError } from '../../../errors';\n\nexport class SortParseError extends ParseError {\n\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SortDirection } from './type';\n\nexport function parseSortValue(value: string) : {value: string, direction: `${SortDirection}`} {\n    let direction: SortDirection = SortDirection.ASC;\n    if (value.substring(0, 1) === '-') {\n        direction = SortDirection.DESC;\n        value = value.substring(1);\n    }\n\n    return {\n        direction,\n        value,\n    };\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from 'smob';\nimport type { ObjectLiteral } from '../../types';\nimport {\n    applyMapping,\n    buildKeyPath,\n    buildKeyWithPath,\n    hasOwnProperty,\n    isPathAllowedByRelations,\n    parseKey,\n} from '../../utils';\nimport { isValidFieldName } from '../fields';\nimport { flattenParseAllowedOption, isPathCoveredByParseAllowedOption } from '../utils';\nimport { SortOptionsContainer } from './container';\nimport { SortParseError } from './errors';\n\nimport type {\n    SortParseOptions,\n    SortParseOutput,\n    SortParseOutputElement,\n} from './type';\nimport { parseSortValue } from './utils';\n\n// --------------------------------------------------\n\nfunction isMultiDimensionalArray(arr: unknown) : arr is unknown[][] {\n    if (!Array.isArray(arr)) {\n        return false;\n    }\n\n    return arr.length > 0 && Array.isArray(arr[0]);\n}\n\n/**\n * Transform sort data to appreciate data format.\n * @param data\n * @param options\n */\nexport function parseQuerySort<T extends ObjectLiteral = ObjectLiteral>(\n    data: unknown,\n    options?: SortParseOptions<T> | SortOptionsContainer<T>,\n) : SortParseOutput {\n    let container : SortOptionsContainer<T>;\n    if (options instanceof SortOptionsContainer) {\n        container = options;\n    } else {\n        container = new SortOptionsContainer<T>(options);\n    }\n\n    // If it is an empty array nothing is allowed\n    if (\n        !container.allowedIsUndefined &&\n        container.allowed.length === 0\n    ) {\n        return container.defaultOutput;\n    }\n\n    /* istanbul ignore next */\n    if (\n        typeof data !== 'string' &&\n        !Array.isArray(data) &&\n        !isObject(data)\n    ) {\n        if (container.options.throwOnFailure) {\n            throw SortParseError.inputInvalid();\n        }\n\n        return container.defaultOutput;\n    }\n\n    let parts : string[] = [];\n\n    if (typeof data === 'string') {\n        parts = data.split(',');\n    }\n\n    if (Array.isArray(data)) {\n        parts = data.filter((item) => typeof item === 'string');\n    }\n\n    if (isObject(data)) {\n        const keys = Object.keys(data);\n        for (let i = 0; i < keys.length; i++) {\n            /* istanbul ignore next */\n            if (\n                !hasOwnProperty(data, keys[i]) ||\n                typeof keys[i] !== 'string' ||\n                typeof data[keys[i]] !== 'string'\n            ) {\n                if (container.options.throwOnFailure) {\n                    throw SortParseError.keyValueInvalid(keys[i]);\n                }\n\n                continue;\n            }\n\n            const fieldPrefix = (data[keys[i]] as string)\n                .toLowerCase() === 'desc' ? '-' : '';\n\n            parts.push(fieldPrefix + keys[i]);\n        }\n    }\n\n    const items : Record<string, SortParseOutputElement> = {};\n\n    let matched = false;\n\n    for (let i = 0; i < parts.length; i++) {\n        const { value, direction } = parseSortValue(parts[i]);\n        parts[i] = value;\n\n        const key: string = applyMapping(parts[i], container.options.mapping);\n\n        const fieldDetails = parseKey(key);\n\n        if (\n            container.allowedIsUndefined &&\n            !isValidFieldName(fieldDetails.name)\n        ) {\n            if (container.options.throwOnFailure) {\n                throw SortParseError.keyInvalid(fieldDetails.name);\n            }\n\n            continue;\n        }\n\n        if (\n            !isPathAllowedByRelations(fieldDetails.path, container.options.relations) &&\n            typeof fieldDetails.path !== 'undefined'\n        ) {\n            if (container.options.throwOnFailure) {\n                throw SortParseError.keyPathInvalid(fieldDetails.path);\n            }\n\n            continue;\n        }\n\n        const keyWithAlias = buildKeyWithPath(fieldDetails);\n        if (\n            !container.allowedIsUndefined &&\n            container.allowed &&\n            !isMultiDimensionalArray(container.options.allowed) &&\n            !isPathCoveredByParseAllowedOption(container.allowed, [key, keyWithAlias])\n        ) {\n            if (container.options.throwOnFailure) {\n                throw SortParseError.keyNotAllowed(fieldDetails.name);\n            }\n\n            continue;\n        }\n\n        matched = true;\n\n        let path : string | undefined;\n        if (fieldDetails.path) {\n            path = fieldDetails.path;\n        } else if (container.options.defaultPath) {\n            path = container.options.defaultPath;\n        }\n\n        items[keyWithAlias] = {\n            key: fieldDetails.name,\n            ...(path ? { path } : {}),\n            value: direction,\n        };\n    }\n\n    if (!matched) {\n        return container.defaultOutput;\n    }\n\n    if (isMultiDimensionalArray(container.options.allowed)) {\n        // eslint-disable-next-line no-labels,no-restricted-syntax\n        outerLoop:\n        for (let i = 0; i < container.allowed.length; i++) {\n            const temp : SortParseOutput = [];\n\n            const keyPaths = flattenParseAllowedOption(container.options.allowed[i] as string[]);\n\n            for (let j = 0; j < keyPaths.length; j++) {\n                let keyWithAlias : string = keyPaths[j];\n                let key : string;\n\n                const parts = keyWithAlias.split('.');\n                if (parts.length > 1) {\n                    key = parts.pop() as string;\n                } else {\n                    key = keyWithAlias;\n\n                    keyWithAlias = buildKeyPath(key, container.options.defaultPath);\n                }\n\n                if (\n                    hasOwnProperty(items, key) ||\n                    hasOwnProperty(items, keyWithAlias)\n                ) {\n                    const item = hasOwnProperty(items, key) ?\n                        items[key] :\n                        items[keyWithAlias];\n\n                    temp.push(item);\n                } else {\n                    // eslint-disable-next-line no-labels\n                    continue outerLoop;\n                }\n            }\n\n            return temp;\n        }\n\n        // if we get no match, the sort data is invalid.\n        return [];\n    }\n\n    return Object.values(items);\n}\n","/*\n * Copyright (c) 2025-2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { BuildInput } from './types';\nimport { DEFAULT_ID, Parameter, URLParameter } from '../constants';\nimport type {\n    FieldsBuildInput,\n    FiltersBuildInput,\n    PaginationBuildInput,\n    RelationsBuildInput,\n    SortBuildInput,\n} from '../parameter';\nimport {\n    SortDirection,\n\n    transformFiltersBuildInput,\n    transformSortBuildInput,\n} from '../parameter';\nimport type { ObjectLiteral } from '../types';\nimport {\n    groupArrayByKeyPath, merge, serializeAsURI, toKeyPathArray,\n} from '../utils';\n\nexport class QueryBuilder<T extends ObjectLiteral = ObjectLiteral> {\n    protected fields : Record<string, string[]>;\n\n    protected filters : Record<string, any>;\n\n    protected pagination: PaginationBuildInput;\n\n    protected relations: string[];\n\n    protected sort: Record<string, SortDirection>;\n\n    // --------------------------------------------------\n\n    constructor() {\n        this.fields = {};\n        this.filters = {};\n        this.pagination = {};\n        this.relations = [];\n        this.sort = {};\n    }\n\n    // --------------------------------------------------\n\n    add(input: BuildInput<T>) {\n        if (typeof input[Parameter.FIELDS] !== 'undefined') {\n            this.addFields(input[Parameter.FIELDS]);\n        }\n        if (typeof input[URLParameter.FIELDS] !== 'undefined') {\n            this.addFields(input[URLParameter.FIELDS]);\n        }\n\n        if (typeof input[Parameter.FILTERS] !== 'undefined') {\n            this.addFilters(input[Parameter.FILTERS]);\n        }\n        if (typeof input[URLParameter.FILTERS] !== 'undefined') {\n            this.addFilters(input[URLParameter.FILTERS]);\n        }\n\n        if (typeof input[Parameter.PAGINATION] !== 'undefined') {\n            this.addPagination(input[Parameter.PAGINATION]);\n        }\n        if (typeof input[URLParameter.PAGINATION] !== 'undefined') {\n            this.addPagination(input[URLParameter.PAGINATION]);\n        }\n\n        if (typeof input[Parameter.RELATIONS] !== 'undefined') {\n            this.addRelations(input[Parameter.RELATIONS]);\n        }\n        if (typeof input[URLParameter.RELATIONS] !== 'undefined') {\n            this.addRelations(input[URLParameter.RELATIONS]);\n        }\n\n        if (typeof input[Parameter.SORT] !== 'undefined') {\n            this.addSort(input[Parameter.SORT]);\n        }\n        if (typeof input[URLParameter.SORT] !== 'undefined') {\n            this.addSort(input[URLParameter.SORT]);\n        }\n    }\n\n    addFields(data: FieldsBuildInput<T>) {\n        this.fields = merge(this.fields, groupArrayByKeyPath(toKeyPathArray(data)));\n    }\n\n    addFilters(data: FiltersBuildInput<T>) {\n        this.filters = merge(this.filters, transformFiltersBuildInput(data));\n    }\n\n    addPagination(data: PaginationBuildInput) {\n        this.pagination = merge(this.pagination, data);\n    }\n\n    addRelations(data: RelationsBuildInput<T>) {\n        this.relations = merge(this.relations, toKeyPathArray(data));\n    }\n\n    addSort(data: SortBuildInput<T>) {\n        const record = transformSortBuildInput(data);\n        const keys = Object.keys(record);\n        for (let i = 0; i < keys.length; i++) {\n            this.sort[keys[i]] = record[keys[i]];\n        }\n    }\n\n    // --------------------------------------------------\n\n    toString() {\n        return this.build();\n    }\n\n    // --------------------------------------------------\n\n    build() {\n        const record : Record<string, any> = {};\n\n        let keys : string[];\n\n        keys = Object.keys(this.fields);\n        if (keys.length > 0) {\n            if (\n                keys.length === 1 &&\n                keys[0] === DEFAULT_ID\n            ) {\n                record[URLParameter.FIELDS] = this.fields[DEFAULT_ID];\n            } else {\n                record[URLParameter.FIELDS] = this.fields;\n            }\n        }\n\n        keys = Object.keys(this.filters);\n        if (keys.length > 0) {\n            record[URLParameter.FILTERS] = this.filters;\n        }\n\n        keys = Object.keys(this.pagination);\n        if (keys.length > 0) {\n            record[URLParameter.PAGINATION] = this.pagination;\n        }\n\n        if (this.relations.length > 0) {\n            record[URLParameter.RELATIONS] = this.relations;\n        }\n\n        keys = Object.keys(this.sort);\n        if (keys.length > 0) {\n            const parts : string[] = [];\n\n            for (let i = 0; i < keys.length; i++) {\n                parts.push((this.sort[keys[i]] === SortDirection.DESC ? '-' : '') + keys[i]);\n            }\n\n            record[URLParameter.SORT] = parts;\n        }\n\n        const output = serializeAsURI(record);\n        return output.length > 0 ?\n            `?${output}` :\n            '';\n    }\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { QueryBuilder } from './builder';\nimport type { ObjectLiteral } from '../types';\nimport type { BuildInput } from './types';\n\nexport function buildQuery<T extends ObjectLiteral = ObjectLiteral>(\n    input: BuildInput<T> = {},\n) : string {\n    const builder = new QueryBuilder();\n    builder.add(input);\n\n    return builder.toString();\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from 'smob';\n\nexport function buildQueryParameterOptions<T extends Record<string, any>>(\n    input?: T | boolean,\n) : T {\n    if (isObject(input)) {\n        return input;\n    }\n\n    return {} as T;\n}\n\ntype QueryParameterEnabledContext = {\n    data: unknown,\n    options?: Record<string, any> | boolean\n};\nexport function isQueryParameterEnabled(context: QueryParameterEnabledContext) : boolean {\n    if (typeof context.options === 'boolean') {\n        return context.options;\n    }\n\n    if (\n        typeof context.data !== 'undefined' &&\n        typeof context.options === 'undefined'\n    ) {\n        return true;\n    }\n\n    if (isObject(context.options)) {\n        if (typeof context.options.default !== 'undefined') {\n            return true;\n        }\n\n        return typeof context.data !== 'undefined';\n    }\n\n    return false;\n}\n","/*\n * Copyright (c) 2024-2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Parameter, URLParameter } from '../constants';\nimport type {\n    FieldsParseOutput,\n    FiltersParseOutput, PaginationParseOutput,\n    RelationsParseOutput,\n    SortParseOutput,\n} from '../parameter';\nimport {\n    parseQueryFields,\n    parseQueryFilters,\n    parseQueryPagination,\n    parseQueryRelations,\n    parseQuerySort,\n} from '../parameter';\nimport type {\n    ParseInput,\n    ParseOutput, ParseParametersOutput,\n    QueryParserOptions,\n} from './types';\nimport {\n    buildQueryParameterOptions,\n    isQueryParameterEnabled,\n} from './utils';\nimport type { ObjectLiteral } from '../types';\n\nexport class QueryParser<T extends ObjectLiteral = ObjectLiteral> {\n    protected options : QueryParserOptions<T>;\n\n    constructor(options: QueryParserOptions<T> = {}) {\n        // todo: do ahead of parse/stringify options computation\n        this.options = options;\n    }\n\n    // --------------------------------------------------\n\n    parse(input: ParseInput) : ParseParametersOutput {\n        const output : ParseOutput = {};\n        if (this.options.defaultPath) {\n            output.defaultPath = this.options.defaultPath;\n        }\n\n        let relations : RelationsParseOutput | undefined;\n\n        let value = input[Parameter.RELATIONS] || input[URLParameter.RELATIONS];\n        if (isQueryParameterEnabled({ data: value, options: this.options[Parameter.RELATIONS] })) {\n            relations = this.parseRelations(value);\n\n            output[Parameter.RELATIONS] = relations;\n        }\n\n        value = input[Parameter.FIELDS] || input[URLParameter.FIELDS];\n        if (isQueryParameterEnabled({ data: value, options: this.options[Parameter.FIELDS] })) {\n            output[Parameter.FIELDS] = this.parseFields(value, relations);\n        }\n\n        value = input[Parameter.FILTERS] || input[URLParameter.FILTERS];\n        if (isQueryParameterEnabled({ data: value, options: this.options[Parameter.FILTERS] })) {\n            output[Parameter.FILTERS] = this.parseFilters(value, relations);\n        }\n\n        value = input[Parameter.PAGINATION] || input[URLParameter.PAGINATION];\n        if (isQueryParameterEnabled({ data: value, options: this.options[Parameter.PAGINATION] })) {\n            output[Parameter.PAGINATION] = this.parsePagination(value);\n        }\n\n        value = input[Parameter.SORT] || input[URLParameter.SORT];\n        if (isQueryParameterEnabled({ data: value, options: this.options[Parameter.SORT] })) {\n            output[Parameter.SORT] = this.parseSort(value, relations);\n        }\n\n        return output;\n    }\n\n    // --------------------------------------------------\n\n    /**\n     * Parse relations input parameter.\n     *\n     * @param input\n     */\n    parseRelations(input: unknown) : RelationsParseOutput {\n        return parseQueryRelations(\n            input,\n            buildQueryParameterOptions(this.options[Parameter.RELATIONS]),\n        );\n    }\n\n    /**\n     * Parse fields input parameter.\n     *\n     * @param input\n     * @param relations\n     */\n    parseFields(input: unknown, relations?: RelationsParseOutput) : FieldsParseOutput {\n        return parseQueryFields(\n            input,\n            {\n                ...this.extendParameterOptions(buildQueryParameterOptions(this.options[Parameter.FIELDS])),\n                ...(relations ? { relations } : {}),\n            },\n        );\n    }\n\n    /**\n     * Parse filter(s) input parameter.\n     *\n     * @param input\n     * @param relations\n     */\n    parseFilters(input: unknown, relations?: RelationsParseOutput) : FiltersParseOutput {\n        return parseQueryFilters(\n            input,\n            {\n                ...this.extendParameterOptions(buildQueryParameterOptions(this.options[Parameter.FILTERS])),\n                ...(relations ? { relations } : {}),\n            },\n        );\n    }\n\n    /**\n     * Parse pagination input parameter.\n     *\n     * @param input\n     */\n    parsePagination(input: unknown) : PaginationParseOutput {\n        return parseQueryPagination(\n            input,\n            this.extendParameterOptions(buildQueryParameterOptions(this.options[Parameter.PAGINATION])),\n        );\n    }\n\n    /**\n     * Parse sort input parameter.\n     *\n     * @param input\n     * @param relations\n     */\n    parseSort(input: unknown, relations?: RelationsParseOutput) : SortParseOutput {\n        return parseQuerySort(\n            input,\n            {\n                ...this.extendParameterOptions(buildQueryParameterOptions(this.options[Parameter.SORT])),\n                ...(relations ? { relations } : {}),\n            },\n        );\n    }\n\n    // --------------------------------------------------\n\n    printOptions() {\n        // todo: output formatted options!\n    }\n\n    // --------------------------------------------------\n\n    protected extendParameterOptions<T extends {\n        defaultPath?: string,\n        throwOnFailure?: boolean\n    }>(data: T) : T {\n        if (typeof data.defaultPath === 'undefined') {\n            data.defaultPath = this.options.defaultPath;\n        }\n\n        if (typeof data.throwOnFailure === 'undefined') {\n            data.throwOnFailure = this.options.throwOnFailure;\n        }\n\n        return data;\n    }\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { QueryParser } from './parser';\nimport type { ObjectLiteral } from '../types';\nimport type { ParseInput, ParseOptions, ParseOutput } from './types';\n\nexport function parseQuery<T extends ObjectLiteral = ObjectLiteral>(\n    input: ParseInput,\n    options: ParseOptions<T> = {},\n) : ParseOutput {\n    const parser = new QueryParser<T>(options);\n\n    return parser.parse(input);\n}\n"],"names":["Parameter","URLParameter","DEFAULT_ID","isObject","item","Array","isArray","extendObject","target","source","keys","Object","i","length","hasOwnProperty","obj","prop","prototype","call","toFlatObject","data","options","prefixParts","output","key","destinationKey","join","transformer","result","validator","buildKeyPath","prefix","toKeyPathArray","input","j","push","value","groupArrayByKeyPath","pathItems","parts","split","name","pop","applyMapping","map","onlyKey","run","shift","found","rest","copy","last","unshift","parseKey","field","path","undefined","merge","createMerger","clone","inPlace","array","arrayDistinct","isPathAllowedByRelations","includes","some","include","buildKeyWithPath","details","serializeAsURI","query","el","filter","Boolean","reduce","acc","curr","encodeURIComponent","flattenParseAllowedOption","isPathCoveredByParseAllowedOption","paths","items","indexOf","FieldsOptionsContainer","initDefault","default","defaultIsUndefined","initAllowed","allowed","allowedIsUndefined","initItems","initReverseMapping","mapping","reverseMapping","buildReverseRecord","record","constructor","FieldOperator","ErrorCode","BaseError","Error","code","NONE","message","BuildError","ParseError","inputInvalid","INPUT_INVALID","keyNotAllowed","KEY_NOT_ALLOWED","keyInvalid","KEY_INVALID","keyPathInvalid","KEY_PATH_INVALID","keyValueInvalid","KEY_VALUE_INVALID","FieldsBuildError","FieldsParseError","buildFieldDomainRecords","domainFields","parseFieldsInput","isValidFieldName","test","parseQueryFields","container","throwOnFailure","distinctArray","relations","fields","transformed","included","excluded","operator","character","substring","INCLUDE","EXCLUDE","isValid","from","Set","index","splice","destPath","defaultPath","FilterComparisonOperator","FilterInputOperatorValue","transformFilterValue","trim","lower","toLowerCase","num","Number","isNaN","n","matchOperator","position","match","parseFilterValue","IN","negation","NEGATION","NOT_IN","LIKE","NOT_LIKE","LESS_THAN_EQUAL","LESS_THAN","MORE_THAN_EQUAL","GREATER_THAN_EQUAL","MORE_THAN","GREATER_THAN","NOT_EQUAL","EQUAL","FiltersOptionsContainer","defaultKeys","defaultOutput","buildParseOutput","flatten","inputKeys","defaultByElement","values","keyDetails","keyWithPath","transformParseOutputElement","element","transformFiltersBuildInput","tmp","FiltersBuildError","FiltersParseError","parseQueryFilters","fieldDetails","fullKey","validate","PaginationBuildError","PaginationParseError","limitExceeded","limit","finalizePagination","maxLimit","offset","parseQueryPagination","parseInt","RelationsBuildError","RelationsParseError","includeParents","isValidRelationPath","parseQueryRelations","pathMapping","mappingKeys","parentIncludes","parent","startsWith","SortDirection","transformSortBuildInput","slice","DESC","ASC","SortOptionsContainer","buildDefaultDomainFields","buildAllowedDomainFields","SortBuildError","SortParseError","parseSortValue","direction","isMultiDimensionalArray","arr","parseQuerySort","fieldPrefix","matched","keyWithAlias","outerLoop","temp","keyPaths","QueryBuilder","add","FIELDS","addFields","FILTERS","addFilters","PAGINATION","addPagination","RELATIONS","addRelations","SORT","addSort","filters","pagination","sort","toString","build","buildQuery","builder","buildQueryParameterOptions","isQueryParameterEnabled","context","QueryParser","parse","parseRelations","parseFields","parseFilters","parsePagination","parseSort","extendParameterOptions","printOptions","parseQuery","parser"],"mappings":"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"}