{"version":3,"sources":["jsdelivr-header.js","/npm/@esri/arcgis-html-sanitizer@4.1.0/dist/node/index.js"],"names":[],"mappings":"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","file":"/npm/@esri/arcgis-html-sanitizer@4.1.0/dist/node/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/@esri/arcgis-html-sanitizer@4.1.0/dist/node/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*!\n * @esri/arcgis-html-sanitizer - v4.1.0 - Tue Dec 03 2024 09:13:28 GMT-0500 (Eastern Standard Time)\n * Copyright (c) 2024 - Environmental Systems Research Institute, Inc.\n * Apache-2.0\n * \n * js-xss\n * Copyright (c) 2012-2018 Zongmin Lei(雷宗民) <leizongmin@gmail.com>\n * http://ucdok.com\n * MIT License, see https://github.com/leizongmin/js-xss/blob/master/LICENSE for details\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar xss = require('xss');\n\nfunction _interopNamespaceDefault(e) {\n    var n = Object.create(null);\n    if (e) {\n        Object.keys(e).forEach(function (k) {\n            if (k !== 'default') {\n                var d = Object.getOwnPropertyDescriptor(e, k);\n                Object.defineProperty(n, k, d.get ? d : {\n                    enumerable: true,\n                    get: function () { return e[k]; }\n                });\n            }\n        });\n    }\n    n.default = e;\n    return Object.freeze(n);\n}\n\nvar xss__namespace = /*#__PURE__*/_interopNamespaceDefault(xss);\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\n\n/**\n * Determine if the value is a plain object.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n */\nvar isPlainObject = function (value) {\n    if (typeof value !== \"object\" || value === null) {\n        return false;\n    }\n    if (Object.prototype.toString.call(value) !== \"[object Object]\") {\n        return false;\n    }\n    var proto = Object.getPrototypeOf(value);\n    if (proto === null) {\n        return true;\n    }\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(value) === proto;\n};\n\n/**\n * The Sanitizer Class\n *\n * @export\n * @class Sanitizer\n */\nvar Sanitizer = /** @class */ (function () {\n    function Sanitizer(filterOptions, extendDefaults) {\n        var _this = this;\n        // Supported HTML Spec: https://doc.arcgis.com/en/arcgis-online/reference/supported-html.htm\n        this.arcgisWhiteList = {\n            a: [\"href\", \"style\", \"target\"],\n            abbr: [\"title\"],\n            article: [\"style\"],\n            aside: [\"style\"],\n            audio: [\"autoplay\", \"controls\", \"loop\", \"muted\", \"preload\"],\n            b: [],\n            blockquote: [\"style\"],\n            br: [],\n            code: [\"style\"],\n            dd: [\"style\"],\n            del: [\"style\"],\n            details: [\"open\", \"style\"],\n            div: [\"align\", \"aria-hidden\", \"aria-label\", \"style\"],\n            dl: [\"style\"],\n            dt: [\"style\"],\n            em: [],\n            figcaption: [\"style\"],\n            figure: [\"style\"],\n            font: [\"color\", \"face\", \"size\", \"style\"],\n            footer: [\"style\"],\n            h1: [\"style\"],\n            h2: [\"style\"],\n            h3: [\"style\"],\n            h4: [\"style\"],\n            h5: [\"style\"],\n            h6: [\"style\"],\n            header: [\"style\"],\n            hr: [],\n            i: [],\n            img: [\"alt\", \"border\", \"height\", \"src\", \"style\", \"width\"],\n            li: [],\n            main: [\"style\"],\n            mark: [\"style\"],\n            nav: [\"style\"],\n            ol: [],\n            p: [\"style\"],\n            pre: [\"style\"],\n            section: [\"style\"],\n            source: [\"media\", \"src\", \"type\"],\n            span: [\"aria-hidden\", \"aria-label\", \"style\"],\n            strong: [],\n            sub: [\"style\"],\n            summary: [\"style\"],\n            sup: [\"style\"],\n            table: [\"border\", \"cellpadding\", \"cellspacing\", \"height\", \"style\", \"width\"],\n            tbody: [],\n            tr: [\"align\", \"height\", \"style\", \"valign\"],\n            td: [\n                \"align\",\n                \"colspan\",\n                \"height\",\n                \"nowrap\",\n                \"rowspan\",\n                \"style\",\n                \"valign\",\n                \"width\",\n            ],\n            th: [\n                \"align\",\n                \"colspan\",\n                \"height\",\n                \"nowrap\",\n                \"rowspan\",\n                \"style\",\n                \"valign\",\n                \"width\",\n            ],\n            time: [\"style\"],\n            u: [],\n            ul: [],\n            video: [\n                \"autoplay\",\n                \"controls\",\n                \"height\",\n                \"loop\",\n                \"muted\",\n                \"poster\",\n                \"preload\",\n                \"width\",\n            ],\n        };\n        this.arcgisCSSWhiteList = __assign(__assign({}, xss__namespace.getDefaultCSSWhiteList()), { \"align-items\": true, \"align-self\": true, \"flex\": true, \"flex-basis\": true, \"flex-direction\": true, \"flex-flow\": true, \"flex-grow\": true, \"flex-shrink\": true, \"flex-wrap\": true, \"float\": true, \"gap\": true, \"grid\": true, \"grid-area\": true, \"grid-auto-columns\": true, \"grid-auto-flow\": true, \"grid-auto-rows\": true, \"grid-column\": true, \"grid-column-end\": true, \"grid-column-start\": true, \"grid-row\": true, \"grid-row-end\": true, \"grid-row-start\": true, \"grid-template\": true, \"grid-template-areas\": true, \"grid-template-columns\": true, \"grid-template-rows\": true, \"justify-content\": true, \"justify-items\": true, \"justify-self\": true, \"line-height\": true, \"overflow\": true });\n        this.allowedProtocols = [\n            \"http\",\n            \"https\",\n            \"mailto\",\n            \"iform\",\n            \"tel\",\n            \"flow\",\n            \"lfmobile\",\n            \"arcgis-navigator\",\n            \"arcgis-appstudio-player\",\n            \"arcgis-survey123\",\n            \"arcgis-collector\",\n            \"arcgis-workforce\",\n            \"arcgis-explorer\",\n            \"arcgis-trek2there\",\n            \"arcgis-quickcapture\",\n            \"mspbi\",\n            \"comgooglemaps\",\n            \"pdfefile\",\n            \"pdfehttp\",\n            \"pdfehttps\",\n            \"boxapp\",\n            \"boxemm\",\n            \"awb\",\n            \"awbs\",\n            \"gropen\",\n            \"radarscope\",\n        ];\n        this.arcgisFilterOptions = {\n            allowCommentTag: true,\n            safeAttrValue: function (tag, name, value, cssFilter) {\n                // Take over safe attribute filtering for `a` `href`, `img` `src`,\n                // and `source` `src` attributes, otherwise pass onto the\n                // default `XSS.safeAttrValue` method.\n                if ((tag === \"a\" && name === \"href\") ||\n                    ((tag === \"img\" || tag === \"source\") && name === \"src\")) {\n                    return _this.sanitizeUrl(value);\n                }\n                return xss__namespace.safeAttrValue(tag, name, value, cssFilter);\n            },\n        };\n        this._entityMap = {\n            \"&\": \"&#x38;\",\n            \"<\": \"&#x3C;\",\n            \">\": \"&#x3E;\",\n            '\"': \"&#x22;\",\n            \"'\": \"&#x27;\",\n            \"/\": \"&#x2F;\",\n        };\n        var xssFilterOptions;\n        if (filterOptions && !extendDefaults) {\n            // Override the defaults\n            xssFilterOptions = filterOptions;\n        }\n        else if (filterOptions && extendDefaults) {\n            // Extend the defaults\n            xssFilterOptions = Object.create(this.arcgisFilterOptions);\n            xssFilterOptions.css = { whiteList: this.arcgisCSSWhiteList };\n            Object.keys(filterOptions).forEach(function (key) {\n                if (key === \"whiteList\") {\n                    // Extend the whitelist by concatenating arrays\n                    xssFilterOptions.whiteList = _this._extendObjectOfArrays([\n                        _this.arcgisWhiteList,\n                        filterOptions.whiteList || {},\n                    ]);\n                }\n                else if (key === \"css\") {\n                    var cssExtensions_1 = filterOptions.css.whiteList;\n                    if (cssExtensions_1 != null && filterOptions.css instanceof Object) {\n                        Object.keys(cssExtensions_1).forEach(function (attr) {\n                            return (xssFilterOptions.css.whiteList[attr] =\n                                cssExtensions_1[attr]);\n                        });\n                    }\n                }\n                else {\n                    xssFilterOptions[key] = filterOptions[key];\n                }\n            });\n        }\n        else {\n            // Only use the defaults\n            xssFilterOptions = Object.create(this.arcgisFilterOptions);\n            xssFilterOptions.whiteList = this.arcgisWhiteList;\n            xssFilterOptions.css = { whiteList: this.arcgisCSSWhiteList };\n        }\n        this.xssFilterOptions = xssFilterOptions;\n        // Make this readable to tests\n        this._xssFilter = new xss__namespace.FilterXSS(xssFilterOptions);\n    }\n    /**\n     * Sanitizes value to remove invalid HTML tags.\n     *\n     * Note: If the value passed does not contain a valid JSON data type (String,\n     * Number, JSON Object, Array, Boolean, or null), the value will be nullified.\n     *\n     * @param {any} value The value to sanitize.\n     * @returns {any} The sanitized value.\n     * @memberof Sanitizer\n     */\n    Sanitizer.prototype.sanitize = function (value, options) {\n        if (options === void 0) { options = {}; }\n        switch (typeof value) {\n            case \"number\":\n                if (isNaN(value) || !isFinite(value)) {\n                    return null;\n                }\n                return value;\n            case \"boolean\":\n                return value;\n            case \"string\":\n                return this._xssFilter.process(value);\n            case \"object\":\n                return this._iterateOverObject(value, options);\n            default:\n                if (options.allowUndefined && typeof value === \"undefined\") {\n                    return;\n                }\n                return null;\n        }\n    };\n    /**\n     * Sanitizes a URL string following the allowed protocols and sanitization rules.\n     *\n     * @param {string} value The URL to sanitize.\n     * @param {{ isProtocolRequired: boolean }} options Configuration options for URL checking.\n     * @returns {string} The sanitized URL if it's valid, or an empty string if the URL is invalid.\n     */\n    Sanitizer.prototype.sanitizeUrl = function (value, options) {\n        var _a = (options !== null && options !== void 0 ? options : {}).isProtocolRequired, isProtocolRequired = _a === void 0 ? true : _a;\n        var protocol = this._trim(value.substring(0, value.indexOf(\":\")));\n        var isRootUrl = value === \"/\";\n        var isUrlFragment = /^#/.test(value);\n        var isValidProtocol = protocol && this.allowedProtocols.indexOf(protocol.toLowerCase()) > -1;\n        if (isRootUrl || isUrlFragment || isValidProtocol) {\n            return xss__namespace.escapeAttrValue(value);\n        }\n        if (!protocol && !isProtocolRequired) {\n            return xss__namespace.escapeAttrValue(\"https://\".concat(value));\n        }\n        return \"\";\n    };\n    /**\n     * Sanitizes an HTML attribute value.\n     *\n     * @param {string} tag The tagname of the HTML element.\n     * @param {string} attribute The attribute name of the HTML element.\n     * @param {string} value The raw value to be used for the HTML attribute value.\n     * @param {XSS.ICSSFilter} [cssFilter] The CSS filter to be used.\n     * @returns {string} The sanitized attribute value.\n     * @memberof Sanitizer\n     */\n    Sanitizer.prototype.sanitizeHTMLAttribute = function (tag, attribute, value, cssFilter) {\n        // use the custom safeAttrValue function if provided\n        if (typeof this.xssFilterOptions.safeAttrValue === \"function\") {\n            return this.xssFilterOptions.safeAttrValue(tag, attribute, value, \n            // @ts-expect-error safeAttrValue does handle undefined cssFilter\n            cssFilter);\n        }\n        // otherwise use the default\n        // @ts-ignore safeAttrValue does handle undefined cssFilter\n        return xss__namespace.safeAttrValue(tag, attribute, value, cssFilter);\n    };\n    /**\n     * Checks if a value only contains valid HTML.\n     *\n     * @param {any} value The value to validate.\n     * @returns {boolean}\n     * @memberof Sanitizer\n     */\n    Sanitizer.prototype.validate = function (value, options) {\n        if (options === void 0) { options = {}; }\n        var sanitized = this.sanitize(value, options);\n        return {\n            isValid: value === sanitized,\n            sanitized: sanitized,\n        };\n    };\n    /**\n     * Encodes the following characters, `& < > \\\" ' /` to their hexadecimal HTML entity code.\n     * Example: \"&middot;\" => \"&#x38;middot;\"\n     *\n     * @param {string} value The value to encode.\n     * @returns {string} The encoded string value.\n     * @memberof Sanitizer\n     */\n    Sanitizer.prototype.encodeHTML = function (value) {\n        var _this = this;\n        return String(value).replace(/[&<>\"'\\/]/g, function (s) {\n            return _this._entityMap[s];\n        });\n    };\n    /**\n     * Encodes all non-alphanumeric ASCII characters to their hexadecimal HTML entity codes.\n     * Example: \"alert(document.cookie)\" => \"alert&#x28;document&#x2e;cookie&#x29;\"\n     *\n     * @param {string} value The value to encode.\n     * @returns {string} The encoded string value.\n     * @memberof Sanitizer\n     */\n    Sanitizer.prototype.encodeAttrValue = function (value) {\n        var alphanumericRE = /^[a-zA-Z0-9]$/;\n        return String(value).replace(/[\\x00-\\xFF]/g, function (c, idx) {\n            return !alphanumericRE.test(c)\n                ? \"&#x\".concat(Number(value.charCodeAt(idx)).toString(16), \";\")\n                : c;\n        });\n    };\n    /**\n     * Extends an object of arrays by by concatenating arrays of the same object\n     * keys. If the if the previous key's value is not an array, the next key's\n     * value will replace the previous key. This method is used for extending the\n     * whiteList in the XSS filter options.\n     *\n     * @private\n     * @param {Array<{}>} objects An array of objects.\n     * @returns {{}} The extended object.\n     * @memberof Sanitizer\n     */\n    Sanitizer.prototype._extendObjectOfArrays = function (objects) {\n        var finalObj = {};\n        objects.forEach(function (obj) {\n            Object.keys(obj).forEach(function (key) {\n                if (Array.isArray(obj[key]) && Array.isArray(finalObj[key])) {\n                    finalObj[key] = finalObj[key].concat(obj[key]);\n                }\n                else {\n                    finalObj[key] = obj[key];\n                }\n            });\n        });\n        return finalObj;\n    };\n    /**\n     * Iterate over a plain object or array to deeply sanitize each value.\n     *\n     * @private\n     * @param {object} obj The object to iterate over.\n     * @returns {(object | null)} The sanitized object.\n     * @memberof Sanitizer\n     */\n    Sanitizer.prototype._iterateOverObject = function (obj, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        try {\n            var hasChanged_1 = false;\n            var changedObj = void 0;\n            if (Array.isArray(obj)) {\n                changedObj = obj.reduce(function (prev, value) {\n                    var validation = _this.validate(value, options);\n                    if (validation.isValid) {\n                        return prev.concat([value]);\n                    }\n                    else {\n                        hasChanged_1 = true;\n                        return prev.concat([validation.sanitized]);\n                    }\n                }, []);\n            }\n            else if (!isPlainObject(obj)) {\n                if (options.allowUndefined && typeof obj === \"undefined\") {\n                    return;\n                }\n                return null;\n            }\n            else {\n                var keys = Object.keys(obj);\n                changedObj = keys.reduce(function (prev, key) {\n                    var value = obj[key];\n                    var validation = _this.validate(value, options);\n                    if (validation.isValid) {\n                        prev[key] = value;\n                    }\n                    else {\n                        hasChanged_1 = true;\n                        prev[key] = validation.sanitized;\n                    }\n                    return prev;\n                }, {});\n            }\n            if (hasChanged_1) {\n                return changedObj;\n            }\n            return obj;\n        }\n        catch (err) {\n            return null;\n        }\n    };\n    /**\n     * Trim whitespace from the start and ends of a string.\n     * @param {string} val The string to trim.\n     * @returns {string} The trimmed string.\n     */\n    Sanitizer.prototype._trim = function (val) {\n        // @ts-ignore This is used by Jest,\n        // but TypeScript errors since it assumes `trim` is always available.\n        return String.prototype.trim\n            ? val.trim()\n            : val.replace(/(^\\s*)|(\\s*$)/g, \"\");\n    };\n    return Sanitizer;\n}());\n\nexports.Sanitizer = Sanitizer;\nexports.default = Sanitizer;\n"]}