{"version":3,"file":"node.cjs","sources":["../../../../node_modules/superjson/dist/double-indexed-kv.js","../../../../node_modules/superjson/dist/registry.js","../../../../node_modules/superjson/dist/class-registry.js","../../../../node_modules/superjson/dist/util.js","../../../../node_modules/superjson/dist/custom-transformer-registry.js","../../../../node_modules/superjson/dist/is.js","../../../../node_modules/superjson/dist/pathstringifier.js","../../../../node_modules/superjson/dist/transformer.js","../../../../node_modules/superjson/dist/accessDeep.js","../../../../node_modules/superjson/dist/plainer.js","../../../../node_modules/is-what/dist/index.js","../../../../node_modules/superjson/node_modules/copy-anything/dist/index.js","../../../../node_modules/superjson/dist/index.js","../../src/analytics-composer/common/custom-superjson.ts","../../src/analytics-composer/new-nlq-translator/common.ts","../../src/analytics-composer/new-nlq-translator/translate-filters.ts","../../src/analytics-composer/new-nlq-translator/translate-dimensions.ts","../../src/analytics-composer/new-nlq-translator/translate-measures.ts","../../src/analytics-composer/new-nlq-translator/translate-query.ts","../../src/analytics-composer/new-nlq-translator/translate-query-to-jaql.ts"],"sourcesContent":["export class DoubleIndexedKV {\n    constructor() {\n        this.keyToValue = new Map();\n        this.valueToKey = new Map();\n    }\n    set(key, value) {\n        this.keyToValue.set(key, value);\n        this.valueToKey.set(value, key);\n    }\n    getByKey(key) {\n        return this.keyToValue.get(key);\n    }\n    getByValue(value) {\n        return this.valueToKey.get(value);\n    }\n    clear() {\n        this.keyToValue.clear();\n        this.valueToKey.clear();\n    }\n}\n//# sourceMappingURL=double-indexed-kv.js.map","import { DoubleIndexedKV } from './double-indexed-kv.js';\nexport class Registry {\n    constructor(generateIdentifier) {\n        this.generateIdentifier = generateIdentifier;\n        this.kv = new DoubleIndexedKV();\n    }\n    register(value, identifier) {\n        if (this.kv.getByValue(value)) {\n            return;\n        }\n        if (!identifier) {\n            identifier = this.generateIdentifier(value);\n        }\n        this.kv.set(identifier, value);\n    }\n    clear() {\n        this.kv.clear();\n    }\n    getIdentifier(value) {\n        return this.kv.getByValue(value);\n    }\n    getValue(identifier) {\n        return this.kv.getByKey(identifier);\n    }\n}\n//# sourceMappingURL=registry.js.map","import { Registry } from './registry.js';\nexport class ClassRegistry extends Registry {\n    constructor() {\n        super(c => c.name);\n        this.classToAllowedProps = new Map();\n    }\n    register(value, options) {\n        if (typeof options === 'object') {\n            if (options.allowProps) {\n                this.classToAllowedProps.set(value, options.allowProps);\n            }\n            super.register(value, options.identifier);\n        }\n        else {\n            super.register(value, options);\n        }\n    }\n    getAllowedProps(value) {\n        return this.classToAllowedProps.get(value);\n    }\n}\n//# sourceMappingURL=class-registry.js.map","function valuesOfObj(record) {\n    if ('values' in Object) {\n        // eslint-disable-next-line es5/no-es6-methods\n        return Object.values(record);\n    }\n    const values = [];\n    // eslint-disable-next-line no-restricted-syntax\n    for (const key in record) {\n        if (record.hasOwnProperty(key)) {\n            values.push(record[key]);\n        }\n    }\n    return values;\n}\nexport function find(record, predicate) {\n    const values = valuesOfObj(record);\n    if ('find' in values) {\n        // eslint-disable-next-line es5/no-es6-methods\n        return values.find(predicate);\n    }\n    const valuesNotNever = values;\n    for (let i = 0; i < valuesNotNever.length; i++) {\n        const value = valuesNotNever[i];\n        if (predicate(value)) {\n            return value;\n        }\n    }\n    return undefined;\n}\nexport function forEach(record, run) {\n    Object.entries(record).forEach(([key, value]) => run(value, key));\n}\nexport function includes(arr, value) {\n    return arr.indexOf(value) !== -1;\n}\nexport function findArr(record, predicate) {\n    for (let i = 0; i < record.length; i++) {\n        const value = record[i];\n        if (predicate(value)) {\n            return value;\n        }\n    }\n    return undefined;\n}\n//# sourceMappingURL=util.js.map","import { find } from './util.js';\nexport class CustomTransformerRegistry {\n    constructor() {\n        this.transfomers = {};\n    }\n    register(transformer) {\n        this.transfomers[transformer.name] = transformer;\n    }\n    findApplicable(v) {\n        return find(this.transfomers, transformer => transformer.isApplicable(v));\n    }\n    findByName(name) {\n        return this.transfomers[name];\n    }\n}\n//# sourceMappingURL=custom-transformer-registry.js.map","const getType = (payload) => Object.prototype.toString.call(payload).slice(8, -1);\nexport const isUndefined = (payload) => typeof payload === 'undefined';\nexport const isNull = (payload) => payload === null;\nexport const isPlainObject = (payload) => {\n    if (typeof payload !== 'object' || payload === null)\n        return false;\n    if (payload === Object.prototype)\n        return false;\n    if (Object.getPrototypeOf(payload) === null)\n        return true;\n    return Object.getPrototypeOf(payload) === Object.prototype;\n};\nexport const isEmptyObject = (payload) => isPlainObject(payload) && Object.keys(payload).length === 0;\nexport const isArray = (payload) => Array.isArray(payload);\nexport const isString = (payload) => typeof payload === 'string';\nexport const isNumber = (payload) => typeof payload === 'number' && !isNaN(payload);\nexport const isBoolean = (payload) => typeof payload === 'boolean';\nexport const isRegExp = (payload) => payload instanceof RegExp;\nexport const isMap = (payload) => payload instanceof Map;\nexport const isSet = (payload) => payload instanceof Set;\nexport const isSymbol = (payload) => getType(payload) === 'Symbol';\nexport const isDate = (payload) => payload instanceof Date && !isNaN(payload.valueOf());\nexport const isError = (payload) => payload instanceof Error;\nexport const isNaNValue = (payload) => typeof payload === 'number' && isNaN(payload);\nexport const isPrimitive = (payload) => isBoolean(payload) ||\n    isNull(payload) ||\n    isUndefined(payload) ||\n    isNumber(payload) ||\n    isString(payload) ||\n    isSymbol(payload);\nexport const isBigint = (payload) => typeof payload === 'bigint';\nexport const isInfinite = (payload) => payload === Infinity || payload === -Infinity;\nexport const isTypedArray = (payload) => ArrayBuffer.isView(payload) && !(payload instanceof DataView);\nexport const isURL = (payload) => payload instanceof URL;\n//# sourceMappingURL=is.js.map","export const escapeKey = (key) => key.replace(/\\./g, '\\\\.');\nexport const stringifyPath = (path) => path\n    .map(String)\n    .map(escapeKey)\n    .join('.');\nexport const parsePath = (string) => {\n    const result = [];\n    let segment = '';\n    for (let i = 0; i < string.length; i++) {\n        let char = string.charAt(i);\n        const isEscapedDot = char === '\\\\' && string.charAt(i + 1) === '.';\n        if (isEscapedDot) {\n            segment += '.';\n            i++;\n            continue;\n        }\n        const isEndOfSegment = char === '.';\n        if (isEndOfSegment) {\n            result.push(segment);\n            segment = '';\n            continue;\n        }\n        segment += char;\n    }\n    const lastSegment = segment;\n    result.push(lastSegment);\n    return result;\n};\n//# sourceMappingURL=pathstringifier.js.map","import { isBigint, isDate, isInfinite, isMap, isNaNValue, isRegExp, isSet, isUndefined, isSymbol, isArray, isError, isTypedArray, isURL, } from './is.js';\nimport { findArr } from './util.js';\nfunction simpleTransformation(isApplicable, annotation, transform, untransform) {\n    return {\n        isApplicable,\n        annotation,\n        transform,\n        untransform,\n    };\n}\nconst simpleRules = [\n    simpleTransformation(isUndefined, 'undefined', () => null, () => undefined),\n    simpleTransformation(isBigint, 'bigint', v => v.toString(), v => {\n        if (typeof BigInt !== 'undefined') {\n            return BigInt(v);\n        }\n        console.error('Please add a BigInt polyfill.');\n        return v;\n    }),\n    simpleTransformation(isDate, 'Date', v => v.toISOString(), v => new Date(v)),\n    simpleTransformation(isError, 'Error', (v, superJson) => {\n        const baseError = {\n            name: v.name,\n            message: v.message,\n        };\n        superJson.allowedErrorProps.forEach(prop => {\n            baseError[prop] = v[prop];\n        });\n        return baseError;\n    }, (v, superJson) => {\n        const e = new Error(v.message);\n        e.name = v.name;\n        e.stack = v.stack;\n        superJson.allowedErrorProps.forEach(prop => {\n            e[prop] = v[prop];\n        });\n        return e;\n    }),\n    simpleTransformation(isRegExp, 'regexp', v => '' + v, regex => {\n        const body = regex.slice(1, regex.lastIndexOf('/'));\n        const flags = regex.slice(regex.lastIndexOf('/') + 1);\n        return new RegExp(body, flags);\n    }),\n    simpleTransformation(isSet, 'set', \n    // (sets only exist in es6+)\n    // eslint-disable-next-line es5/no-es6-methods\n    v => [...v.values()], v => new Set(v)),\n    simpleTransformation(isMap, 'map', v => [...v.entries()], v => new Map(v)),\n    simpleTransformation((v) => isNaNValue(v) || isInfinite(v), 'number', v => {\n        if (isNaNValue(v)) {\n            return 'NaN';\n        }\n        if (v > 0) {\n            return 'Infinity';\n        }\n        else {\n            return '-Infinity';\n        }\n    }, Number),\n    simpleTransformation((v) => v === 0 && 1 / v === -Infinity, 'number', () => {\n        return '-0';\n    }, Number),\n    simpleTransformation(isURL, 'URL', v => v.toString(), v => new URL(v)),\n];\nfunction compositeTransformation(isApplicable, annotation, transform, untransform) {\n    return {\n        isApplicable,\n        annotation,\n        transform,\n        untransform,\n    };\n}\nconst symbolRule = compositeTransformation((s, superJson) => {\n    if (isSymbol(s)) {\n        const isRegistered = !!superJson.symbolRegistry.getIdentifier(s);\n        return isRegistered;\n    }\n    return false;\n}, (s, superJson) => {\n    const identifier = superJson.symbolRegistry.getIdentifier(s);\n    return ['symbol', identifier];\n}, v => v.description, (_, a, superJson) => {\n    const value = superJson.symbolRegistry.getValue(a[1]);\n    if (!value) {\n        throw new Error('Trying to deserialize unknown symbol');\n    }\n    return value;\n});\nconst constructorToName = [\n    Int8Array,\n    Uint8Array,\n    Int16Array,\n    Uint16Array,\n    Int32Array,\n    Uint32Array,\n    Float32Array,\n    Float64Array,\n    Uint8ClampedArray,\n].reduce((obj, ctor) => {\n    obj[ctor.name] = ctor;\n    return obj;\n}, {});\nconst typedArrayRule = compositeTransformation(isTypedArray, v => ['typed-array', v.constructor.name], v => [...v], (v, a) => {\n    const ctor = constructorToName[a[1]];\n    if (!ctor) {\n        throw new Error('Trying to deserialize unknown typed array');\n    }\n    return new ctor(v);\n});\nexport function isInstanceOfRegisteredClass(potentialClass, superJson) {\n    if (potentialClass?.constructor) {\n        const isRegistered = !!superJson.classRegistry.getIdentifier(potentialClass.constructor);\n        return isRegistered;\n    }\n    return false;\n}\nconst classRule = compositeTransformation(isInstanceOfRegisteredClass, (clazz, superJson) => {\n    const identifier = superJson.classRegistry.getIdentifier(clazz.constructor);\n    return ['class', identifier];\n}, (clazz, superJson) => {\n    const allowedProps = superJson.classRegistry.getAllowedProps(clazz.constructor);\n    if (!allowedProps) {\n        return { ...clazz };\n    }\n    const result = {};\n    allowedProps.forEach(prop => {\n        result[prop] = clazz[prop];\n    });\n    return result;\n}, (v, a, superJson) => {\n    const clazz = superJson.classRegistry.getValue(a[1]);\n    if (!clazz) {\n        throw new Error(`Trying to deserialize unknown class '${a[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);\n    }\n    return Object.assign(Object.create(clazz.prototype), v);\n});\nconst customRule = compositeTransformation((value, superJson) => {\n    return !!superJson.customTransformerRegistry.findApplicable(value);\n}, (value, superJson) => {\n    const transformer = superJson.customTransformerRegistry.findApplicable(value);\n    return ['custom', transformer.name];\n}, (value, superJson) => {\n    const transformer = superJson.customTransformerRegistry.findApplicable(value);\n    return transformer.serialize(value);\n}, (v, a, superJson) => {\n    const transformer = superJson.customTransformerRegistry.findByName(a[1]);\n    if (!transformer) {\n        throw new Error('Trying to deserialize unknown custom value');\n    }\n    return transformer.deserialize(v);\n});\nconst compositeRules = [classRule, symbolRule, customRule, typedArrayRule];\nexport const transformValue = (value, superJson) => {\n    const applicableCompositeRule = findArr(compositeRules, rule => rule.isApplicable(value, superJson));\n    if (applicableCompositeRule) {\n        return {\n            value: applicableCompositeRule.transform(value, superJson),\n            type: applicableCompositeRule.annotation(value, superJson),\n        };\n    }\n    const applicableSimpleRule = findArr(simpleRules, rule => rule.isApplicable(value, superJson));\n    if (applicableSimpleRule) {\n        return {\n            value: applicableSimpleRule.transform(value, superJson),\n            type: applicableSimpleRule.annotation,\n        };\n    }\n    return undefined;\n};\nconst simpleRulesByAnnotation = {};\nsimpleRules.forEach(rule => {\n    simpleRulesByAnnotation[rule.annotation] = rule;\n});\nexport const untransformValue = (json, type, superJson) => {\n    if (isArray(type)) {\n        switch (type[0]) {\n            case 'symbol':\n                return symbolRule.untransform(json, type, superJson);\n            case 'class':\n                return classRule.untransform(json, type, superJson);\n            case 'custom':\n                return customRule.untransform(json, type, superJson);\n            case 'typed-array':\n                return typedArrayRule.untransform(json, type, superJson);\n            default:\n                throw new Error('Unknown transformation: ' + type);\n        }\n    }\n    else {\n        const transformation = simpleRulesByAnnotation[type];\n        if (!transformation) {\n            throw new Error('Unknown transformation: ' + type);\n        }\n        return transformation.untransform(json, superJson);\n    }\n};\n//# sourceMappingURL=transformer.js.map","import { isMap, isArray, isPlainObject, isSet } from './is.js';\nimport { includes } from './util.js';\nconst getNthKey = (value, n) => {\n    if (n > value.size)\n        throw new Error('index out of bounds');\n    const keys = value.keys();\n    while (n > 0) {\n        keys.next();\n        n--;\n    }\n    return keys.next().value;\n};\nfunction validatePath(path) {\n    if (includes(path, '__proto__')) {\n        throw new Error('__proto__ is not allowed as a property');\n    }\n    if (includes(path, 'prototype')) {\n        throw new Error('prototype is not allowed as a property');\n    }\n    if (includes(path, 'constructor')) {\n        throw new Error('constructor is not allowed as a property');\n    }\n}\nexport const getDeep = (object, path) => {\n    validatePath(path);\n    for (let i = 0; i < path.length; i++) {\n        const key = path[i];\n        if (isSet(object)) {\n            object = getNthKey(object, +key);\n        }\n        else if (isMap(object)) {\n            const row = +key;\n            const type = +path[++i] === 0 ? 'key' : 'value';\n            const keyOfRow = getNthKey(object, row);\n            switch (type) {\n                case 'key':\n                    object = keyOfRow;\n                    break;\n                case 'value':\n                    object = object.get(keyOfRow);\n                    break;\n            }\n        }\n        else {\n            object = object[key];\n        }\n    }\n    return object;\n};\nexport const setDeep = (object, path, mapper) => {\n    validatePath(path);\n    if (path.length === 0) {\n        return mapper(object);\n    }\n    let parent = object;\n    for (let i = 0; i < path.length - 1; i++) {\n        const key = path[i];\n        if (isArray(parent)) {\n            const index = +key;\n            parent = parent[index];\n        }\n        else if (isPlainObject(parent)) {\n            parent = parent[key];\n        }\n        else if (isSet(parent)) {\n            const row = +key;\n            parent = getNthKey(parent, row);\n        }\n        else if (isMap(parent)) {\n            const isEnd = i === path.length - 2;\n            if (isEnd) {\n                break;\n            }\n            const row = +key;\n            const type = +path[++i] === 0 ? 'key' : 'value';\n            const keyOfRow = getNthKey(parent, row);\n            switch (type) {\n                case 'key':\n                    parent = keyOfRow;\n                    break;\n                case 'value':\n                    parent = parent.get(keyOfRow);\n                    break;\n            }\n        }\n    }\n    const lastKey = path[path.length - 1];\n    if (isArray(parent)) {\n        parent[+lastKey] = mapper(parent[+lastKey]);\n    }\n    else if (isPlainObject(parent)) {\n        parent[lastKey] = mapper(parent[lastKey]);\n    }\n    if (isSet(parent)) {\n        const oldValue = getNthKey(parent, +lastKey);\n        const newValue = mapper(oldValue);\n        if (oldValue !== newValue) {\n            parent.delete(oldValue);\n            parent.add(newValue);\n        }\n    }\n    if (isMap(parent)) {\n        const row = +path[path.length - 2];\n        const keyToRow = getNthKey(parent, row);\n        const type = +lastKey === 0 ? 'key' : 'value';\n        switch (type) {\n            case 'key': {\n                const newKey = mapper(keyToRow);\n                parent.set(newKey, parent.get(keyToRow));\n                if (newKey !== keyToRow) {\n                    parent.delete(keyToRow);\n                }\n                break;\n            }\n            case 'value': {\n                parent.set(keyToRow, mapper(parent.get(keyToRow)));\n                break;\n            }\n        }\n    }\n    return object;\n};\n//# sourceMappingURL=accessDeep.js.map","import { isArray, isEmptyObject, isMap, isPlainObject, isPrimitive, isSet, } from './is.js';\nimport { escapeKey, stringifyPath } from './pathstringifier.js';\nimport { isInstanceOfRegisteredClass, transformValue, untransformValue, } from './transformer.js';\nimport { includes, forEach } from './util.js';\nimport { parsePath } from './pathstringifier.js';\nimport { getDeep, setDeep } from './accessDeep.js';\nfunction traverse(tree, walker, origin = []) {\n    if (!tree) {\n        return;\n    }\n    if (!isArray(tree)) {\n        forEach(tree, (subtree, key) => traverse(subtree, walker, [...origin, ...parsePath(key)]));\n        return;\n    }\n    const [nodeValue, children] = tree;\n    if (children) {\n        forEach(children, (child, key) => {\n            traverse(child, walker, [...origin, ...parsePath(key)]);\n        });\n    }\n    walker(nodeValue, origin);\n}\nexport function applyValueAnnotations(plain, annotations, superJson) {\n    traverse(annotations, (type, path) => {\n        plain = setDeep(plain, path, v => untransformValue(v, type, superJson));\n    });\n    return plain;\n}\nexport function applyReferentialEqualityAnnotations(plain, annotations) {\n    function apply(identicalPaths, path) {\n        const object = getDeep(plain, parsePath(path));\n        identicalPaths.map(parsePath).forEach(identicalObjectPath => {\n            plain = setDeep(plain, identicalObjectPath, () => object);\n        });\n    }\n    if (isArray(annotations)) {\n        const [root, other] = annotations;\n        root.forEach(identicalPath => {\n            plain = setDeep(plain, parsePath(identicalPath), () => plain);\n        });\n        if (other) {\n            forEach(other, apply);\n        }\n    }\n    else {\n        forEach(annotations, apply);\n    }\n    return plain;\n}\nconst isDeep = (object, superJson) => isPlainObject(object) ||\n    isArray(object) ||\n    isMap(object) ||\n    isSet(object) ||\n    isInstanceOfRegisteredClass(object, superJson);\nfunction addIdentity(object, path, identities) {\n    const existingSet = identities.get(object);\n    if (existingSet) {\n        existingSet.push(path);\n    }\n    else {\n        identities.set(object, [path]);\n    }\n}\nexport function generateReferentialEqualityAnnotations(identitites, dedupe) {\n    const result = {};\n    let rootEqualityPaths = undefined;\n    identitites.forEach(paths => {\n        if (paths.length <= 1) {\n            return;\n        }\n        // if we're not deduping, all of these objects continue existing.\n        // putting the shortest path first makes it easier to parse for humans\n        // if we're deduping though, only the first entry will still exist, so we can't do this optimisation.\n        if (!dedupe) {\n            paths = paths\n                .map(path => path.map(String))\n                .sort((a, b) => a.length - b.length);\n        }\n        const [representativePath, ...identicalPaths] = paths;\n        if (representativePath.length === 0) {\n            rootEqualityPaths = identicalPaths.map(stringifyPath);\n        }\n        else {\n            result[stringifyPath(representativePath)] = identicalPaths.map(stringifyPath);\n        }\n    });\n    if (rootEqualityPaths) {\n        if (isEmptyObject(result)) {\n            return [rootEqualityPaths];\n        }\n        else {\n            return [rootEqualityPaths, result];\n        }\n    }\n    else {\n        return isEmptyObject(result) ? undefined : result;\n    }\n}\nexport const walker = (object, identities, superJson, dedupe, path = [], objectsInThisPath = [], seenObjects = new Map()) => {\n    const primitive = isPrimitive(object);\n    if (!primitive) {\n        addIdentity(object, path, identities);\n        const seen = seenObjects.get(object);\n        if (seen) {\n            // short-circuit result if we've seen this object before\n            return dedupe\n                ? {\n                    transformedValue: null,\n                }\n                : seen;\n        }\n    }\n    if (!isDeep(object, superJson)) {\n        const transformed = transformValue(object, superJson);\n        const result = transformed\n            ? {\n                transformedValue: transformed.value,\n                annotations: [transformed.type],\n            }\n            : {\n                transformedValue: object,\n            };\n        if (!primitive) {\n            seenObjects.set(object, result);\n        }\n        return result;\n    }\n    if (includes(objectsInThisPath, object)) {\n        // prevent circular references\n        return {\n            transformedValue: null,\n        };\n    }\n    const transformationResult = transformValue(object, superJson);\n    const transformed = transformationResult?.value ?? object;\n    const transformedValue = isArray(transformed) ? [] : {};\n    const innerAnnotations = {};\n    forEach(transformed, (value, index) => {\n        if (index === '__proto__' ||\n            index === 'constructor' ||\n            index === 'prototype') {\n            throw new Error(`Detected property ${index}. This is a prototype pollution risk, please remove it from your object.`);\n        }\n        const recursiveResult = walker(value, identities, superJson, dedupe, [...path, index], [...objectsInThisPath, object], seenObjects);\n        transformedValue[index] = recursiveResult.transformedValue;\n        if (isArray(recursiveResult.annotations)) {\n            innerAnnotations[index] = recursiveResult.annotations;\n        }\n        else if (isPlainObject(recursiveResult.annotations)) {\n            forEach(recursiveResult.annotations, (tree, key) => {\n                innerAnnotations[escapeKey(index) + '.' + key] = tree;\n            });\n        }\n    });\n    const result = isEmptyObject(innerAnnotations)\n        ? {\n            transformedValue,\n            annotations: !!transformationResult\n                ? [transformationResult.type]\n                : undefined,\n        }\n        : {\n            transformedValue,\n            annotations: !!transformationResult\n                ? [transformationResult.type, innerAnnotations]\n                : innerAnnotations,\n        };\n    if (!primitive) {\n        seenObjects.set(object, result);\n    }\n    return result;\n};\n//# sourceMappingURL=plainer.js.map","function getType(payload) {\n  return Object.prototype.toString.call(payload).slice(8, -1);\n}\n\nfunction isAnyObject(payload) {\n  return getType(payload) === \"Object\";\n}\n\nfunction isArray(payload) {\n  return getType(payload) === \"Array\";\n}\n\nfunction isBlob(payload) {\n  return getType(payload) === \"Blob\";\n}\n\nfunction isBoolean(payload) {\n  return getType(payload) === \"Boolean\";\n}\n\nfunction isDate(payload) {\n  return getType(payload) === \"Date\" && !isNaN(payload);\n}\n\nfunction isEmptyArray(payload) {\n  return isArray(payload) && payload.length === 0;\n}\n\nfunction isPlainObject(payload) {\n  if (getType(payload) !== \"Object\")\n    return false;\n  const prototype = Object.getPrototypeOf(payload);\n  return !!prototype && prototype.constructor === Object && prototype === Object.prototype;\n}\n\nfunction isEmptyObject(payload) {\n  return isPlainObject(payload) && Object.keys(payload).length === 0;\n}\n\nfunction isEmptyString(payload) {\n  return payload === \"\";\n}\n\nfunction isError(payload) {\n  return getType(payload) === \"Error\" || payload instanceof Error;\n}\n\nfunction isFile(payload) {\n  return getType(payload) === \"File\";\n}\n\nfunction isFullArray(payload) {\n  return isArray(payload) && payload.length > 0;\n}\n\nfunction isFullObject(payload) {\n  return isPlainObject(payload) && Object.keys(payload).length > 0;\n}\n\nfunction isString(payload) {\n  return getType(payload) === \"String\";\n}\n\nfunction isFullString(payload) {\n  return isString(payload) && payload !== \"\";\n}\n\nfunction isFunction(payload) {\n  return typeof payload === \"function\";\n}\n\nfunction isType(payload, type) {\n  if (!(type instanceof Function)) {\n    throw new TypeError(\"Type must be a function\");\n  }\n  if (!Object.prototype.hasOwnProperty.call(type, \"prototype\")) {\n    throw new TypeError(\"Type is not a class\");\n  }\n  const name = type.name;\n  return getType(payload) === name || Boolean(payload && payload.constructor === type);\n}\n\nfunction isInstanceOf(value, classOrClassName) {\n  if (typeof classOrClassName === \"function\") {\n    for (let p = value; p; p = Object.getPrototypeOf(p)) {\n      if (isType(p, classOrClassName)) {\n        return true;\n      }\n    }\n    return false;\n  } else {\n    for (let p = value; p; p = Object.getPrototypeOf(p)) {\n      if (getType(p) === classOrClassName) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n\nfunction isMap(payload) {\n  return getType(payload) === \"Map\";\n}\n\nfunction isNaNValue(payload) {\n  return getType(payload) === \"Number\" && isNaN(payload);\n}\n\nfunction isNumber(payload) {\n  return getType(payload) === \"Number\" && !isNaN(payload);\n}\n\nfunction isNegativeNumber(payload) {\n  return isNumber(payload) && payload < 0;\n}\n\nfunction isNull(payload) {\n  return getType(payload) === \"Null\";\n}\n\nfunction isOneOf(a, b, c, d, e) {\n  return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);\n}\n\nfunction isUndefined(payload) {\n  return getType(payload) === \"Undefined\";\n}\n\nconst isNullOrUndefined = isOneOf(isNull, isUndefined);\n\nfunction isObject(payload) {\n  return isPlainObject(payload);\n}\n\nfunction isObjectLike(payload) {\n  return isAnyObject(payload);\n}\n\nfunction isPositiveNumber(payload) {\n  return isNumber(payload) && payload > 0;\n}\n\nfunction isSymbol(payload) {\n  return getType(payload) === \"Symbol\";\n}\n\nfunction isPrimitive(payload) {\n  return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\n}\n\nfunction isPromise(payload) {\n  return getType(payload) === \"Promise\";\n}\n\nfunction isRegExp(payload) {\n  return getType(payload) === \"RegExp\";\n}\n\nfunction isSet(payload) {\n  return getType(payload) === \"Set\";\n}\n\nfunction isWeakMap(payload) {\n  return getType(payload) === \"WeakMap\";\n}\n\nfunction isWeakSet(payload) {\n  return getType(payload) === \"WeakSet\";\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isInstanceOf, isMap, isNaNValue, isNegativeNumber, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPositiveNumber, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };\n","import { isArray, isPlainObject } from 'is-what';\n\nfunction assignProp(carry, key, newVal, originalObject, includeNonenumerable) {\n  const propType = {}.propertyIsEnumerable.call(originalObject, key) ? \"enumerable\" : \"nonenumerable\";\n  if (propType === \"enumerable\")\n    carry[key] = newVal;\n  if (includeNonenumerable && propType === \"nonenumerable\") {\n    Object.defineProperty(carry, key, {\n      value: newVal,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    });\n  }\n}\nfunction copy(target, options = {}) {\n  if (isArray(target)) {\n    return target.map((item) => copy(item, options));\n  }\n  if (!isPlainObject(target)) {\n    return target;\n  }\n  const props = Object.getOwnPropertyNames(target);\n  const symbols = Object.getOwnPropertySymbols(target);\n  return [...props, ...symbols].reduce((carry, key) => {\n    if (isArray(options.props) && !options.props.includes(key)) {\n      return carry;\n    }\n    const val = target[key];\n    const newVal = copy(val, options);\n    assignProp(carry, key, newVal, target, options.nonenumerable);\n    return carry;\n  }, {});\n}\n\nexport { copy };\n","import { ClassRegistry } from './class-registry.js';\nimport { Registry } from './registry.js';\nimport { CustomTransformerRegistry, } from './custom-transformer-registry.js';\nimport { applyReferentialEqualityAnnotations, applyValueAnnotations, generateReferentialEqualityAnnotations, walker, } from './plainer.js';\nimport { copy } from 'copy-anything';\nexport default class SuperJSON {\n    /**\n     * @param dedupeReferentialEqualities  If true, SuperJSON will make sure only one instance of referentially equal objects are serialized and the rest are replaced with `null`.\n     */\n    constructor({ dedupe = false, } = {}) {\n        this.classRegistry = new ClassRegistry();\n        this.symbolRegistry = new Registry(s => s.description ?? '');\n        this.customTransformerRegistry = new CustomTransformerRegistry();\n        this.allowedErrorProps = [];\n        this.dedupe = dedupe;\n    }\n    serialize(object) {\n        const identities = new Map();\n        const output = walker(object, identities, this, this.dedupe);\n        const res = {\n            json: output.transformedValue,\n        };\n        if (output.annotations) {\n            res.meta = {\n                ...res.meta,\n                values: output.annotations,\n            };\n        }\n        const equalityAnnotations = generateReferentialEqualityAnnotations(identities, this.dedupe);\n        if (equalityAnnotations) {\n            res.meta = {\n                ...res.meta,\n                referentialEqualities: equalityAnnotations,\n            };\n        }\n        return res;\n    }\n    deserialize(payload) {\n        const { json, meta } = payload;\n        let result = copy(json);\n        if (meta?.values) {\n            result = applyValueAnnotations(result, meta.values, this);\n        }\n        if (meta?.referentialEqualities) {\n            result = applyReferentialEqualityAnnotations(result, meta.referentialEqualities);\n        }\n        return result;\n    }\n    stringify(object) {\n        return JSON.stringify(this.serialize(object));\n    }\n    parse(string) {\n        return this.deserialize(JSON.parse(string));\n    }\n    registerClass(v, options) {\n        this.classRegistry.register(v, options);\n    }\n    registerSymbol(v, identifier) {\n        this.symbolRegistry.register(v, identifier);\n    }\n    registerCustom(transformer, name) {\n        this.customTransformerRegistry.register({\n            name,\n            ...transformer,\n        });\n    }\n    allowErrorProps(...props) {\n        this.allowedErrorProps.push(...props);\n    }\n}\nSuperJSON.defaultInstance = new SuperJSON();\nSuperJSON.serialize = SuperJSON.defaultInstance.serialize.bind(SuperJSON.defaultInstance);\nSuperJSON.deserialize = SuperJSON.defaultInstance.deserialize.bind(SuperJSON.defaultInstance);\nSuperJSON.stringify = SuperJSON.defaultInstance.stringify.bind(SuperJSON.defaultInstance);\nSuperJSON.parse = SuperJSON.defaultInstance.parse.bind(SuperJSON.defaultInstance);\nSuperJSON.registerClass = SuperJSON.defaultInstance.registerClass.bind(SuperJSON.defaultInstance);\nSuperJSON.registerSymbol = SuperJSON.defaultInstance.registerSymbol.bind(SuperJSON.defaultInstance);\nSuperJSON.registerCustom = SuperJSON.defaultInstance.registerCustom.bind(SuperJSON.defaultInstance);\nSuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(SuperJSON.defaultInstance);\nexport { SuperJSON };\nexport const serialize = SuperJSON.serialize;\nexport const deserialize = SuperJSON.deserialize;\nexport const stringify = SuperJSON.stringify;\nexport const parse = SuperJSON.parse;\nexport const registerClass = SuperJSON.registerClass;\nexport const registerCustom = SuperJSON.registerCustom;\nexport const registerSymbol = SuperJSON.registerSymbol;\nexport const allowErrorProps = SuperJSON.allowErrorProps;\n//# sourceMappingURL=index.js.map","import {\r\n  CascadingFilter,\r\n  CustomFilter,\r\n  DateRangeFilter,\r\n  DimensionalAttribute,\r\n  DimensionalBaseMeasure,\r\n  DimensionalCalculatedMeasure,\r\n  DimensionalDateDimension,\r\n  DimensionalDimension,\r\n  DimensionalLevelAttribute,\r\n  DimensionalMeasureTemplate,\r\n  ExcludeFilter,\r\n  isCascadingFilter,\r\n  isCustomFilter,\r\n  isDateRangeFilter,\r\n  isDimensionalAttribute,\r\n  isDimensionalBaseMeasure,\r\n  isDimensionalCalculatedMeasure,\r\n  isDimensionalDateDimension,\r\n  isDimensionalDimension,\r\n  isDimensionalLevelAttribute,\r\n  isDimensionalMeasureTemplate,\r\n  isExcludeFilter,\r\n  isJaqlElement,\r\n  isLogicalAttributeFilter,\r\n  isMeasureFilter,\r\n  isMembersFilter,\r\n  isNumericFilter,\r\n  isRankingFilter,\r\n  isRelativeDateFilter,\r\n  isTextFilter,\r\n  JaqlElement,\r\n  JSONObject,\r\n  LogicalAttributeFilter,\r\n  MeasureFilter,\r\n  MembersFilter,\r\n  NumericFilter,\r\n  RankingFilter,\r\n  RelativeDateFilter,\r\n  Sort,\r\n  TextFilter,\r\n} from '@sisense/sdk-data';\r\nimport SuperJSON, { SuperJSONResult } from 'superjson';\r\n\r\n// Centralized place to deserialize dimensional elements and register serialize/deserialize methods to SuperJSON.\r\n\r\ninterface SerializedObject extends JSONObject {\r\n  __serializable: string;\r\n}\r\n\r\nconst normalizeSort = (v: Sort | undefined) => (v === undefined ? Sort.None : v);\r\n\r\nconst deserializeJaqlElement = (v: any) => new JaqlElement(v.metadataItem, v.type);\r\n\r\nconst deserializeDimensionalAttribute = (v: any) =>\r\n  new DimensionalAttribute(\r\n    v.name,\r\n    v.expression,\r\n    v.type,\r\n    v.description,\r\n    normalizeSort(v.sort),\r\n    v.dataSource,\r\n    v.composeCode,\r\n  );\r\n\r\nconst deserializeDimensionalLevelAttribute = (v: any) =>\r\n  new DimensionalLevelAttribute(\r\n    v.name,\r\n    v.expression,\r\n    v.granularity,\r\n    v.format,\r\n    v.description,\r\n    normalizeSort(v.sort),\r\n    v.dataSource,\r\n    v.composeCode,\r\n  );\r\n\r\nconst deserializeAttribute = (v: any) => {\r\n  const className = (v as SerializedObject).__serializable;\r\n  switch (className) {\r\n    case 'DimensionalAttribute':\r\n      return deserializeDimensionalAttribute(v);\r\n    case 'DimensionalLevelAttribute':\r\n      return deserializeDimensionalLevelAttribute(v);\r\n    default:\r\n      return v;\r\n  }\r\n};\r\n\r\nconst deserializeDimensionalDimension = (v: any) =>\r\n  new DimensionalDimension(\r\n    v.name,\r\n    v.expression,\r\n    v.attributes.map(deserializeAttribute),\r\n    v.dimensions.map(deserializeDimension),\r\n    v.type,\r\n    v.description,\r\n    normalizeSort(v.sort),\r\n    v.dataSource,\r\n    v.composeCode,\r\n    v.defaultAttribute ? deserializeAttribute(v.defaultAttribute) : undefined,\r\n  );\r\n\r\nconst deserializeDimensionalDateDimension = (v: any) =>\r\n  new DimensionalDateDimension(\r\n    v.name,\r\n    v.expression,\r\n    v.description,\r\n    normalizeSort(v.sort),\r\n    v.dataSource,\r\n    v.composeCode,\r\n  );\r\n\r\nconst deserializeDimension = (v: any) => {\r\n  const className = (v as SerializedObject).__serializable;\r\n  switch (className) {\r\n    case 'DimensionalDimension':\r\n      return deserializeDimensionalDimension(v);\r\n    case 'DimensionalDateDimension':\r\n      return deserializeDimensionalDateDimension(v);\r\n    default:\r\n      return v;\r\n  }\r\n};\r\n\r\nconst deserializeDimensionalBaseMeasure = (v: any) =>\r\n  new DimensionalBaseMeasure(\r\n    v.name,\r\n    deserializeAttribute(v.attribute),\r\n    v.aggregation,\r\n    v.format,\r\n    v.description,\r\n    normalizeSort(v.sort),\r\n    v.dataSource,\r\n    v.composeCode,\r\n  );\r\n\r\nconst deserializeDimensionalCalculatedMeasure = (v: any) => {\r\n  // Handle deserialization of context with possible nested custom objects\r\n  const deserializedContext: Record<string, any> = Object.fromEntries(\r\n    Object.entries(v.context).map(([key, value]) => {\r\n      if (value && typeof value === 'object' && '__serializable' in value) {\r\n        const className = (value as SerializedObject).__serializable;\r\n        switch (className) {\r\n          case 'DimensionalAttribute':\r\n            return [key, deserializeDimensionalAttribute(value)];\r\n          case 'DimensionalLevelAttribute':\r\n            return [key, deserializeDimensionalLevelAttribute(value)];\r\n          case 'DimensionalBaseMeasure':\r\n            return [key, deserializeDimensionalBaseMeasure(value)];\r\n          case 'DimensionalCalculatedMeasure':\r\n            return [key, deserializeDimensionalCalculatedMeasure(value)];\r\n          default:\r\n            return [key, value];\r\n        }\r\n      }\r\n      // Otherwise, just return the value as is\r\n      return [key, value];\r\n    }),\r\n  );\r\n\r\n  return new DimensionalCalculatedMeasure(\r\n    v.name,\r\n    v.expression,\r\n    deserializedContext,\r\n    v.format,\r\n    v.description,\r\n    normalizeSort(v.sort),\r\n    v.dataSource,\r\n    v.composeCode,\r\n  );\r\n};\r\n\r\nconst deserializeDimensionalMeasureTemplate = (v: any) =>\r\n  new DimensionalMeasureTemplate(\r\n    v.name,\r\n    deserializeAttribute(v.attribute),\r\n    v.format,\r\n    v.description,\r\n    normalizeSort(v.sort),\r\n    v.dataSource,\r\n    v.composeCode,\r\n  );\r\n\r\nconst deserializeMeasure = (v: any) => {\r\n  const className = (v as SerializedObject).__serializable;\r\n  switch (className) {\r\n    case 'DimensionalBaseMeasure':\r\n      return deserializeDimensionalBaseMeasure(v);\r\n    case 'DimensionalCalculatedMeasure':\r\n      return deserializeDimensionalCalculatedMeasure(v);\r\n    case 'DimensionalMeasureTemplate':\r\n      return deserializeDimensionalMeasureTemplate(v);\r\n    default:\r\n      return v;\r\n  }\r\n};\r\n\r\nconst deserializeFilter = (v: any): any => {\r\n  const className = (v as SerializedObject).__serializable;\r\n  switch (className) {\r\n    case 'MembersFilter':\r\n      return new MembersFilter(\r\n        deserializeAttribute(v.attribute),\r\n        v.members,\r\n        v.config.backgroundFilter\r\n          ? { ...v.config, backgroundFilter: deserializeFilter(v.config.backgroundFilter) }\r\n          : v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'LogicalAttributeFilter':\r\n      return new LogicalAttributeFilter(\r\n        v.filters.map((f: any) => deserializeFilter(f)),\r\n        v.operator,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'CascadingFilter':\r\n      return new CascadingFilter(\r\n        v._filters.map((f: any) => deserializeFilter(f)),\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'ExcludeFilter':\r\n      return new ExcludeFilter(\r\n        deserializeFilter(v.filter),\r\n        v.input ? deserializeFilter(v.input) : undefined,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'MeasureFilter':\r\n      return new MeasureFilter(\r\n        deserializeAttribute(v.attribute),\r\n        deserializeMeasure(v.measure),\r\n        v.operatorA,\r\n        v.valueA,\r\n        v.operatorB,\r\n        v.valueB,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'RankingFilter':\r\n      return new RankingFilter(\r\n        deserializeAttribute(v.attribute),\r\n        deserializeMeasure(v.measure),\r\n        v.operator,\r\n        v.count,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'NumericFilter':\r\n      return new NumericFilter(\r\n        deserializeAttribute(v.attribute),\r\n        v.operatorA,\r\n        v.valueA,\r\n        v.operatorB,\r\n        v.valueB,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'TextFilter':\r\n      return new TextFilter(\r\n        deserializeAttribute(v.attribute),\r\n        v.operatorA,\r\n        v.valueA,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'DateRangeFilter': {\r\n      const { valueA, valueB } = v;\r\n\r\n      return new DateRangeFilter(\r\n        deserializeAttribute(v.attribute),\r\n        valueA,\r\n        valueB,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    }\r\n    case 'RelativeDateFilter':\r\n      return new RelativeDateFilter(\r\n        deserializeAttribute(v.attribute),\r\n        v.offset,\r\n        v.count,\r\n        v.operator,\r\n        v.anchor,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    case 'CustomFilter':\r\n      return new CustomFilter(\r\n        deserializeAttribute(v.attribute),\r\n        v.jaqlExpression,\r\n        v.config,\r\n        v.composeCode,\r\n      );\r\n    default:\r\n      return v;\r\n  }\r\n};\r\n\r\nSuperJSON.registerCustom<JaqlElement, any>(\r\n  {\r\n    isApplicable: isJaqlElement,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeJaqlElement(v),\r\n  },\r\n  'JaqlElement',\r\n);\r\n\r\nSuperJSON.registerCustom<DimensionalAttribute, any>(\r\n  {\r\n    isApplicable: isDimensionalAttribute,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeDimensionalAttribute(v),\r\n  },\r\n  'DimensionalAttribute',\r\n);\r\n\r\nSuperJSON.registerCustom<DimensionalLevelAttribute, any>(\r\n  {\r\n    isApplicable: isDimensionalLevelAttribute,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeDimensionalLevelAttribute(v),\r\n  },\r\n  'DimensionalLevelAttribute',\r\n);\r\n\r\nSuperJSON.registerCustom<DimensionalDimension, any>(\r\n  {\r\n    isApplicable: isDimensionalDimension,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeDimensionalDimension(v),\r\n  },\r\n  'DimensionalDimension',\r\n);\r\n\r\nSuperJSON.registerCustom<DimensionalDateDimension, any>(\r\n  {\r\n    isApplicable: isDimensionalDateDimension,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeDimensionalDateDimension(v),\r\n  },\r\n  'DimensionalDateDimension',\r\n);\r\n\r\nSuperJSON.registerCustom<DimensionalBaseMeasure, any>(\r\n  {\r\n    isApplicable: isDimensionalBaseMeasure,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeDimensionalBaseMeasure(v),\r\n  },\r\n  'DimensionalBaseMeasure',\r\n);\r\n\r\nSuperJSON.registerCustom<DimensionalCalculatedMeasure, any>(\r\n  {\r\n    isApplicable: isDimensionalCalculatedMeasure,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeDimensionalCalculatedMeasure(v),\r\n  },\r\n  'DimensionalCalculatedMeasure',\r\n);\r\n\r\nSuperJSON.registerCustom<DimensionalMeasureTemplate, any>(\r\n  {\r\n    isApplicable: isDimensionalMeasureTemplate,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeDimensionalMeasureTemplate(v),\r\n  },\r\n  'DimensionalMeasureTemplate',\r\n);\r\n\r\nSuperJSON.registerCustom<MembersFilter, any>(\r\n  {\r\n    isApplicable: isMembersFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'MembersFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<LogicalAttributeFilter, any>(\r\n  {\r\n    isApplicable: isLogicalAttributeFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'LogicalAttributeFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<CascadingFilter, any>(\r\n  {\r\n    isApplicable: isCascadingFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'CascadingFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<ExcludeFilter, any>(\r\n  {\r\n    isApplicable: isExcludeFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'ExcludeFilter',\r\n);\r\n\r\n// Do not register DoubleOperatorFilter as it is extended by other filters\r\n\r\nSuperJSON.registerCustom<MeasureFilter, any>(\r\n  {\r\n    isApplicable: isMeasureFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'MeasureFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<RankingFilter, any>(\r\n  {\r\n    isApplicable: isRankingFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'RankingFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<NumericFilter, any>(\r\n  {\r\n    isApplicable: isNumericFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'NumericFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<TextFilter, any>(\r\n  {\r\n    isApplicable: isTextFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'TextFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<DateRangeFilter, any>(\r\n  {\r\n    isApplicable: isDateRangeFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'DateRangeFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<RelativeDateFilter, any>(\r\n  {\r\n    isApplicable: isRelativeDateFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'RelativeDateFilter',\r\n);\r\n\r\nSuperJSON.registerCustom<CustomFilter, any>(\r\n  {\r\n    isApplicable: isCustomFilter,\r\n    serialize: (v) => v.serialize(),\r\n    deserialize: (v) => deserializeFilter(v),\r\n  },\r\n  'CustomFilter',\r\n);\r\n\r\n/**\r\n * Utility to stringify and parse CSDK JS objects to JSON and vice versa.\r\n * JS objects can contain class instances of dimensional elements (e.g., attributes/dimensions, measures, filters).\r\n *\r\n * The utility uses `superjson` under the hood.\r\n *\r\n * @internal\r\n */\r\nexport const CustomSuperJSON = SuperJSON;\r\n\r\n/**\r\n * Type alias for the result of the `CustomSuperJSON` utility.\r\n *\r\n * @internal\r\n */\r\nexport type CustomSuperJSONResult = SuperJSONResult;\r\n","import {\r\n  createAttributeHelper,\r\n  DateLevels,\r\n  Filter,\r\n  FilterRelations,\r\n  JaqlDataSourceForDto,\r\n  filterFactory,\r\n  measureFactory,\r\n  JSONArray,\r\n  JSONValue,\r\n  Measure,\r\n  DataType,\r\n} from '@sisense/sdk-data';\r\nimport { NormalizedTable, NormalizedField } from '../types.js';\r\n\r\nconst ATTRIBUTE_PREFIX = 'DM.';\r\n\r\n// Type to represent a function arg\r\nexport type ParsedArg = string | number | ParsedFunctionCall | string[];\r\n\r\n// Type to represent the structure parsed from the JSON\r\nexport type ParsedFunctionCall = {\r\n  function: string;\r\n  args: ParsedArg[];\r\n};\r\n\r\nfunction isParsedFunctionCall(value: JSONValue): value is ParsedFunctionCall {\r\n  return typeof value === 'object' && value !== null && 'function' in value && 'args' in value;\r\n}\r\n\r\nexport function isParsedFunctionCallArray(value: JSONArray): value is ParsedFunctionCall[] {\r\n  return value.every(isParsedFunctionCall);\r\n}\r\n\r\ntype QueryElement = Filter | FilterRelations | Measure;\r\n\r\n// Type guard to check if the argument is a Filter\r\nexport function isFilterElement(arg: QueryElement): arg is Filter {\r\n  return 'attribute' in arg && 'config' in arg;\r\n}\r\n\r\n// Type guard to check if the argument is a FilterRelations\r\nexport function isFilterRelationsElement(arg: QueryElement): arg is FilterRelations {\r\n  return 'left' in arg && 'right' in arg && 'operator' in arg;\r\n}\r\n\r\nexport function isMeasureElement(arg: QueryElement): arg is Measure {\r\n  return !isFilterElement(arg) && !isFilterRelationsElement(arg);\r\n}\r\n\r\nexport function getFactoryFunctionsMap(\r\n  factoryName: string,\r\n  factoryObject: Record<string, any>,\r\n): Record<string, (...args: any[]) => any> {\r\n  const functionsMap: Record<string, (...args: any[]) => any> = {};\r\n  const prefix = factoryName !== '' ? factoryName + '.' : '';\r\n  for (const key in factoryObject) {\r\n    if (typeof factoryObject[`${key}`] === 'function') {\r\n      functionsMap[`${prefix}${key}`] = factoryObject[`${key}`];\r\n    } else if (typeof factoryObject[`${key}`] === 'object') {\r\n      const nestedFunctionsMap = getFactoryFunctionsMap('', factoryObject[`${key}`]);\r\n      for (const nestedKey in nestedFunctionsMap) {\r\n        functionsMap[`${prefix}${key}.${nestedKey}`] = nestedFunctionsMap[`${nestedKey}`];\r\n      }\r\n    }\r\n  }\r\n  return functionsMap;\r\n}\r\n\r\nexport const measureFactoryFunctionsMap = getFactoryFunctionsMap('measureFactory', measureFactory);\r\nexport const filterFactoryFunctionsMap = getFactoryFunctionsMap('filterFactory', filterFactory);\r\n\r\nfunction executeFunction(functionPath: string, args: any[]): QueryElement {\r\n  const parts = functionPath.split('.');\r\n  const factoryName = parts[0];\r\n\r\n  if (factoryName === 'filterFactory' && filterFactoryFunctionsMap[`${functionPath}`]) {\r\n    return (\r\n      filterFactoryFunctionsMap[`${functionPath}`] as (...params: any[]) => Filter | FilterRelations\r\n    )(...args);\r\n  } else if (factoryName === 'measureFactory' && measureFactoryFunctionsMap[`${functionPath}`]) {\r\n    return (measureFactoryFunctionsMap[`${functionPath}`] as (...params: ParsedArg[]) => Measure)(\r\n      ...args,\r\n    );\r\n  }\r\n\r\n  throw new Error(`Function \"${functionPath}\" not found in filterFactory or measureFactory.`);\r\n}\r\n\r\nfunction parseAttributeName(attributeName: string): {\r\n  tableName: string;\r\n  columnName: string;\r\n  level?: string;\r\n} {\r\n  // Parse \"DM.Commerce.Date.Years\" -> tableName: \"Commerce\", columnName: \"Date\", level: \"Years\"\r\n  // Parse \"DM.Brand.Brand\" -> tableName: \"Brand\", columnName: \"Brand\", level: undefined\r\n  const parts = attributeName.split('.');\r\n  if (parts.length < 3 || `${parts[0]}.` !== ATTRIBUTE_PREFIX) {\r\n    throw new Error(\r\n      `Invalid attribute name format: \"${attributeName}\". Expected format: \"${ATTRIBUTE_PREFIX}TableName.ColumnName[.Level]\".`,\r\n    );\r\n  }\r\n\r\n  const tableName = parts[1];\r\n  const columnName = parts[2];\r\n  let level: string | undefined;\r\n\r\n  // extract level if present (4th part)\r\n  if (parts.length === 4) {\r\n    level = parts[3];\r\n  }\r\n\r\n  return { tableName, columnName, level };\r\n}\r\n\r\nfunction findDataFieldAndLevel(\r\n  attributeName: string,\r\n  tables: NormalizedTable[],\r\n): { field: NormalizedField; level?: string } {\r\n  const { tableName, columnName, level } = parseAttributeName(attributeName);\r\n\r\n  const table = tables.find((t) => t.name === tableName);\r\n  if (!table) {\r\n    throw new Error(`Table \"${tableName}\" not found in the data model.`);\r\n  }\r\n\r\n  const field = table.columns.find((column) => column.name === columnName);\r\n  if (!field) {\r\n    throw new Error(`Column \"${columnName}\" not found in table \"${tableName}\".`);\r\n  }\r\n\r\n  if (level) {\r\n    if (field.dataType !== DataType.DATETIME) {\r\n      throw new Error(\r\n        `Invalid date level \"${level}\" in attribute \"${attributeName}\". Column \"${tableName}.${columnName}\" is not a datetime column.`,\r\n      );\r\n    }\r\n    const validLevels = DateLevels.all;\r\n    if (!validLevels.includes(level)) {\r\n      throw new Error(\r\n        `Invalid date level \"${level}\" in attribute \"${attributeName}\". Valid levels are: ${validLevels.join(\r\n          ', ',\r\n        )}.`,\r\n      );\r\n    }\r\n  }\r\n\r\n  return { field, level };\r\n}\r\n\r\n/**\r\n * Validates if a string is likely an attribute based on the actual table schema.\r\n *\r\n * @param str - The string to check\r\n * @param tables - The normalized tables to check against\r\n * @returns True if the string matches known table/column combinations\r\n */\r\nexport function validateLikelyAttribute(\r\n  str: string,\r\n  tables: NormalizedTable[],\r\n):\r\n  | { isLikelyAttribute: true; suggestion: string }\r\n  | { isLikelyAttribute: false; suggestion?: never } {\r\n  if (str.startsWith(ATTRIBUTE_PREFIX)) return { isLikelyAttribute: true, suggestion: str }; // Already valid format\r\n\r\n  const parts = str.split('.');\r\n\r\n  // \"Commerce.Revenue\" - check if table.column exists\r\n  if (parts.length === 2) {\r\n    const [tableName, columnName] = parts;\r\n\r\n    const isLikelyAttribute = tables.some(\r\n      (t) => t.name === tableName && t.columns.some((c) => c.name === columnName),\r\n    );\r\n\r\n    if (isLikelyAttribute) {\r\n      return { isLikelyAttribute, suggestion: `${ATTRIBUTE_PREFIX}${str}` };\r\n    }\r\n\r\n    return { isLikelyAttribute: false };\r\n  }\r\n\r\n  // \"Commerce.Date.Years\" - check if table.column exists and level is valid for datetime columns\r\n  if (parts.length === 3) {\r\n    const [tableName, columnName, level] = parts;\r\n\r\n    const table = tables.find((t) => t.name === tableName);\r\n    if (!table) {\r\n      return { isLikelyAttribute: false };\r\n    }\r\n\r\n    const column = table.columns.find((c) => c.name === columnName);\r\n    if (!column) {\r\n      return { isLikelyAttribute: false };\r\n    }\r\n\r\n    // Level is only valid for datetime columns\r\n    if (column.dataType === DataType.DATETIME) {\r\n      const validLevels = DateLevels.all;\r\n      if (validLevels.includes(level)) {\r\n        return { isLikelyAttribute: true, suggestion: `${ATTRIBUTE_PREFIX}${str}` };\r\n      }\r\n    }\r\n\r\n    return { isLikelyAttribute: false };\r\n  }\r\n\r\n  return { isLikelyAttribute: false };\r\n}\r\n\r\nexport function createAttribute(\r\n  attributeName: string,\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n) {\r\n  const { field, level } = findDataFieldAndLevel(attributeName, tables);\r\n\r\n  return createAttributeHelper({\r\n    expression: field.expression,\r\n    dataType: field.dataType,\r\n    granularity: level,\r\n    format: undefined,\r\n    sort: undefined,\r\n    dataSource,\r\n  });\r\n}\r\n\r\nfunction processArg(arg: ParsedArg, dataSource: JaqlDataSourceForDto, tables: NormalizedTable[]) {\r\n  if (\r\n    typeof arg === 'object' &&\r\n    arg !== null &&\r\n    !Array.isArray(arg) &&\r\n    'function' in arg &&\r\n    'args' in arg\r\n  ) {\r\n    return processNode(arg, dataSource, tables);\r\n  }\r\n\r\n  if (typeof arg === 'string') {\r\n    if (arg.startsWith(ATTRIBUTE_PREFIX)) {\r\n      return createAttribute(arg, dataSource, tables);\r\n    }\r\n\r\n    // Check if string looks like an attribute but is missing DM prefix\r\n    const { isLikelyAttribute, suggestion } = validateLikelyAttribute(arg, tables);\r\n    if (isLikelyAttribute) {\r\n      throw new Error(`Invalid attribute format: \"${arg}\". Did you mean \"${suggestion}\"?`);\r\n    }\r\n  }\r\n\r\n  return arg;\r\n}\r\n\r\n/**\r\n * Recursively processes a parsed JSON object to execute filterFactory and measureFactory functions.\r\n *\r\n * @param parsedObject - The parsed JSON object representing a function call or a nested structure.\r\n * @param dataSource - The data source to use for the query.\r\n * @param tables - The tables to use for the query.\r\n * @returns The result of the executed function or the processed nested structure.\r\n */\r\nexport function processNode(\r\n  parsedObject: ParsedFunctionCall,\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): QueryElement {\r\n  const { function: functionPath, args } = parsedObject;\r\n  // Recursively process arguments that are also function calls\r\n  const processedArgs = args.map((arg) => processArg(arg, dataSource, tables));\r\n  return executeFunction(functionPath, processedArgs);\r\n}\r\n","import {\r\n  Filter,\r\n  FilterRelations,\r\n  isMembersFilter,\r\n  JaqlDataSourceForDto,\r\n  filterFactory,\r\n  isLevelAttribute,\r\n  mergeFiltersOrFilterRelations,\r\n  JSONArray,\r\n} from '@sisense/sdk-data';\r\nimport { NlqTranslationResult, NormalizedTable } from '../types.js';\r\nimport {\r\n  isFilterElement,\r\n  isFilterRelationsElement,\r\n  isParsedFunctionCallArray,\r\n  ParsedFunctionCall,\r\n  processNode,\r\n} from './common.js';\r\n\r\nfunction postProcessFilter(filter: Filter) {\r\n  const { attribute, config } = filter;\r\n  if (isMembersFilter(filter) && isLevelAttribute(attribute)) {\r\n    const { granularity } = attribute;\r\n    // Convert values to ISO 8601 string -- e.g., 2011 to \"2011-01-01\"\r\n    return filterFactory.members(\r\n      attribute,\r\n      filter.members.map((member) => {\r\n        if (granularity === 'Years' && !isNaN(Number(member))) {\r\n          return `${member}-01-01T00:00:00`;\r\n        }\r\n        return member;\r\n      }),\r\n      config,\r\n    );\r\n  }\r\n  return filter;\r\n}\r\n\r\nfunction postProcessFilters(filters: (Filter | FilterRelations)[]): Filter[] | FilterRelations {\r\n  let mergedFilters: Filter[] | FilterRelations = [];\r\n  for (const filter of filters) {\r\n    if (isFilterRelationsElement(filter)) {\r\n      mergedFilters = mergeFiltersOrFilterRelations(filter, mergedFilters);\r\n    } else {\r\n      mergedFilters = mergeFiltersOrFilterRelations([postProcessFilter(filter)], mergedFilters);\r\n    }\r\n  }\r\n  return mergedFilters ?? [];\r\n}\r\n\r\n/**\r\n * Translate an array of JSON objects to filters\r\n *\r\n * @example\r\n * [{\r\n * \"function\": \"filterFactory.logic.or\",\r\n * \"args\": [\r\n * {\r\n * \"function\": \"filterFactory.startsWith\",\r\n *      \"args\": [\"DM.Country.Country\", \"A\"]\r\n *    },\r\n *    {\r\n *      \"function\": \"filterFactory.measureGreaterThan\",\r\n *      \"args\": [\r\n *        {\r\n *          \"function\": \"measureFactory.sum\",\r\n *          \"args\": [\"DM.Commerce.Revenue\", \"Total Revenue\"]\r\n *        },\r\n *        1000\r\n *      ]\r\n *    }\r\n *  ]\r\n * }]\r\n *\r\n * is translated to the following Filter[] or FilterRelations object:\r\n * filterFactory.logic.or([\r\n * filterFactory.startsWith(\"DM.Country.Country\", \"A\"),\r\n * filterFactory.measureGreaterThan(\r\n * measureFactory.sum(\"DM.Commerce.Revenue\", \"Total Revenue\"),\r\n * 1000\r\n * )\r\n * ])\r\n * @param filtersJSON - A JSON array representing the filters\r\n * @param dataSource - The data source to use for the filters\r\n * @param tables - The tables to use for the filters\r\n * @returns A Filter[] or FilterRelations object\r\n */\r\nexport const translateFiltersFromJSONFunctionCall = (\r\n  filtersJSON: ParsedFunctionCall[],\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): NlqTranslationResult<Filter[] | FilterRelations> => {\r\n  const filters: (Filter | FilterRelations)[] = [];\r\n  const errors: string[] = [];\r\n\r\n  // Process each filter and collect errors instead of throwing\r\n  filtersJSON.forEach((filterJSON, index) => {\r\n    try {\r\n      const filter = processNode(filterJSON, dataSource, tables);\r\n      if (!isFilterRelationsElement(filter) && !isFilterElement(filter)) {\r\n        errors.push(`Filter ${index + 1} (${filterJSON.function}): Invalid filter JSON`);\r\n      } else {\r\n        filters.push(filter);\r\n      }\r\n    } catch (error) {\r\n      const errorMsg = error instanceof Error ? error.message : 'Unknown error';\r\n      errors.push(`Filter ${index + 1} (${filterJSON.function}): ${errorMsg}`);\r\n    }\r\n  });\r\n\r\n  if (errors.length > 0) {\r\n    return { success: false, errors };\r\n  }\r\n\r\n  return { success: true, data: postProcessFilters(filters) };\r\n};\r\n\r\nexport const translateFiltersJSON = (\r\n  filtersJSON: JSONArray,\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): NlqTranslationResult<Filter[] | FilterRelations> => {\r\n  if (!filtersJSON) {\r\n    return { success: true, data: [] };\r\n  }\r\n\r\n  if (!isParsedFunctionCallArray(filtersJSON)) {\r\n    return {\r\n      success: false,\r\n      errors: [\r\n        'Invalid filters JSON. Expected an array of function calls with \"function\" and \"args\" properties.',\r\n      ],\r\n    };\r\n  }\r\n\r\n  return translateFiltersFromJSONFunctionCall(filtersJSON, dataSource, tables);\r\n};\r\n\r\nexport const translateHighlightsFromJSONFunctionCall = (\r\n  highlightsJSON: ParsedFunctionCall[],\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): NlqTranslationResult<Filter[]> => {\r\n  const results: Filter[] = [];\r\n  const errors: string[] = [];\r\n\r\n  // Process each highlight and collect errors instead of throwing\r\n  highlightsJSON.forEach((filterJSON, index) => {\r\n    try {\r\n      const filter = processNode(filterJSON, dataSource, tables);\r\n      if (!isFilterElement(filter)) {\r\n        errors.push(`Highlight ${index + 1} (${filterJSON.function}): Invalid filter JSON`);\r\n      } else {\r\n        results.push(postProcessFilter(filter));\r\n      }\r\n    } catch (error) {\r\n      const errorMsg = error instanceof Error ? error.message : 'Unknown error';\r\n      errors.push(`Highlight ${index + 1} (${filterJSON.function}): ${errorMsg}`);\r\n    }\r\n  });\r\n\r\n  return errors.length > 0 ? { success: false, errors } : { success: true, data: results };\r\n};\r\n\r\nexport const translateHighlightsJSON = (\r\n  highlightsJSON: JSONArray,\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): NlqTranslationResult<Filter[]> => {\r\n  if (!highlightsJSON) {\r\n    return { success: true, data: [] };\r\n  }\r\n\r\n  if (!isParsedFunctionCallArray(highlightsJSON)) {\r\n    return {\r\n      success: false,\r\n      errors: [\r\n        'Invalid highlights JSON. Expected an array of function calls with \"function\" and \"args\" properties.',\r\n      ],\r\n    };\r\n  }\r\n\r\n  return translateHighlightsFromJSONFunctionCall(highlightsJSON, dataSource, tables);\r\n};\r\n","import { Attribute, JaqlDataSourceForDto, JSONArray } from '@sisense/sdk-data';\r\nimport { NlqTranslationResult, NormalizedTable } from '../types.js';\r\nimport { createAttribute } from './common.js';\r\n\r\nfunction isStringArray(value: JSONArray): value is string[] {\r\n  return value.every((item) => typeof item === 'string');\r\n}\r\n\r\nexport const translateDimensionsJSON = (\r\n  dimensionsJSON: JSONArray,\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): NlqTranslationResult<Attribute[]> => {\r\n  if (!dimensionsJSON) {\r\n    return { success: true, data: [] };\r\n  }\r\n\r\n  if (!isStringArray(dimensionsJSON)) {\r\n    return {\r\n      success: false,\r\n      errors: ['Invalid dimensions JSON. Expected an array of strings.'],\r\n    };\r\n  }\r\n\r\n  const results: Attribute[] = [];\r\n  const errors: string[] = [];\r\n\r\n  // Process each dimension and collect errors instead of throwing\r\n  dimensionsJSON.forEach((dimension, index) => {\r\n    try {\r\n      const attribute = createAttribute(dimension, dataSource, tables);\r\n      results.push(attribute);\r\n    } catch (error) {\r\n      const errorMsg = error instanceof Error ? error.message : 'Unknown error';\r\n      errors.push(`Dimension ${index + 1} (\"${dimension}\"): ${errorMsg}`);\r\n    }\r\n  });\r\n\r\n  return errors.length > 0 ? { success: false, errors } : { success: true, data: results };\r\n};\r\n","import { JaqlDataSourceForDto, JSONArray, Measure } from '@sisense/sdk-data';\r\nimport { NlqTranslationResult, NormalizedTable } from '../types.js';\r\nimport {\r\n  isMeasureElement,\r\n  isParsedFunctionCallArray,\r\n  ParsedFunctionCall,\r\n  processNode,\r\n} from './common.js';\r\n\r\n/**\r\n * Translate an array of JSON objects to measures\r\n *\r\n * @example\r\n * [\r\n *   {\r\n *     \"function\": \"measureFactory.sum\",\r\n *     \"args\": [\"DM.Commerce.Revenue\", \"Total Revenue\"]\r\n *   },\r\n *   {\r\n *     \"function\": \"measureFactory.sum\",\r\n *     \"args\": [\"DM.Commerce.Cost\", \"Total Cost\"]\r\n *   }\r\n * ]\r\n *\r\n * is translated to the following Measure[] object:\r\n * [\r\n *   measureFactory.sum(\"DM.Commerce.Revenue\", \"Total Revenue\"),\r\n *   measureFactory.sum(\"DM.Commerce.Cost\", \"Total Cost\")\r\n * ]\r\n * @param measuresJSON - A JSON array representing the measures\r\n * @param dataSource - The data source to use for the measures\r\n * @param tables - The tables to use for the measures\r\n * @returns A Measure[] object\r\n */\r\nexport const translateMeasuresFromJSONFunctionCall = (\r\n  measuresJSON: ParsedFunctionCall[],\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): NlqTranslationResult<Measure[]> => {\r\n  const results: Measure[] = [];\r\n  const errors: string[] = [];\r\n\r\n  // Process each measure and collect errors instead of throwing\r\n  measuresJSON.forEach((measureJSON, index) => {\r\n    try {\r\n      const measure = processNode(measureJSON, dataSource, tables);\r\n      if (!isMeasureElement(measure)) {\r\n        errors.push(`Measure ${index + 1} (${measureJSON.function}): Invalid measure JSON`);\r\n      } else {\r\n        results.push(measure);\r\n      }\r\n    } catch (error) {\r\n      const errorMsg = error instanceof Error ? error.message : 'Unknown error';\r\n      errors.push(`Measure ${index + 1} (${measureJSON.function}): ${errorMsg}`);\r\n    }\r\n  });\r\n\r\n  return errors.length > 0 ? { success: false, errors } : { success: true, data: results };\r\n};\r\n\r\nexport const translateMeasuresJSON = (\r\n  measuresJSON: JSONArray,\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): NlqTranslationResult<Measure[]> => {\r\n  if (!measuresJSON) {\r\n    return { success: true, data: [] };\r\n  }\r\n\r\n  if (!isParsedFunctionCallArray(measuresJSON)) {\r\n    return {\r\n      success: false,\r\n      errors: [\r\n        'Invalid measures JSON. Expected an array of function calls with \"function\" and \"args\" properties.',\r\n      ],\r\n    };\r\n  }\r\n\r\n  return translateMeasuresFromJSONFunctionCall(measuresJSON, dataSource, tables);\r\n};\r\n","import { convertDataSource, JaqlDataSourceForDto } from '@sisense/sdk-data';\r\nimport { NormalizedTable, NlqResponseJSON, NlqTranslationResult } from '../types.js';\r\nimport { BaseQueryParams } from '@/query-execution';\r\nimport { translateFiltersJSON, translateHighlightsJSON } from './translate-filters.js';\r\nimport { translateDimensionsJSON } from './translate-dimensions.js';\r\nimport { translateMeasuresJSON } from './translate-measures.js';\r\n\r\n/**\r\n * Collects errors from multiple translation operations and returns either all successful results or all errors.\r\n *\r\n * @param translations - Object mapping context names to translation functions that return NlqTranslationResult<T>\r\n * @returns Either successful results for all translations or collected errors from failed ones\r\n */\r\nfunction collectTranslationResults(\r\n  translations: Record<string, () => NlqTranslationResult<unknown>>,\r\n): NlqTranslationResult<Record<string, unknown>> {\r\n  const results: Record<string, unknown> = {};\r\n  const allErrors: string[] = [];\r\n\r\n  for (const context in translations) {\r\n    const translationFn = translations[`${context}`];\r\n    const result = translationFn();\r\n    if (result.success) {\r\n      results[`${context}`] = result.data;\r\n    } else {\r\n      // Prefix each error with context and add to collection\r\n      const contextualErrors = result.errors.map((error) => `[${context}] ${error}`);\r\n      allErrors.push(...contextualErrors);\r\n    }\r\n  }\r\n\r\n  if (allErrors.length > 0) {\r\n    return { success: false, errors: allErrors };\r\n  }\r\n\r\n  return { success: true, data: results };\r\n}\r\n/**\r\n * Translate Query JSON generated by the new NLQ API to BaseQueryParams object.\r\n *\r\n * @example\r\n * {\r\n      dimensions: ['DM.Category.Category', 'DM.Brand.Brand'],\r\n      measures: [\r\n        {\r\n          function: 'measureFactory.sum',\r\n          args: ['DM.Commerce.Revenue', 'Total Revenue'],\r\n        },\r\n        {\r\n          function: 'measureFactory.sum',\r\n          args: ['DM.Commerce.Cost', 'Total Cost'],\r\n        },\r\n      ],\r\n      filters: [\r\n        {\r\n          function: 'filterFactory.members',\r\n          args: ['DM.Commerce.Date.Years', ['2024-01-01T00:00:00']],\r\n        },\r\n        {\r\n          function: 'filterFactory.topRanking',\r\n          args: [\r\n            'DM.Brand.Brand',\r\n            {\r\n              function: 'measureFactory.sum',\r\n              args: ['DM.Commerce.Revenue', 'Total Revenue'],\r\n            },\r\n            5,\r\n          ],\r\n        },\r\n      ],\r\n    }\r\n *\r\n * is translated to the following Query object:\r\n * {\r\n  \"dataSource\": {\r\n    \"address\": \"LocalHost\",\r\n    \"id\": \"localhost_aSampleIAAaECommerce\",\r\n    \"title\": \"Sample ECommerce\",\r\n    \"type\": \"elasticube\",\r\n  },\r\n  \"dimensions\": [\r\n    {\r\n      \"__serializable\": \"DimensionalAttribute\",\r\n      \"composeCode\": \"DM.Category.Category\",\r\n      \"dataSource\": {\r\n        \"address\": \"LocalHost\",\r\n        \"id\": \"localhost_aSampleIAAaECommerce\",\r\n        \"live\": false,\r\n        \"title\": \"Sample ECommerce\",\r\n      },\r\n      \"description\": \"\",\r\n      \"expression\": \"[Category.Category]\",\r\n      \"name\": \"Category\",\r\n      \"type\": \"text-attribute\",\r\n    },\r\n    {\r\n      \"__serializable\": \"DimensionalAttribute\",\r\n      \"composeCode\": \"DM.Brand.Brand\",\r\n      \"dataSource\": {\r\n        \"address\": \"LocalHost\",\r\n        \"id\": \"localhost_aSampleIAAaECommerce\",\r\n        \"live\": false,\r\n        \"title\": \"Sample ECommerce\",\r\n      },\r\n      \"description\": \"\",\r\n      \"expression\": \"[Brand.Brand]\",\r\n      \"name\": \"Brand\",\r\n      \"type\": \"text-attribute\",\r\n    },\r\n  ],\r\n  \"filters\": [\r\n    {\r\n      \"__serializable\": \"RankingFilter\",\r\n      \"_name\": \"filter\",\r\n      \"attribute\": {\r\n        \"__serializable\": \"DimensionalAttribute\",\r\n        \"composeCode\": \"DM.Brand.Brand\",\r\n        \"dataSource\": {\r\n          \"address\": \"LocalHost\",\r\n          \"id\": \"localhost_aSampleIAAaECommerce\",\r\n          \"live\": false,\r\n          \"title\": \"Sample ECommerce\",\r\n        },\r\n        \"description\": \"\",\r\n        \"expression\": \"[Brand.Brand]\",\r\n        \"name\": \"Brand\",\r\n        \"type\": \"text-attribute\",\r\n      },\r\n      \"composeCode\": \"filterFactory.topRanking(DM.Brand.Brand, measureFactory.sum(DM.Commerce.Revenue, 'Total Revenue'), 5)\",\r\n      \"config\": {\r\n        \"disabled\": false,\r\n        \"locked\": false,\r\n      },\r\n      \"count\": 5,\r\n      \"description\": \"\",\r\n      \"filterType\": \"ranking\",\r\n      \"isScope\": true,\r\n      \"measure\": {\r\n        \"__serializable\": \"DimensionalBaseMeasure\",\r\n        \"aggregation\": \"sum\",\r\n        \"attribute\": {\r\n          \"__serializable\": \"DimensionalAttribute\",\r\n          \"composeCode\": \"DM.Commerce.Revenue\",\r\n          \"dataSource\": {\r\n            \"address\": \"LocalHost\",\r\n            \"id\": \"localhost_aSampleIAAaECommerce\",\r\n            \"live\": false,\r\n            \"title\": \"Sample ECommerce\",\r\n          },\r\n          \"description\": \"\",\r\n          \"expression\": \"[Commerce.Revenue]\",\r\n          \"name\": \"Revenue\",\r\n          \"type\": \"numeric-attribute\",\r\n        },\r\n        \"composeCode\": \"measureFactory.sum(DM.Commerce.Revenue, 'Total Revenue')\",\r\n        \"dataSource\": undefined,\r\n        \"description\": \"\",\r\n        \"name\": \"Total Revenue\",\r\n        \"sort\": 0,\r\n        \"type\": \"basemeasure\",\r\n      },\r\n      \"operator\": \"top\",\r\n      \"type\": \"filter\",\r\n    },\r\n    {\r\n      \"__serializable\": \"MembersFilter\",\r\n      \"_name\": \"filter\",\r\n      \"attribute\": {\r\n        \"__serializable\": \"DimensionalLevelAttribute\",\r\n        \"composeCode\": \"DM.Commerce.Date.Years\",\r\n        \"dataSource\": {\r\n          \"address\": \"LocalHost\",\r\n          \"id\": \"localhost_aSampleIAAaECommerce\",\r\n          \"live\": false,\r\n          \"title\": \"Sample ECommerce\",\r\n        },\r\n        \"description\": \"\",\r\n        \"expression\": \"[Commerce.Date]\",\r\n        \"format\": \"yyyy\",\r\n        \"granularity\": \"Years\",\r\n        \"name\": \"Date\",\r\n        \"type\": \"datelevel\",\r\n      },\r\n      \"composeCode\": \"filterFactory.members(DM.Commerce.Date.Years, ['2024-01-01T00:00:00'], { disabled: false, locked: false, excludeMembers: false, enableMultiSelection: true, deactivatedMembers: [] })\",\r\n      \"config\": {\r\n        \"deactivatedMembers\": [],\r\n        \"disabled\": false,\r\n        \"enableMultiSelection\": true,\r\n        \"excludeMembers\": false,\r\n        \"locked\": false,\r\n      },\r\n      \"description\": \"\",\r\n      \"filterType\": \"members\",\r\n      \"isScope\": true,\r\n      \"members\": [\r\n        \"2024-01-01T00:00:00\",\r\n      ],\r\n      \"type\": \"filter\",\r\n    },\r\n  ],\r\n  \"measures\": [\r\n    {\r\n      \"__serializable\": \"DimensionalBaseMeasure\",\r\n      \"aggregation\": \"sum\",\r\n      \"attribute\": {\r\n        \"__serializable\": \"DimensionalAttribute\",\r\n        \"composeCode\": \"DM.Commerce.Revenue\",\r\n        \"dataSource\": {\r\n          \"address\": \"LocalHost\",\r\n          \"id\": \"localhost_aSampleIAAaECommerce\",\r\n          \"live\": false,\r\n          \"title\": \"Sample ECommerce\",\r\n        },\r\n        \"description\": \"\",\r\n        \"expression\": \"[Commerce.Revenue]\",\r\n        \"name\": \"Revenue\",\r\n        \"type\": \"numeric-attribute\",\r\n      },\r\n      \"composeCode\": \"measureFactory.sum(DM.Commerce.Revenue, 'Total Revenue')\",\r\n      \"dataSource\": undefined,\r\n      \"description\": \"\",\r\n      \"name\": \"Total Revenue\",\r\n      \"sort\": 0,\r\n      \"type\": \"basemeasure\",\r\n    },\r\n    {\r\n      \"__serializable\": \"DimensionalBaseMeasure\",\r\n      \"aggregation\": \"sum\",\r\n      \"attribute\": {\r\n        \"__serializable\": \"DimensionalAttribute\",\r\n        \"composeCode\": \"DM.Commerce.Cost\",\r\n        \"dataSource\": {\r\n          \"address\": \"LocalHost\",\r\n          \"id\": \"localhost_aSampleIAAaECommerce\",\r\n          \"live\": false,\r\n          \"title\": \"Sample ECommerce\",\r\n        },\r\n        \"description\": \"\",\r\n        \"expression\": \"[Commerce.Cost]\",\r\n        \"name\": \"Cost\",\r\n        \"type\": \"numeric-attribute\",\r\n      },\r\n      \"composeCode\": \"measureFactory.sum(DM.Commerce.Cost, 'Total Cost')\",\r\n      \"dataSource\": undefined,\r\n      \"description\": \"\",\r\n      \"name\": \"Total Cost\",\r\n      \"sort\": 0,\r\n      \"type\": \"basemeasure\",\r\n    },\r\n  ],\r\n}\r\n * @param queryJSON - A JSON string representing the query generated by the new NLQ API\r\n * @param dataSource - The data source to use for the query\r\n * @param tables - The tables to use for the query\r\n * @returns BaseQueryParams object\r\n * @internal\r\n */\r\nexport const translateQueryJSON = (\r\n  queryJSON: NlqResponseJSON,\r\n  dataSource: JaqlDataSourceForDto,\r\n  tables: NormalizedTable[],\r\n): BaseQueryParams => {\r\n  // Collect all translation operations\r\n  const translations: Record<string, () => NlqTranslationResult<unknown>> = {\r\n    dimensions: () => translateDimensionsJSON(queryJSON.dimensions || [], dataSource, tables),\r\n    measures: () => translateMeasuresJSON(queryJSON.measures || [], dataSource, tables),\r\n    filters: () => translateFiltersJSON(queryJSON.filters || [], dataSource, tables),\r\n  };\r\n\r\n  // Add highlights translation if highlights exist\r\n  if (queryJSON.highlights) {\r\n    translations.highlights = () =>\r\n      translateHighlightsJSON(queryJSON.highlights || [], dataSource, tables);\r\n  }\r\n\r\n  // Execute all translations and collect errors\r\n  const translationResult = collectTranslationResults(translations);\r\n\r\n  if (!translationResult.success) {\r\n    const errorCount = translationResult.errors.length;\r\n    const errorMessage = `Translation failed with ${errorCount} error(s):\\n${translationResult.errors.join(\r\n      '\\n',\r\n    )}`;\r\n    throw new Error(errorMessage);\r\n  }\r\n\r\n  return {\r\n    dataSource: convertDataSource(dataSource),\r\n    ...translationResult.data,\r\n  };\r\n};\r\n","import { getFilterListAndRelationsJaql, type DataSource } from '@sisense/sdk-data';\r\nimport { getJaqlQueryPayload } from '@sisense/sdk-query-client';\r\nimport type { JaqlQueryPayload } from '@sisense/sdk-query-client';\r\nimport { BaseQueryParams } from '@/query-execution/types.js';\r\nimport { prepareQueryParams, type QueryDescription } from '@/query/execute-query.js';\r\n\r\n/**\r\n * Converts BaseQueryParams to QueryDescription format\r\n *\r\n * @param queryParams - The query parameters to convert\r\n * @returns QueryDescription\r\n */\r\nfunction baseQueryParamsToQueryDescription(queryParams: BaseQueryParams): QueryDescription {\r\n  // Extract filters and filter relations from BaseQueryParams\r\n  // BaseQueryParams.filters can be Filter[] | FilterRelations, but QueryDescription.filters is Filter[]\r\n  const { filters: pureFilters, relations: filterRelations } = getFilterListAndRelationsJaql(\r\n    queryParams.filters || [],\r\n  );\r\n\r\n  return {\r\n    dataSource: queryParams.dataSource,\r\n    dimensions: queryParams.dimensions,\r\n    measures: queryParams.measures,\r\n    filters: pureFilters,\r\n    filterRelations,\r\n    highlights: queryParams.highlights,\r\n    // No count/offset/ungroup - these are execution concerns, not translation concerns\r\n  };\r\n}\r\n\r\n/**\r\n * Converts BaseQueryParams to JAQL payload\r\n *\r\n * This is a pure TypeScript function that works in Node.js environments\r\n * and converts query parameters to JAQL without requiring React hooks or browser APIs.\r\n *\r\n * Reuses the existing query preparation logic from executeQuery to avoid duplication.\r\n *\r\n * @param queryParams - The base query parameters from NLQ translation\r\n * @param defaultDataSource - Default data source if not specified in queryParams\r\n * @param shouldSkipHighlightsWithoutAttributes - Whether to skip highlights without corresponding attributes\r\n * @returns The JAQL query payload\r\n * @internal\r\n */\r\nexport function translateQueryToJaql(\r\n  queryParams: BaseQueryParams,\r\n  defaultDataSource?: DataSource,\r\n  shouldSkipHighlightsWithoutAttributes = false,\r\n): JaqlQueryPayload {\r\n  // Convert BaseQueryParams to QueryDescription format\r\n  const queryDescription = baseQueryParamsToQueryDescription(queryParams);\r\n\r\n  // Reuse existing logic from executeQuery to prepare internal query description\r\n  const internalQueryDescription = prepareQueryParams(queryDescription, defaultDataSource);\r\n\r\n  // Generate JAQL payload\r\n  return getJaqlQueryPayload(internalQueryDescription, shouldSkipHighlightsWithoutAttributes);\r\n}\r\n"],"names":["DoubleIndexedKV","key","value","Registry","generateIdentifier","identifier","ClassRegistry","c","options","valuesOfObj","record","values","find","predicate","valuesNotNever","i","forEach","run","includes","arr","findArr","CustomTransformerRegistry","transformer","v","name","getType","payload","isUndefined","isNull","isPlainObject","isEmptyObject","isArray","isString","isNumber","isBoolean","isRegExp","isMap","isSet","isSymbol","isDate","isError","isNaNValue","isPrimitive","isBigint","isInfinite","isTypedArray","isURL","escapeKey","stringifyPath","path","parsePath","string","result","segment","char","lastSegment","simpleTransformation","isApplicable","annotation","transform","untransform","simpleRules","superJson","baseError","prop","e","regex","body","flags","compositeTransformation","symbolRule","s","_","a","constructorToName","obj","ctor","typedArrayRule","isInstanceOfRegisteredClass","potentialClass","classRule","clazz","allowedProps","__spreadValues","customRule","compositeRules","transformValue","applicableCompositeRule","rule","applicableSimpleRule","simpleRulesByAnnotation","untransformValue","json","type","transformation","getNthKey","n","keys","validatePath","getDeep","object","row","keyOfRow","setDeep","mapper","parent","index","lastKey","oldValue","newValue","keyToRow","newKey","traverse","tree","walker","origin","subtree","nodeValue","children","child","applyValueAnnotations","plain","annotations","applyReferentialEqualityAnnotations","apply","identicalPaths","identicalObjectPath","root","other","identicalPath","isDeep","addIdentity","identities","existingSet","generateReferentialEqualityAnnotations","identitites","dedupe","rootEqualityPaths","paths","b","representativePath","objectsInThisPath","seenObjects","primitive","seen","transformed","transformationResult","_a","transformedValue","innerAnnotations","recursiveResult","prototype","assignProp","carry","newVal","originalObject","includeNonenumerable","propType","copy","target","item","props","symbols","val","SuperJSON","output","res","__spreadProps","equalityAnnotations","meta","normalizeSort","undefined","Sort","None","deserializeJaqlElement","JaqlElement","metadataItem","deserializeDimensionalAttribute","DimensionalAttribute","expression","description","sort","dataSource","composeCode","deserializeDimensionalLevelAttribute","DimensionalLevelAttribute","granularity","format","deserializeAttribute","__serializable","className","deserializeDimensionalDimension","DimensionalDimension","attributes","map","dimensions","deserializeDimension","defaultAttribute","deserializeDimensionalDateDimension","DimensionalDateDimension","deserializeDimensionalBaseMeasure","DimensionalBaseMeasure","attribute","aggregation","deserializeDimensionalCalculatedMeasure","deserializedContext","Object","fromEntries","entries","context","DimensionalCalculatedMeasure","deserializeDimensionalMeasureTemplate","DimensionalMeasureTemplate","deserializeMeasure","deserializeFilter","MembersFilter","members","config","backgroundFilter","LogicalAttributeFilter","filters","f","operator","CascadingFilter","_filters","ExcludeFilter","filter","input","MeasureFilter","measure","operatorA","valueA","operatorB","valueB","RankingFilter","count","NumericFilter","TextFilter","DateRangeFilter","RelativeDateFilter","offset","anchor","CustomFilter","jaqlExpression","registerCustom","isJaqlElement","serialize","deserialize","isDimensionalAttribute","isDimensionalLevelAttribute","isDimensionalDimension","isDimensionalDateDimension","isDimensionalBaseMeasure","isDimensionalCalculatedMeasure","isDimensionalMeasureTemplate","isMembersFilter","isLogicalAttributeFilter","isCascadingFilter","isExcludeFilter","isMeasureFilter","isRankingFilter","isNumericFilter","isTextFilter","isDateRangeFilter","isRelativeDateFilter","isCustomFilter","CustomSuperJSON","ATTRIBUTE_PREFIX","isParsedFunctionCall","isParsedFunctionCallArray","every","isFilterElement","arg","isFilterRelationsElement","isMeasureElement","getFactoryFunctionsMap","factoryName","factoryObject","functionsMap","prefix","nestedFunctionsMap","nestedKey","measureFactoryFunctionsMap","measureFactory","filterFactoryFunctionsMap","filterFactory","executeFunction","functionPath","args","split","Error","parseAttributeName","attributeName","parts","length","tableName","columnName","level","findDataFieldAndLevel","tables","table","t","field","columns","column","dataType","DataType","DATETIME","validLevels","DateLevels","all","join","validateLikelyAttribute","str","startsWith","isLikelyAttribute","suggestion","some","createAttribute","createAttributeHelper","processArg","Array","processNode","parsedObject","function","processedArgs","postProcessFilter","isLevelAttribute","member","isNaN","Number","postProcessFilters","mergedFilters","mergeFiltersOrFilterRelations","translateFiltersFromJSONFunctionCall","filtersJSON","errors","filterJSON","push","error","errorMsg","message","success","data","translateFiltersJSON","translateHighlightsFromJSONFunctionCall","highlightsJSON","results","translateHighlightsJSON","isStringArray","translateDimensionsJSON","dimensionsJSON","dimension","translateMeasuresFromJSONFunctionCall","measuresJSON","measureJSON","translateMeasuresJSON","collectTranslationResults","translations","allErrors","translationFn","contextualErrors","translateQueryJSON","queryJSON","measures","highlights","translationResult","errorMessage","convertDataSource","baseQueryParamsToQueryDescription","queryParams","pureFilters","relations","filterRelations","getFilterListAndRelationsJaql","translateQueryToJaql","defaultDataSource","shouldSkipHighlightsWithoutAttributes","queryDescription","internalQueryDescription","prepareQueryParams","getJaqlQueryPayload"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12]}