{"version":3,"sources":["jsdelivr-header.js","/npm/markdown-it-attrs@4.3.1/index.js"],"names":[],"mappings":"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","file":"/npm/markdown-it-attrs@4.3.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/markdown-it-attrs@4.3.1/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","'use strict';\n\nconst patternsConfig = require('./patterns.js');\n\n/**\n * @typedef {import('markdown-it')} MarkdownIt\n *\n * @typedef {import('markdown-it/lib/rules_core/state_core.mjs').default} StateCore\n *\n * @typedef {import('markdown-it/lib/token.mjs').default} Token\n *\n * @typedef {import('markdown-it/lib/token.mjs').Nesting} Nesting\n *\n * @typedef {Object} Options\n * @property {!string} leftDelimiter left delimiter, default is `{`(left curly bracket)\n * @property {!string} rightDelimiter right delimiter, default is `}`(right curly bracket)\n * @property {AllowedAttribute[]} allowedAttributes empty means no limit\n *\n * @typedef {string|RegExp} AllowedAttribute rule of allowed attribute\n *\n * @typedef {[string, string]} AttributePair\n *\n * @typedef {[number, number]} SourceLineInfo\n *\n * @typedef {Object} CurlyAttrsPattern\n * @property {string} name\n * @property {DetectingRule[]} tests\n * @property {(tokens: Token[], i: number, j?: number) => void} transform\n *\n * @typedef {Object} MatchedResult\n * @property {boolean} match true means matched\n * @property {number?} j postion index number of Array<{@link Token}>\n *\n * @typedef {(str: string) => boolean} DetectingStrRule\n *\n * @typedef {Object} DetectingRule rule for testing {@link Token}'s properties\n * @property {number=} shift offset index number of Array<{@link Token}>\n * @property {number=} position fixed index number of Array<{@link Token}>\n * @property {(string | DetectingStrRule)=} type\n * @property {(string | DetectingStrRule)=} tag\n * @property {DetectingRule[]=} children\n * @property {(string | DetectingStrRule)=} content\n * @property {(string | DetectingStrRule)=} markup\n * @property {(string | DetectingStrRule)=} info\n * @property {Nesting=} nesting\n * @property {number=} level\n * @property {boolean=} block\n * @property {boolean=} hidden\n * @property {AttributePair[]=} attrs\n * @property {SourceLineInfo[]=} map\n * @property {any=} meta\n */\n\n/** @type {Options} */\nconst defaultOptions = {\n  leftDelimiter: '{',\n  rightDelimiter: '}',\n  allowedAttributes: []\n};\n\n/**\n * @param {MarkdownIt} md\n * @param {Options=} options_\n */\nmodule.exports = function attributes(md, options_) {\n  let options = Object.assign({}, defaultOptions);\n  options = Object.assign(options, options_);\n\n  const patterns = patternsConfig(options);\n\n  /**\n   * @param {StateCore} state\n   */\n  function curlyAttrs(state) {\n    const tokens = state.tokens;\n\n    for (let i = 0; i < tokens.length; i++) {\n      for (let p = 0; p < patterns.length; p++) {\n        const pattern = patterns[p];\n        let j = null; // position of child with offset 0\n        const match = pattern.tests.every(t => {\n          const res = test(tokens, i, t);\n          if (res.j !== null) { j = res.j; }\n          return res.match;\n        });\n        if (match) {\n          try {\n            pattern.transform(tokens, i, j);\n            if (pattern.name === 'inline attributes' || pattern.name === 'inline nesting 0') {\n              // retry, may be several inline attributes\n              p--;\n            }\n          } catch (error) {\n            // eslint-disable-next-line no-console\n            console.error(`markdown-it-attrs: Error in pattern '${pattern.name}': ${error.message}`);\n            console.error(error.stack);\n          }\n        }\n      }\n    }\n  }\n\n  md.core.ruler.before('linkify', 'curly_attributes', curlyAttrs);\n};\n\n/**\n * Test if t matches token stream.\n *\n * @param {Token[]} tokens\n * @param {number} i\n * @param {DetectingRule} t\n * @returns {MatchedResult}\n */\nfunction test(tokens, i, t) {\n  /** @type {MatchedResult} */\n  const res = {\n    match: false,\n    j: null  // position of child\n  };\n\n  const ii = t.shift !== undefined\n    ? i + t.shift\n    : t.position;\n\n  if (t.shift !== undefined && ii < 0) {\n    // we should never shift to negative indexes (rolling around to back of array)\n    return res;\n  }\n\n  const token = get(tokens, ii);  // supports negative ii\n\n\n  if (token === undefined) { return res; }\n\n  for (const key of Object.keys(t)) {\n    if (key === 'shift' || key === 'position') { continue; }\n\n    if (token[key] === undefined) { return res; }\n\n    if (key === 'children' && isArrayOfObjects(t.children)) {\n      if (token.children.length === 0) {\n        return res;\n      }\n      let match;\n      /** @type {DetectingRule[]} */\n      const childTests = t.children;\n      /** @type {Token[]} */\n      const children = token.children;\n      if (childTests.every(tt => tt.position !== undefined)) {\n        // positions instead of shifts, do not loop all children\n        match = childTests.every(tt => test(children, tt.position, tt).match);\n        if (match) {\n          // we may need position of child in transform\n          const j = last(childTests).position;\n          res.j = j >= 0 ? j : children.length + j;\n        }\n      } else {\n        for (let j = 0; j < children.length; j++) {\n          match = childTests.every(tt => test(children, j, tt).match);\n          if (match) {\n            res.j = j;\n            // all tests true, continue with next key of pattern t\n            break;\n          }\n        }\n      }\n\n      if (match === false) { return res; }\n\n      continue;\n    }\n\n    switch (typeof t[key]) {\n    case 'boolean':\n    case 'number':\n    case 'string':\n      if (token[key] !== t[key]) { return res; }\n      break;\n    case 'function':\n      if (!t[key](token[key])) { return res; }\n      break;\n    case 'object':\n      if (isArrayOfFunctions(t[key])) {\n        const r = t[key].every(tt => tt(token[key]));\n        if (r === false) { return res; }\n        break;\n      }\n    // fall through for objects !== arrays of functions\n    default:\n      throw new Error(`Unknown type of pattern test (key: ${key}). Test should be of type boolean, number, string, function or array of functions.`);\n    }\n  }\n\n  // no tests returned false -> all tests returns true\n  res.match = true;\n  return res;\n}\n\nfunction isArrayOfObjects(arr) {\n  return Array.isArray(arr) && arr.length && arr.every(i => typeof i === 'object');\n}\n\nfunction isArrayOfFunctions(arr) {\n  return Array.isArray(arr) && arr.length && arr.every(i => typeof i === 'function');\n}\n\n/**\n * Get n item of array. Supports negative n, where -1 is last\n * element in array.\n * @param {Token[]} arr\n * @param {number} n\n * @returns {Token=}\n */\nfunction get(arr, n) {\n  return n >= 0 ? arr[n] : arr[arr.length + n];\n}\n\n/**\n * get last element of array, safe - returns {} if not found\n * @param {DetectingRule[]} arr\n * @returns {DetectingRule}\n */\nfunction last(arr) {\n  return arr.slice(-1)[0] || {};\n}\n"]}