{
  "version": 3,
  "sources": ["../../index.mjs", "../../lib/simplify.js", "../../lib/resolve_strings.js"],
  "sourcesContent": ["export { resolveStrings } from './lib/resolve_strings.js';\nexport { simplify } from './lib/simplify.js';\n", "// External\nimport diacritics from 'diacritics';\n\n// remove spaces, punctuation, diacritics\n// for punction see https://stackoverflow.com/a/21224179\nexport function simplify(str) {\n  if (typeof str !== 'string') return '';\n\n  return diacritics.remove(\n    str\n      .replace(/&/g, 'and')\n      .replace(/(\u0130|i\u0307)/ig, 'i')   // see name-suggestion-index#5017, #8261\n      .replace(/[\\s\\-=_!\"#%'*{},.\\/:;?\\(\\)\\[\\]@\\\\$\\^*+<>\u00AB\u00BB~`\u2019\\u00a1\\u00a7\\u00b6\\u00b7\\u00bf\\u037e\\u0387\\u055a-\\u055f\\u0589\\u05c0\\u05c3\\u05c6\\u05f3\\u05f4\\u0609\\u060a\\u060c\\u060d\\u061b\\u061e\\u061f\\u066a-\\u066d\\u06d4\\u0700-\\u070d\\u07f7-\\u07f9\\u0830-\\u083e\\u085e\\u0964\\u0965\\u0970\\u0af0\\u0df4\\u0e4f\\u0e5a\\u0e5b\\u0f04-\\u0f12\\u0f14\\u0f85\\u0fd0-\\u0fd4\\u0fd9\\u0fda\\u104a-\\u104f\\u10fb\\u1360-\\u1368\\u166d\\u166e\\u16eb-\\u16ed\\u1735\\u1736\\u17d4-\\u17d6\\u17d8-\\u17da\\u1800-\\u1805\\u1807-\\u180a\\u1944\\u1945\\u1a1e\\u1a1f\\u1aa0-\\u1aa6\\u1aa8-\\u1aad\\u1b5a-\\u1b60\\u1bfc-\\u1bff\\u1c3b-\\u1c3f\\u1c7e\\u1c7f\\u1cc0-\\u1cc7\\u1cd3\\u2000-\\u206f\\u2cf9-\\u2cfc\\u2cfe\\u2cff\\u2d70\\u2e00-\\u2e7f\\u3001-\\u3003\\u303d\\u30fb\\ua4fe\\ua4ff\\ua60d-\\ua60f\\ua673\\ua67e\\ua6f2-\\ua6f7\\ua874-\\ua877\\ua8ce\\ua8cf\\ua8f8-\\ua8fa\\ua92e\\ua92f\\ua95f\\ua9c1-\\ua9cd\\ua9de\\ua9df\\uaa5c-\\uaa5f\\uaade\\uaadf\\uaaf0\\uaaf1\\uabeb\\ufe10-\\ufe16\\ufe19\\ufe30\\ufe45\\ufe46\\ufe49-\\ufe4c\\ufe50-\\ufe52\\ufe54-\\ufe57\\ufe5f-\\ufe61\\ufe68\\ufe6a\\ufe6b\\ufeff\\uff01-\\uff03\\uff05-\\uff07\\uff0a\\uff0c\\uff0e\\uff0f\\uff1a\\uff1b\\uff1f\\uff20\\uff3c\\uff61\\uff64\\uff65]+/g,'')\n      .toLowerCase()\n  );\n}\n", "import { simplify } from './simplify.js';\n\n//\n// `resolveStrings`\n// Resolves the text strings for a given community index item\n//\n// Arguments\n//   `item`:  Object containing the community index item\n//   `defaults`: Object containing the community index default strings\n//   `localizerFn?`: optional function we will call to do the localization.\n//      This function should be like the iD `t()` function that\n//      accepts a `stringID` and returns a localized string\n//\n// Returns\n//   An Object containing all the resolved strings:\n//   {\n//     name:                     'talk-ru Mailing List',\n//     url:                      'https://lists.openstreetmap.org/listinfo/talk-ru',\n//     signupUrl:                'https://example.url/signup',\n//     description:              'A one line description',\n//     extendedDescription:      'Extended description',\n//     nameHTML:                 '<a href=\"the url\">the name</a>',\n//     urlHTML:                  '<a href=\"the url\">the url</a>',\n//     signupUrlHTML:            '<a href=\"the signupUrl\">the signupUrl</a>',\n//     descriptionHTML:          the description, with urls and signupUrls linkified,\n//     extendedDescriptionHTML:  the extendedDescription with urls and signupUrls linkified\n//   }\n//\nexport function resolveStrings(item, defaults, localizerFn) {\n  let itemStrings = Object.assign({}, item.strings);             // shallow clone\n  let defaultStrings = Object.assign({}, defaults[item.type]);   // shallow clone\n  const anyToken = new RegExp(/(\\{\\w+\\})/, 'gi');\n\n  // Pre-localize the item and default strings\n  if (localizerFn) {\n    if (itemStrings.community) {\n      const communityID = simplify(itemStrings.community);\n      itemStrings.community = localizerFn(`_communities.${communityID}`);\n    }\n    ['name', 'description', 'extendedDescription'].forEach(prop => {\n      if (defaultStrings[prop])  defaultStrings[prop] = localizerFn(`_defaults.${item.type}.${prop}`);\n      if (itemStrings[prop])     itemStrings[prop]    = localizerFn(`${item.id}.${prop}`);\n    });\n  }\n\n  let replacements = {\n    account: item.account,\n    community: itemStrings.community,\n    signupUrl: itemStrings.signupUrl,\n    url: itemStrings.url\n  };\n\n  // Resolve URLs first (which may refer to {account})\n  if (!replacements.signupUrl)  { replacements.signupUrl = resolve(itemStrings.signupUrl || defaultStrings.signupUrl); }\n  if (!replacements.url)        { replacements.url = resolve(itemStrings.url || defaultStrings.url); }\n\n  let resolved = {\n    name:                resolve(itemStrings.name || defaultStrings.name),\n    url:                 resolve(itemStrings.url || defaultStrings.url),\n    signupUrl:           resolve(itemStrings.signupUrl || defaultStrings.signupUrl),\n    description:         resolve(itemStrings.description || defaultStrings.description),\n    extendedDescription: resolve(itemStrings.extendedDescription || defaultStrings.extendedDescription)\n  };\n\n  // Generate linkified strings\n  resolved.nameHTML = linkify(resolved.url, resolved.name);\n  resolved.urlHTML = linkify(resolved.url);\n  resolved.signupUrlHTML = linkify(resolved.signupUrl);\n  resolved.descriptionHTML = resolve((itemStrings.description || defaultStrings.description), true);\n  resolved.extendedDescriptionHTML = resolve((itemStrings.extendedDescription || defaultStrings.extendedDescription), true);\n\n  return resolved;\n\n\n  function resolve(s, addLinks) {\n    if (!s) return undefined;\n    let result = s;\n\n    for (let key in replacements) {\n      const token = `{${key}}`;\n      const regex = new RegExp(token, 'g');\n      if (regex.test(result)) {\n        let replacement = replacements[key];\n        if (!replacement) {\n          throw new Error(`Cannot resolve token: ${token}`);\n        } else {\n          if (addLinks && (key === 'signupUrl' || key === 'url')) {\n            replacement = linkify(replacement);\n          }\n          result = result.replace(regex, replacement);\n        }\n      }\n    }\n\n    // There shouldn't be any leftover tokens in a resolved string\n    const leftovers = result.match(anyToken);\n    if (leftovers) {\n      throw new Error(`Cannot resolve tokens: ${leftovers}`);\n    }\n\n    // Linkify subreddits like `/r/openstreetmap`\n    // https://github.com/osmlab/osm-community-index/issues/82\n    // https://github.com/openstreetmap/iD/issues/4997\n    if (addLinks && item.type === 'reddit') {\n      result = result.replace(/(\\/r\\/\\w+\\/*)/i, match => linkify(resolved.url, match));\n    }\n\n    return result;\n  }\n\n  function linkify(url, text) {\n    if (!url) return undefined;\n    text = text || url;\n    return `<a target=\"_blank\" href=\"${url}\">${text}</a>`;\n  }\n}\n"],
  "mappings": "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",
  "names": ["diacritics"]
}
