{"ast":null,"code":"/*\n\ndidYouMean.js - A simple JavaScript matching engine\n===================================================\n\n[Available on GitHub](https://github.com/dcporter/didyoumean.js).\n\nA super-simple, highly optimized JS library for matching human-quality input to a list of potential\nmatches. You can use it to suggest a misspelled command-line utility option to a user, or to offer\nlinks to nearby valid URLs on your 404 page. (The examples below are taken from a personal project,\nmy [HTML5 business card](http://dcporter.aws.af.cm/me), which uses didYouMean.js to suggest correct\nURLs from misspelled ones, such as [dcporter.aws.af.cm/me/instagarm](http://dcporter.aws.af.cm/me/instagarm).)\nUses the [Levenshtein distance algorithm](https://en.wikipedia.org/wiki/Levenshtein_distance).\n\ndidYouMean.js works in the browser as well as in node.js. To install it for use in node:\n\n```\nnpm install didyoumean\n```\n\n\nExamples\n--------\n\nMatching against a list of strings:\n```\nvar input = 'insargrm'\nvar list = ['facebook', 'twitter', 'instagram', 'linkedin'];\nconsole.log(didYouMean(input, list));\n> 'instagram'\n// The method matches 'insargrm' to 'instagram'.\n\ninput = 'google plus';\nconsole.log(didYouMean(input, list));\n> null\n// The method was unable to find 'google plus' in the list of options.\n```\n\nMatching against a list of objects:\n```\nvar input = 'insargrm';\nvar list = [ { id: 'facebook' }, { id: 'twitter' }, { id: 'instagram' }, { id: 'linkedin' } ];\nvar key = 'id';\nconsole.log(didYouMean(input, list, key));\n> 'instagram'\n// The method returns the matching value.\n\ndidYouMean.returnWinningObject = true;\nconsole.log(didYouMean(input, list, key));\n> { id: 'instagram' }\n// The method returns the matching object.\n```\n\n\ndidYouMean(str, list, [key])\n----------------------------\n\n- str: The string input to match.\n- list: An array of strings or objects to match against.\n- key (OPTIONAL): If your list array contains objects, you must specify the key which contains the string\n  to match against.\n\nReturns: the closest matching string, or null if no strings exceed the threshold.\n\n\nOptions\n-------\n\nOptions are set on the didYouMean function object. You may change them at any time.\n\n### threshold\n\n  By default, the method will only return strings whose edit distance is less than 40% (0.4x) of their length.\n  For example, if a ten-letter string is five edits away from its nearest match, the method will return null.\n\n  You can control this by setting the \"threshold\" value on the didYouMean function. For example, to set the\n  edit distance threshold to 50% of the input string's length:\n\n  ```\n  didYouMean.threshold = 0.5;\n  ```\n\n  To return the nearest match no matter the threshold, set this value to null.\n\n### thresholdAbsolute\n\n  This option behaves the same as threshold, but instead takes an integer number of edit steps. For example,\n  if thresholdAbsolute is set to 20 (the default), then the method will only return strings whose edit distance\n  is less than 20. Both options apply.\n\n### caseSensitive\n\n  By default, the method will perform case-insensitive comparisons. If you wish to force case sensitivity, set\n  the \"caseSensitive\" value to true:\n\n  ```\n  didYouMean.caseSensitive = true;\n  ```\n\n### nullResultValue\n\n  By default, the method will return null if there is no sufficiently close match. You can change this value here.\n\n### returnWinningObject\n\n  By default, the method will return the winning string value (if any). If your list contains objects rather\n  than strings, you may set returnWinningObject to true.\n  \n  ```\n  didYouMean.returnWinningObject = true;\n  ```\n  \n  This option has no effect on lists of strings.\n\n### returnFirstMatch\n  \n  By default, the method will search all values and return the closest match. If you're simply looking for a \"good-\n  enough\" match, you can set your thresholds appropriately and set returnFirstMatch to true to substantially speed\n  things up.\n\n\nLicense\n-------\n\ndidYouMean copyright (c) 2013-2014 Dave Porter.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License\n[here](http://www.apache.org/licenses/LICENSE-2.0).\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n*/\n(function () {\n  \"use strict\";\n\n  // The didYouMean method.\n  function didYouMean(str, list, key) {\n    if (!str) return null;\n\n    // If we're running a case-insensitive search, smallify str.\n    if (!didYouMean.caseSensitive) {\n      str = str.toLowerCase();\n    }\n\n    // Calculate the initial value (the threshold) if present.\n    var thresholdRelative = didYouMean.threshold === null ? null : didYouMean.threshold * str.length,\n      thresholdAbsolute = didYouMean.thresholdAbsolute,\n      winningVal;\n    if (thresholdRelative !== null && thresholdAbsolute !== null) winningVal = Math.min(thresholdRelative, thresholdAbsolute);else if (thresholdRelative !== null) winningVal = thresholdRelative;else if (thresholdAbsolute !== null) winningVal = thresholdAbsolute;else winningVal = null;\n\n    // Get the edit distance to each option. If the closest one is less than 40% (by default) of str's length,\n    // then return it.\n    var winner,\n      candidate,\n      testCandidate,\n      val,\n      i,\n      len = list.length;\n    for (i = 0; i < len; i++) {\n      // Get item.\n      candidate = list[i];\n      // If there's a key, get the candidate value out of the object.\n      if (key) {\n        candidate = candidate[key];\n      }\n      // Gatekeep.\n      if (!candidate) {\n        continue;\n      }\n      // If we're running a case-insensitive search, smallify the candidate.\n      if (!didYouMean.caseSensitive) {\n        testCandidate = candidate.toLowerCase();\n      } else {\n        testCandidate = candidate;\n      }\n      // Get and compare edit distance.\n      val = getEditDistance(str, testCandidate, winningVal);\n      // If this value is smaller than our current winning value, OR if we have no winning val yet (i.e. the\n      // threshold option is set to null, meaning the caller wants a match back no matter how bad it is), then\n      // this is our new winner.\n      if (winningVal === null || val < winningVal) {\n        winningVal = val;\n        // Set the winner to either the value or its object, depending on the returnWinningObject option.\n        if (key && didYouMean.returnWinningObject) winner = list[i];else winner = candidate;\n        // If we're returning the first match, return it now.\n        if (didYouMean.returnFirstMatch) return winner;\n      }\n    }\n\n    // If we have a winner, return it.\n    return winner || didYouMean.nullResultValue;\n  }\n\n  // Set default options.\n  didYouMean.threshold = 0.4;\n  didYouMean.thresholdAbsolute = 20;\n  didYouMean.caseSensitive = false;\n  didYouMean.nullResultValue = null;\n  didYouMean.returnWinningObject = null;\n  didYouMean.returnFirstMatch = false;\n\n  // Expose.\n  // In node...\n  if (typeof module !== 'undefined' && module.exports) {\n    module.exports = didYouMean;\n  }\n  // Otherwise...\n  else {\n    window.didYouMean = didYouMean;\n  }\n  var MAX_INT = Math.pow(2, 32) - 1; // We could probably go higher than this, but for practical reasons let's not.\n  function getEditDistance(a, b, max) {\n    // Handle null or undefined max.\n    max = max || max === 0 ? max : MAX_INT;\n    var lena = a.length;\n    var lenb = b.length;\n\n    // Fast path - no A or B.\n    if (lena === 0) return Math.min(max + 1, lenb);\n    if (lenb === 0) return Math.min(max + 1, lena);\n\n    // Fast path - length diff larger than max.\n    if (Math.abs(lena - lenb) > max) return max + 1;\n\n    // Slow path.\n    var matrix = [],\n      i,\n      j,\n      colMin,\n      minJ,\n      maxJ;\n\n    // Set up the first row ([0, 1, 2, 3, etc]).\n    for (i = 0; i <= lenb; i++) {\n      matrix[i] = [i];\n    }\n\n    // Set up the first column (same).\n    for (j = 0; j <= lena; j++) {\n      matrix[0][j] = j;\n    }\n\n    // Loop over the rest of the columns.\n    for (i = 1; i <= lenb; i++) {\n      colMin = MAX_INT;\n      minJ = 1;\n      if (i > max) minJ = i - max;\n      maxJ = lenb + 1;\n      if (maxJ > max + i) maxJ = max + i;\n      // Loop over the rest of the rows.\n      for (j = 1; j <= lena; j++) {\n        // If j is out of bounds, just put a large value in the slot.\n        if (j < minJ || j > maxJ) {\n          matrix[i][j] = max + 1;\n        }\n\n        // Otherwise do the normal Levenshtein thing.\n        else {\n          // If the characters are the same, there's no change in edit distance.\n          if (b.charAt(i - 1) === a.charAt(j - 1)) {\n            matrix[i][j] = matrix[i - 1][j - 1];\n          }\n          // Otherwise, see if we're substituting, inserting or deleting.\n          else {\n            matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1,\n            // Substitute\n            Math.min(matrix[i][j - 1] + 1,\n            // Insert\n            matrix[i - 1][j] + 1)); // Delete\n          }\n        }\n\n        // Either way, update colMin.\n        if (matrix[i][j] < colMin) colMin = matrix[i][j];\n      }\n\n      // If this column's minimum is greater than the allowed maximum, there's no point\n      // in going on with life.\n      if (colMin > max) return max + 1;\n    }\n    // If we made it this far without running into the max, then return the final matrix value.\n    return matrix[lenb][lena];\n  }\n})();","map":{"version":3,"names":["didYouMean","str","list","key","caseSensitive","toLowerCase","thresholdRelative","threshold","length","thresholdAbsolute","winningVal","Math","min","winner","candidate","testCandidate","val","i","len","getEditDistance","returnWinningObject","returnFirstMatch","nullResultValue","module","exports","window","MAX_INT","pow","a","b","max","lena","lenb","abs","matrix","j","colMin","minJ","maxJ","charAt"],"sources":["C:/Users/user/Desktop/000newport/node_modules/didyoumean/didYouMean-1.2.1.js"],"sourcesContent":["/*\n\ndidYouMean.js - A simple JavaScript matching engine\n===================================================\n\n[Available on GitHub](https://github.com/dcporter/didyoumean.js).\n\nA super-simple, highly optimized JS library for matching human-quality input to a list of potential\nmatches. You can use it to suggest a misspelled command-line utility option to a user, or to offer\nlinks to nearby valid URLs on your 404 page. (The examples below are taken from a personal project,\nmy [HTML5 business card](http://dcporter.aws.af.cm/me), which uses didYouMean.js to suggest correct\nURLs from misspelled ones, such as [dcporter.aws.af.cm/me/instagarm](http://dcporter.aws.af.cm/me/instagarm).)\nUses the [Levenshtein distance algorithm](https://en.wikipedia.org/wiki/Levenshtein_distance).\n\ndidYouMean.js works in the browser as well as in node.js. To install it for use in node:\n\n```\nnpm install didyoumean\n```\n\n\nExamples\n--------\n\nMatching against a list of strings:\n```\nvar input = 'insargrm'\nvar list = ['facebook', 'twitter', 'instagram', 'linkedin'];\nconsole.log(didYouMean(input, list));\n> 'instagram'\n// The method matches 'insargrm' to 'instagram'.\n\ninput = 'google plus';\nconsole.log(didYouMean(input, list));\n> null\n// The method was unable to find 'google plus' in the list of options.\n```\n\nMatching against a list of objects:\n```\nvar input = 'insargrm';\nvar list = [ { id: 'facebook' }, { id: 'twitter' }, { id: 'instagram' }, { id: 'linkedin' } ];\nvar key = 'id';\nconsole.log(didYouMean(input, list, key));\n> 'instagram'\n// The method returns the matching value.\n\ndidYouMean.returnWinningObject = true;\nconsole.log(didYouMean(input, list, key));\n> { id: 'instagram' }\n// The method returns the matching object.\n```\n\n\ndidYouMean(str, list, [key])\n----------------------------\n\n- str: The string input to match.\n- list: An array of strings or objects to match against.\n- key (OPTIONAL): If your list array contains objects, you must specify the key which contains the string\n  to match against.\n\nReturns: the closest matching string, or null if no strings exceed the threshold.\n\n\nOptions\n-------\n\nOptions are set on the didYouMean function object. You may change them at any time.\n\n### threshold\n\n  By default, the method will only return strings whose edit distance is less than 40% (0.4x) of their length.\n  For example, if a ten-letter string is five edits away from its nearest match, the method will return null.\n\n  You can control this by setting the \"threshold\" value on the didYouMean function. For example, to set the\n  edit distance threshold to 50% of the input string's length:\n\n  ```\n  didYouMean.threshold = 0.5;\n  ```\n\n  To return the nearest match no matter the threshold, set this value to null.\n\n### thresholdAbsolute\n\n  This option behaves the same as threshold, but instead takes an integer number of edit steps. For example,\n  if thresholdAbsolute is set to 20 (the default), then the method will only return strings whose edit distance\n  is less than 20. Both options apply.\n\n### caseSensitive\n\n  By default, the method will perform case-insensitive comparisons. If you wish to force case sensitivity, set\n  the \"caseSensitive\" value to true:\n\n  ```\n  didYouMean.caseSensitive = true;\n  ```\n\n### nullResultValue\n\n  By default, the method will return null if there is no sufficiently close match. You can change this value here.\n\n### returnWinningObject\n\n  By default, the method will return the winning string value (if any). If your list contains objects rather\n  than strings, you may set returnWinningObject to true.\n  \n  ```\n  didYouMean.returnWinningObject = true;\n  ```\n  \n  This option has no effect on lists of strings.\n\n### returnFirstMatch\n  \n  By default, the method will search all values and return the closest match. If you're simply looking for a \"good-\n  enough\" match, you can set your thresholds appropriately and set returnFirstMatch to true to substantially speed\n  things up.\n\n\nLicense\n-------\n\ndidYouMean copyright (c) 2013-2014 Dave Porter.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License\n[here](http://www.apache.org/licenses/LICENSE-2.0).\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n*/\n(function() {\n  \"use strict\";\n\n  // The didYouMean method.\n  function didYouMean(str, list, key) {\n    if (!str) return null;\n\n    // If we're running a case-insensitive search, smallify str.\n    if (!didYouMean.caseSensitive) { str = str.toLowerCase(); }\n\n    // Calculate the initial value (the threshold) if present.\n    var thresholdRelative = didYouMean.threshold === null ? null : didYouMean.threshold * str.length,\n        thresholdAbsolute = didYouMean.thresholdAbsolute,\n        winningVal;\n    if (thresholdRelative !== null && thresholdAbsolute !== null) winningVal = Math.min(thresholdRelative, thresholdAbsolute);\n    else if (thresholdRelative !== null) winningVal = thresholdRelative;\n    else if (thresholdAbsolute !== null) winningVal = thresholdAbsolute;\n    else winningVal = null;\n\n    // Get the edit distance to each option. If the closest one is less than 40% (by default) of str's length,\n    // then return it.\n    var winner, candidate, testCandidate, val,\n        i, len = list.length;\n    for (i = 0; i < len; i++) {\n      // Get item.\n      candidate = list[i];\n      // If there's a key, get the candidate value out of the object.\n      if (key) { candidate = candidate[key]; }\n      // Gatekeep.\n      if (!candidate) { continue; }\n      // If we're running a case-insensitive search, smallify the candidate.\n      if (!didYouMean.caseSensitive) { testCandidate = candidate.toLowerCase(); }\n      else { testCandidate = candidate; }\n      // Get and compare edit distance.\n      val = getEditDistance(str, testCandidate, winningVal);\n      // If this value is smaller than our current winning value, OR if we have no winning val yet (i.e. the\n      // threshold option is set to null, meaning the caller wants a match back no matter how bad it is), then\n      // this is our new winner.\n      if (winningVal === null || val < winningVal) {\n        winningVal = val;\n        // Set the winner to either the value or its object, depending on the returnWinningObject option.\n        if (key && didYouMean.returnWinningObject) winner = list[i];\n        else winner = candidate;\n        // If we're returning the first match, return it now.\n        if (didYouMean.returnFirstMatch) return winner;\n      }\n    }\n\n    // If we have a winner, return it.\n    return winner || didYouMean.nullResultValue;\n  }\n\n  // Set default options.\n  didYouMean.threshold = 0.4;\n  didYouMean.thresholdAbsolute = 20;\n  didYouMean.caseSensitive = false;\n  didYouMean.nullResultValue = null;\n  didYouMean.returnWinningObject = null;\n  didYouMean.returnFirstMatch = false;\n\n  // Expose.\n  // In node...\n  if (typeof module !== 'undefined' && module.exports) {\n    module.exports = didYouMean;\n  }\n  // Otherwise...\n  else {\n    window.didYouMean = didYouMean;\n  }\n\n  var MAX_INT = Math.pow(2,32) - 1; // We could probably go higher than this, but for practical reasons let's not.\n  function getEditDistance(a, b, max) {\n    // Handle null or undefined max.\n    max = max || max === 0 ? max : MAX_INT;\n\n    var lena = a.length;\n    var lenb = b.length;\n\n    // Fast path - no A or B.\n    if (lena === 0) return Math.min(max + 1, lenb);\n    if (lenb === 0) return Math.min(max + 1, lena);\n\n    // Fast path - length diff larger than max.\n    if (Math.abs(lena - lenb) > max) return max + 1;\n\n    // Slow path.\n    var matrix = [],\n        i, j, colMin, minJ, maxJ;\n\n    // Set up the first row ([0, 1, 2, 3, etc]).\n    for (i = 0; i <= lenb; i++) { matrix[i] = [i]; }\n\n    // Set up the first column (same).\n    for (j = 0; j <= lena; j++) { matrix[0][j] = j; }\n\n    // Loop over the rest of the columns.\n    for (i = 1; i <= lenb; i++) {\n      colMin = MAX_INT;\n      minJ = 1;\n      if (i > max) minJ = i - max;\n      maxJ = lenb + 1;\n      if (maxJ > max + i) maxJ = max + i;\n      // Loop over the rest of the rows.\n      for (j = 1; j <= lena; j++) {\n        // If j is out of bounds, just put a large value in the slot.\n        if (j < minJ || j > maxJ) {\n          matrix[i][j] = max + 1;\n        }\n\n        // Otherwise do the normal Levenshtein thing.\n        else {\n          // If the characters are the same, there's no change in edit distance.\n          if (b.charAt(i - 1) === a.charAt(j - 1)) {\n            matrix[i][j] = matrix[i - 1][j - 1];\n          }\n          // Otherwise, see if we're substituting, inserting or deleting.\n          else {\n            matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // Substitute\n                                    Math.min(matrix[i][j - 1] + 1, // Insert\n                                    matrix[i - 1][j] + 1)); // Delete\n          }\n        }\n\n        // Either way, update colMin.\n        if (matrix[i][j] < colMin) colMin = matrix[i][j];\n      }\n\n      // If this column's minimum is greater than the allowed maximum, there's no point\n      // in going on with life.\n      if (colMin > max) return max + 1;\n    }\n    // If we made it this far without running into the max, then return the final matrix value.\n    return matrix[lenb][lena];\n  }\n\n})();\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,YAAW;EACV,YAAY;;EAEZ;EACA,SAASA,UAAUA,CAACC,GAAG,EAAEC,IAAI,EAAEC,GAAG,EAAE;IAClC,IAAI,CAACF,GAAG,EAAE,OAAO,IAAI;;IAErB;IACA,IAAI,CAACD,UAAU,CAACI,aAAa,EAAE;MAAEH,GAAG,GAAGA,GAAG,CAACI,WAAW,CAAC,CAAC;IAAE;;IAE1D;IACA,IAAIC,iBAAiB,GAAGN,UAAU,CAACO,SAAS,KAAK,IAAI,GAAG,IAAI,GAAGP,UAAU,CAACO,SAAS,GAAGN,GAAG,CAACO,MAAM;MAC5FC,iBAAiB,GAAGT,UAAU,CAACS,iBAAiB;MAChDC,UAAU;IACd,IAAIJ,iBAAiB,KAAK,IAAI,IAAIG,iBAAiB,KAAK,IAAI,EAAEC,UAAU,GAAGC,IAAI,CAACC,GAAG,CAACN,iBAAiB,EAAEG,iBAAiB,CAAC,CAAC,KACrH,IAAIH,iB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"},"metadata":{},"sourceType":"script","externalDependencies":[]}