{"version":3,"file":"dimensions-DCxjxuyH.cjs","sources":["../../sdk-data/dist/dimensional-model/dimensions/dimensions.js"],"sourcesContent":["/* eslint-disable sonarjs/no-duplicate-string */\r\nimport { parseExpression } from '../../utils.js';\r\nimport { DimensionalAttribute, DimensionalLevelAttribute, jaqlSimpleColumnType, normalizeAttributeName, } from '../attributes.js';\r\nimport { DimensionalElement, normalizeName } from '../base.js';\r\nimport { DATA_MODEL_MODULE_NAME } from '../consts.js';\r\nimport { DateLevels, MetadataTypes, Sort, } from '../types.js';\r\n/**\r\n * Represents a Dimension in a Dimensional Model\r\n *\r\n * @internal\r\n */\r\nexport class DimensionalDimension extends DimensionalElement {\r\n    constructor(name, expression, attributes, dimensions, type, desc, sort, dataSource, composeCode, defaultAttribute) {\r\n        super(name, type || MetadataTypes.Dimension, desc, dataSource, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DimensionalDimension';\r\n        this._dimensions = [];\r\n        this._attributes = [];\r\n        this._sort = Sort.None;\r\n        // if composeCode is not explicitly set by the caller, extract it from expression\r\n        if (!composeCode && expression) {\r\n            const { table, column } = parseExpression(expression);\r\n            this.composeCode = normalizeAttributeName(table, column, '', DATA_MODEL_MODULE_NAME);\r\n        }\r\n        this._sort = sort || Sort.None;\r\n        this._expression = expression;\r\n        this.setDimensions(dimensions || []);\r\n        this.setAttributes(attributes);\r\n        if (defaultAttribute) {\r\n            this.defaultAttribute = defaultAttribute;\r\n        }\r\n    }\r\n    static parseType(type) {\r\n        switch (type) {\r\n            case 'datetime':\r\n            case MetadataTypes.DateDimension:\r\n                return MetadataTypes.DateDimension;\r\n            case 'text':\r\n            case MetadataTypes.TextDimension:\r\n                return MetadataTypes.TextDimension;\r\n            case 'numeric':\r\n            case MetadataTypes.NumericDimension:\r\n                return MetadataTypes.NumericDimension;\r\n        }\r\n        return MetadataTypes.TextDimension;\r\n    }\r\n    getAttachedName(name, expression) {\r\n        let result = name;\r\n        // if exists fallback to expression\r\n        const normalizedName = normalizeName(name);\r\n        if (normalizedName === 'id' ||\r\n            normalizedName === 'name' ||\r\n            Object.getOwnPropertyDescriptor(this, normalizedName) !== undefined ||\r\n            this[normalizedName] !== undefined) {\r\n            result = expression;\r\n        }\r\n        return result;\r\n    }\r\n    setDimensions(dimensions) {\r\n        this._dimensions = dimensions;\r\n        for (let i = 0; i < dimensions.length; i++) {\r\n            const n = this.getAttachedName(dimensions[i].name, dimensions[i].attributes[0].expression);\r\n            this[normalizeName(n)] = dimensions[i];\r\n            if (n != dimensions[i].name) {\r\n                dimensions[i].name = n;\r\n            }\r\n        }\r\n    }\r\n    setAttributes(attributes) {\r\n        this._attributes = attributes || [];\r\n        for (let i = 0; i < attributes.length; i++) {\r\n            const n = this.getAttachedName(attributes[i].name, attributes[i].expression);\r\n            this[normalizeName(n)] = attributes[i];\r\n            if (attributes[i].name != n) {\r\n                attributes[i].name = n;\r\n            }\r\n            // attaching to dimension\r\n            //this.attributes[i].dimension = this;\r\n        }\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return this._expression;\r\n    }\r\n    /**\r\n     * Gets the child attributes\r\n     */\r\n    get attributes() {\r\n        return this._attributes;\r\n    }\r\n    /**\r\n     * Gets the child dimensions\r\n     */\r\n    get dimensions() {\r\n        return this._dimensions;\r\n    }\r\n    get expression() {\r\n        return this._expression;\r\n    }\r\n    /**\r\n     * Gets the sort definition of this instance\r\n     *\r\n     * @returns The Sort definition of this instance\r\n     */\r\n    getSort() {\r\n        return this._sort;\r\n    }\r\n    /**\r\n     * Gets a sorted {@link Dimension} with the given definition\r\n     *\r\n     * @param sort - Sort definition\r\n     * @returns An instance representing the sorted {@link Dimension} of this instance\r\n     */\r\n    sort(sort) {\r\n        return new DimensionalDimension(this.name, this.expression, this.attributes, this.dimensions, this.type, this.description, sort, this.dataSource, this.composeCode, this.defaultAttribute);\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.expression = this.expression;\r\n        if (this.getSort() !== undefined) {\r\n            result.sort = this.getSort();\r\n        }\r\n        result.attributes = this._attributes.map((att) => att.serialize());\r\n        result.dimensions = this._dimensions.map((dim) => dim.serialize());\r\n        if (this.defaultAttribute) {\r\n            result.defaultAttribute = this.defaultAttribute.serialize();\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets the JAQL representation of this instance\r\n     *\r\n     * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element\r\n     */\r\n    jaql(nested) {\r\n        if (this.defaultAttribute) {\r\n            return this.defaultAttribute.jaql(nested);\r\n        }\r\n        if (this.dimensions.length > 0) {\r\n            return this.dimensions[0].jaql(nested);\r\n        }\r\n        const result = {\r\n            jaql: {\r\n                title: this.name,\r\n                dim: this.expression,\r\n                datatype: jaqlSimpleColumnType(this.type),\r\n            },\r\n        };\r\n        if (this._sort != Sort.None) {\r\n            result.jaql.sort = this._sort == Sort.Ascending ? 'asc' : 'desc';\r\n        }\r\n        return nested === true ? result.jaql : result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const isDimensionalDimension = (v) => {\r\n    return v && v.__serializable === 'DimensionalDimension';\r\n};\r\n/**\r\n * Represents a Date Dimension in a Dimensional Model\r\n *\r\n * @internal\r\n */\r\nexport class DimensionalDateDimension extends DimensionalDimension {\r\n    constructor(name, expression, desc, sort, dataSource, composeCode) {\r\n        super(name, expression, [], [], MetadataTypes.DateDimension, desc, sort, dataSource, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DimensionalDateDimension';\r\n        this.defaultLevel = DateLevels.Years;\r\n        this.Years = new DimensionalLevelAttribute(DateLevels.Years, expression, DateLevels.Years, 'yyyy', desc, sort, dataSource);\r\n        this.Quarters = new DimensionalLevelAttribute(DateLevels.Quarters, expression, DateLevels.Quarters, 'Q yyyy', desc, sort, dataSource);\r\n        this.Months = new DimensionalLevelAttribute(DateLevels.Months, expression, DateLevels.Months, 'yyyy-MM', desc, sort, dataSource);\r\n        this.Weeks = new DimensionalLevelAttribute(DateLevels.Weeks, expression, DateLevels.Weeks, 'ww yyyy', desc, sort, dataSource);\r\n        this.Days = new DimensionalLevelAttribute(DateLevels.Days, expression, DateLevels.Days, 'yyyy-MM-dd', desc, sort, dataSource);\r\n        this.Hours = new DimensionalLevelAttribute(DateLevels.Hours, expression, DateLevels.Hours, 'yyyy-MM-dd HH:mm', desc, sort, dataSource);\r\n        this.MinutesRoundTo30 = new DimensionalLevelAttribute(DateLevels.MinutesRoundTo30, expression, DateLevels.MinutesRoundTo30, 'yyyy-MM-dd HH:mm', desc, sort, dataSource);\r\n        this.MinutesRoundTo15 = new DimensionalLevelAttribute(DateLevels.MinutesRoundTo15, expression, DateLevels.MinutesRoundTo15, 'yyyy-MM-dd HH:mm', desc, sort, dataSource);\r\n        this.Minutes = new DimensionalLevelAttribute(DateLevels.Minutes, expression, DateLevels.Minutes, 'yyyy-MM-dd HH:mm', desc, sort, dataSource);\r\n        this.Seconds = new DimensionalLevelAttribute(DateLevels.Seconds, expression, DateLevels.Seconds, 'yyyy-MM-dd HH:mm:ss', desc, sort, dataSource);\r\n        this.AggHours = new DimensionalLevelAttribute(DateLevels.AggHours, expression, DateLevels.AggHours, 'HH:mm', desc, sort, dataSource);\r\n        this.AggMinutesRoundTo30 = new DimensionalLevelAttribute(DateLevels.AggMinutesRoundTo30, expression, DateLevels.AggMinutesRoundTo30, 'HH:mm', desc, sort, dataSource);\r\n        this.AggMinutesRoundTo15 = new DimensionalLevelAttribute(DateLevels.AggMinutesRoundTo15, expression, DateLevels.AggMinutesRoundTo15, 'HH:mm', desc, sort, dataSource);\r\n        this.AggMinutesRoundTo1 = new DimensionalLevelAttribute(DateLevels.AggMinutesRoundTo1, expression, DateLevels.AggMinutesRoundTo1, 'HH:mm', desc, sort, dataSource);\r\n        this.setAttributes([\r\n            this.Years,\r\n            this.Quarters,\r\n            this.Months,\r\n            this.Weeks,\r\n            this.Days,\r\n            this.Hours,\r\n            this.MinutesRoundTo30,\r\n            this.MinutesRoundTo15,\r\n            this.Minutes,\r\n            this.Seconds,\r\n            this.AggHours,\r\n            this.AggMinutesRoundTo30,\r\n            this.AggMinutesRoundTo15,\r\n            this.AggMinutesRoundTo1,\r\n        ]);\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return this.expression;\r\n    }\r\n    setDimensions() {\r\n        /* */\r\n    }\r\n    setAttributes(attributes) {\r\n        this._attributes = attributes;\r\n    }\r\n    /**\r\n     * Gets the sort definition of this instance\r\n     *\r\n     * @returns The Sort definition of this instance\r\n     */\r\n    getSort() {\r\n        return this._sort;\r\n    }\r\n    /**\r\n     * Gets a sorted {@link Dimension} with the given definition\r\n     *\r\n     * @param sort - Sort definition\r\n     * @returns An instance representing the sorted {@link Dimension} of this instance\r\n     */\r\n    sort(sort) {\r\n        return new DimensionalDateDimension(this.name, this.expression, this.description, sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        return super.serialize();\r\n    }\r\n    /**\r\n     * Gets the JAQL representation of this instance\r\n     *\r\n     * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element\r\n     */\r\n    jaql(nested) {\r\n        const result = this[this.defaultLevel].jaql();\r\n        result.jaql.title = this.name;\r\n        return nested ? result.jaql : result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const isDimensionalDateDimension = (v) => {\r\n    return v && v.__serializable === 'DimensionalDateDimension';\r\n};\r\n/**\r\n * Creates a new Dimension instance from the given JSON object.\r\n *\r\n * This function is used in the generated data model code to create dimensions for an input data source.\r\n *\r\n * See also functions {@link createDateDimension} and {@link createAttribute}.\r\n *\r\n * @param json - JSON object representing the Dimension\r\n * @returns A new Dimension instance\r\n * @group Data Model Utilities\r\n */\r\nexport function createDimension(json) {\r\n    const name = json.name || json.title;\r\n    const description = json.desc || json.description;\r\n    const expression = json.expression || json.dim;\r\n    const type = DimensionalDimension.parseType(json.dimtype || json.type);\r\n    const sort = json.sort;\r\n    const dataSource = json.dataSource;\r\n    // date dimension\r\n    if (type == MetadataTypes.DateDimension) {\r\n        return new DimensionalDateDimension(name, expression, description, sort, dataSource);\r\n    }\r\n    // attributes\r\n    const atts = Object.getOwnPropertyNames(json)\r\n        .map((p) => json[p])\r\n        .filter((v) => MetadataTypes.isAttribute(v === null || v === void 0 ? void 0 : v.type));\r\n    if (atts.length == 0) {\r\n        if (json.attributes) {\r\n            let att;\r\n            for (let i = 0; i < json.attributes.length; i++) {\r\n                att = json.attributes[i];\r\n                atts.push(new DimensionalAttribute(att.name, att.expression, att.type, att.description, att.sort, att.dataSource));\r\n            }\r\n        }\r\n        // default attribute\r\n        else if (expression) {\r\n            atts.push(new DimensionalAttribute(name, expression, type, description, sort, dataSource));\r\n        }\r\n    }\r\n    // nested dimensions\r\n    const dims = Object.getOwnPropertyNames(json)\r\n        .map((p) => json[p])\r\n        .filter((v) => MetadataTypes.isDimension(v === null || v === void 0 ? void 0 : v.type));\r\n    if (dims.length == 0 && json.dimensions) {\r\n        for (let i = 0; i < json.dimensions.length; i++) {\r\n            dims.push(createDimension(json.dimensions[i]));\r\n        }\r\n    }\r\n    const d = new DimensionalDimension(name, expression, atts, dims, type, description, sort, dataSource);\r\n    if (json.defaultAttribute) {\r\n        d.defaultAttribute = atts.find((a) => a.name === json.defaultAttribute);\r\n    }\r\n    return d;\r\n}\r\n/**\r\n * Creates a new Date Dimension instance from the given JSON object.\r\n *\r\n * This function is used in the generated data model code to create date dimensions for an input data source.\r\n *\r\n * See also functions {@link createDimension} and {@link createAttribute}.\r\n *\r\n * @param json - JSON object representing the Date Dimension\r\n * @returns A new Date Dimension instance\r\n * @group Data Model Utilities\r\n */\r\nexport function createDateDimension(json) {\r\n    const name = json.name || json.title;\r\n    const expression = json.expression || json.dim;\r\n    const description = json.desc || json.description;\r\n    const sort = json.sort;\r\n    const dataSource = json.dataSource;\r\n    return new DimensionalDateDimension(name, expression, description, sort, dataSource);\r\n}\r\n//# sourceMappingURL=dimensions.js.map"],"names":["DimensionalDimension","DimensionalElement","name","expression","attributes","dimensions","type","desc","sort","dataSource","composeCode","defaultAttribute","MetadataTypes","Sort","table","column","parseExpression","normalizeAttributeName","DATA_MODEL_MODULE_NAME","result","normalizedName","normalizeName","i","att","dim","nested","jaqlSimpleColumnType","isDimensionalDimension","v","DimensionalDateDimension","DateLevels","DimensionalLevelAttribute","isDimensionalDateDimension","createDimension","json","description","atts","p","DimensionalAttribute","dims","d","a","createDateDimension"],"mappings":"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"}