{"version":3,"sources":["jsdelivr-header.js","/npm/json-placeholder-replacer@2.1.2/dist/library.js"],"names":[],"mappings":"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","file":"/npm/json-placeholder-replacer@2.1.2/dist/library.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/json-placeholder-replacer@2.1.2/dist/library.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsonPlaceholderReplacer = void 0;\nconst defaultDelimiterTags = [\n    {\n        begin: \"{{\",\n        end: \"}}\",\n    },\n    {\n        begin: \"<<\",\n        end: \">>\",\n    },\n];\nconst defaultSeparator = \":\";\nconst defaultNullishValues = [];\nclass JsonPlaceholderReplacer {\n    constructor(options) {\n        this.variablesMap = [];\n        this.stringifyCache = new WeakMap();\n        this.escapeRegExp = (text) => text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n        this.configuration = this.initializeConfigurations(options);\n        this.serializedNullishValues = new Set(this.configuration.nullishValues.map((v) => JSON.stringify(v)));\n        const delimiterTagsRegexes = this.configuration.placeholders\n            .map((delimiterTag) => `^${delimiterTag.escapedBeginning}[^${delimiterTag.escapedEnding}]+${delimiterTag.escapedEnding}$`)\n            .join(\"|\");\n        this.delimiterTagsRegex = new RegExp(delimiterTagsRegexes);\n    }\n    addVariableMap(variableMap) {\n        if (typeof variableMap === \"string\") {\n            try {\n                this.variablesMap.unshift(JSON.parse(variableMap));\n            }\n            catch (error) {\n                throw new Error(`Invalid JSON string provided to addVariableMap: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n            }\n        }\n        else {\n            this.variablesMap.unshift(variableMap);\n        }\n        return this;\n    }\n    setVariableMap(...variablesMap) {\n        this.variablesMap.length = 0;\n        variablesMap.forEach((variableMap) => this.addVariableMap(variableMap));\n        return this;\n    }\n    replace(json) {\n        return this.replaceChildren(json, this.variablesMap, new WeakSet());\n    }\n    replaceWith(json, ...variablesMap) {\n        return this.replaceChildren(json, variablesMap.reverse(), new WeakSet());\n    }\n    initializeConfigurations(options) {\n        var _a;\n        const tags = (options === null || options === void 0 ? void 0 : options.delimiterTags) || defaultDelimiterTags;\n        const delimiterTags = tags.map((tag) => {\n            const escapedBeginning = this.escapeRegExp(tag.begin);\n            const escapedEnding = this.escapeRegExp(tag.end);\n            return {\n                begin: tag.begin,\n                end: tag.end,\n                escapedBeginning,\n                escapedEnding,\n                regex: new RegExp(`(${escapedBeginning}[^${escapedEnding}]+${escapedEnding})`, \"g\"),\n            };\n        });\n        let defaultValueSeparator = defaultSeparator;\n        if ((options === null || options === void 0 ? void 0 : options.defaultValueSeparator) !== undefined) {\n            defaultValueSeparator = options.defaultValueSeparator;\n        }\n        let nullishValues = defaultNullishValues;\n        if ((_a = options === null || options === void 0 ? void 0 : options.nullishValues) === null || _a === void 0 ? void 0 : _a.length) {\n            nullishValues = options.nullishValues;\n        }\n        return {\n            defaultValueSeparator,\n            placeholders: delimiterTags,\n            nullishValues,\n        };\n    }\n    replaceChildren(node, variablesMap, visited) {\n        if (typeof node === \"object\" && node !== null) {\n            if (visited.has(node)) {\n                return node;\n            }\n            visited.add(node);\n            for (const key in node) {\n                const attribute = node[key];\n                if (typeof attribute === \"object\" && attribute !== null) {\n                    node[key] = this.replaceChildren(attribute, variablesMap, visited);\n                }\n                else if (attribute === null) {\n                    node[key] = null;\n                }\n                else if (attribute !== undefined) {\n                    node[key] = this.replaceValue(attribute, variablesMap);\n                }\n            }\n            return node;\n        }\n        else if (node !== undefined) {\n            return this.replaceValue(node, variablesMap);\n        }\n        return node;\n    }\n    replaceValue(node, variablesMap) {\n        const attributeAsString = node.toString();\n        const placeHolderIsInsideStringContext = !this.delimiterTagsRegex.test(node);\n        // Create the replacer function once per call\n        const replacerFn = this.replacer(placeHolderIsInsideStringContext, variablesMap);\n        const output = this.configuration.placeholders.reduce((acc, delimiterTag) => {\n            return acc.replace(delimiterTag.regex, replacerFn(delimiterTag));\n        }, attributeAsString);\n        if (output === attributeAsString) {\n            return node;\n        }\n        // Only try JSON.parse if the output looks like JSON and is not inside string context\n        if (!placeHolderIsInsideStringContext) {\n            try {\n                return JSON.parse(output);\n            }\n            catch (exc) {\n                // If JSON parsing fails, return the output as-is\n                return output;\n            }\n        }\n        return output;\n    }\n    replacer(placeHolderIsInsideStringContext, variablesMap) {\n        return (delimiterTag) => (placeHolder) => {\n            const { tag, defaultValue } = this.parseTag(placeHolder, delimiterTag);\n            const mapCheckResult = this.checkInEveryMap(tag, variablesMap);\n            if (mapCheckResult === undefined) {\n                if (defaultValue !== undefined) {\n                    return defaultValue;\n                }\n                return placeHolder;\n            }\n            if (!placeHolderIsInsideStringContext) {\n                // For non-string context, we'll return JSON.stringify and let replaceValue handle the parsing\n                return this.safeStringify(mapCheckResult);\n            }\n            if (typeof mapCheckResult === \"object\" && mapCheckResult !== null) {\n                return this.safeStringify(mapCheckResult);\n            }\n            return String(mapCheckResult);\n        };\n    }\n    safeStringify(value) {\n        if (typeof value === \"object\" && value !== null) {\n            if (this.stringifyCache.has(value)) {\n                return this.stringifyCache.get(value);\n            }\n            const stringified = JSON.stringify(value);\n            this.stringifyCache.set(value, stringified);\n            return stringified;\n        }\n        return JSON.stringify(value);\n    }\n    parseTag(placeHolder, delimiterTag) {\n        const path = placeHolder.substring(delimiterTag.begin.length, placeHolder.length - delimiterTag.begin.length);\n        let tag = path;\n        let defaultValue;\n        const defaultValueSeparatorIndex = path.indexOf(this.configuration.defaultValueSeparator);\n        if (defaultValueSeparatorIndex > 0) {\n            tag = path.substring(0, defaultValueSeparatorIndex);\n            defaultValue = path.substring(defaultValueSeparatorIndex +\n                this.configuration.defaultValueSeparator.length);\n        }\n        return { tag, defaultValue };\n    }\n    checkInEveryMap(path, variablesMap) {\n        for (const map of variablesMap) {\n            let value = this.navigateThroughMap(map, path);\n            if (value !== undefined && !this.isNullishValue(value)) {\n                return value;\n            }\n        }\n        return undefined;\n    }\n    isNullishValue(value) {\n        if (this.serializedNullishValues.size === 0) {\n            return false;\n        }\n        const stringified = this.safeStringify(value);\n        return this.serializedNullishValues.has(stringified);\n    }\n    navigateThroughMap(map, path) {\n        if (map === undefined) {\n            return;\n        }\n        const shortCircuit = map[path];\n        if (shortCircuit !== undefined) {\n            return shortCircuit;\n        }\n        const keys = path.split(\".\");\n        const key = keys[0];\n        keys.shift();\n        return this.navigateThroughMap(map[key], keys.join(\".\"));\n    }\n}\nexports.JsonPlaceholderReplacer = JsonPlaceholderReplacer;\n"]}