{"version":3,"file":"fast-unique-numbers-CVgv3Xux.js","sources":["../../node_modules/fast-unique-numbers/build/es2019/factories/add-unique-number.js","../../node_modules/fast-unique-numbers/build/es2019/factories/cache.js","../../node_modules/fast-unique-numbers/build/es2019/factories/generate-unique-number.js","../../node_modules/fast-unique-numbers/build/es2019/module.js"],"sourcesContent":["export const createAddUniqueNumber = (generateUniqueNumber) => {\n return (set) => {\n const number = generateUniqueNumber(set);\n set.add(number);\n return number;\n };\n};\n//# sourceMappingURL=add-unique-number.js.map","export const createCache = (lastNumberWeakMap) => {\n return (collection, nextNumber) => {\n lastNumberWeakMap.set(collection, nextNumber);\n return nextNumber;\n };\n};\n//# sourceMappingURL=cache.js.map","/*\n * The value of the constant Number.MAX_SAFE_INTEGER equals (2 ** 53 - 1) but it\n * is fairly new.\n */\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER === undefined ? 9007199254740991 : Number.MAX_SAFE_INTEGER;\nconst TWO_TO_THE_POWER_OF_TWENTY_NINE = 536870912;\nconst TWO_TO_THE_POWER_OF_THIRTY = TWO_TO_THE_POWER_OF_TWENTY_NINE * 2;\nexport const createGenerateUniqueNumber = (cache, lastNumberWeakMap) => {\n return (collection) => {\n const lastNumber = lastNumberWeakMap.get(collection);\n /*\n * Let's try the cheapest algorithm first. It might fail to produce a new\n * number, but it is so cheap that it is okay to take the risk. Just\n * increase the last number by one or reset it to 0 if we reached the upper\n * bound of SMIs (which stands for small integers). When the last number is\n * unknown it is assumed that the collection contains zero based consecutive\n * numbers.\n */\n let nextNumber = lastNumber === undefined ? collection.size : lastNumber < TWO_TO_THE_POWER_OF_THIRTY ? lastNumber + 1 : 0;\n if (!collection.has(nextNumber)) {\n return cache(collection, nextNumber);\n }\n /*\n * If there are less than half of 2 ** 30 numbers stored in the collection,\n * the chance to generate a new random number in the range from 0 to 2 ** 30\n * is at least 50%. It's benifitial to use only SMIs because they perform\n * much better in any environment based on V8.\n */\n if (collection.size < TWO_TO_THE_POWER_OF_TWENTY_NINE) {\n while (collection.has(nextNumber)) {\n nextNumber = Math.floor(Math.random() * TWO_TO_THE_POWER_OF_THIRTY);\n }\n return cache(collection, nextNumber);\n }\n // Quickly check if there is a theoretical chance to generate a new number.\n if (collection.size > MAX_SAFE_INTEGER) {\n throw new Error('Congratulations, you created a collection of unique numbers which uses all available integers!');\n }\n // Otherwise use the full scale of safely usable integers.\n while (collection.has(nextNumber)) {\n nextNumber = Math.floor(Math.random() * MAX_SAFE_INTEGER);\n }\n return cache(collection, nextNumber);\n };\n};\n//# sourceMappingURL=generate-unique-number.js.map","import { createAddUniqueNumber } from './factories/add-unique-number';\nimport { createCache } from './factories/cache';\nimport { createGenerateUniqueNumber } from './factories/generate-unique-number';\n/*\n * @todo Explicitly referencing the barrel file seems to be necessary when enabling the\n * isolatedModules compiler option.\n */\nexport * from './types/index';\nconst LAST_NUMBER_WEAK_MAP = new WeakMap();\nconst cache = createCache(LAST_NUMBER_WEAK_MAP);\nconst generateUniqueNumber = createGenerateUniqueNumber(cache, LAST_NUMBER_WEAK_MAP);\nconst addUniqueNumber = createAddUniqueNumber(generateUniqueNumber);\nexport { addUniqueNumber, generateUniqueNumber };\n//# sourceMappingURL=module.js.map"],"names":["e","createAddUniqueNumber","generateUniqueNumber","set","number","createCache","lastNumberWeakMap","collection","nextNumber","MAX_SAFE_INTEGER","TWO_TO_THE_POWER_OF_TWENTY_NINE","TWO_TO_THE_POWER_OF_THIRTY","createGenerateUniqueNumber","cache","lastNumber","LAST_NUMBER_WEAK_MAP","addUniqueNumber"],"mappings":"AAAO,GAAA,CAAA,IAAAA,EAAA,OAAA,OAAA,IAAA,OAAA,OAAA,OAAA,IAAA,OAAA,OAAA,WAAA,IAAA,WAAA,OAAA,KAAA,IAAA,KAAA,CAAA,EAAA,EAAA,IAAAA,EAAA,QAAA,MAAA,IAAAA,EAAA,gBAAAA,EAAA,iBAAA,CAAA,EAAAA,EAAA,gBAAA,CAAA,EAAA,uCAAAA,EAAA,yBAAA,mDAAA,MAAA,CAAA,CAAA,MAAMC,EAAyBC,GAC1BC,GAAQ,CACZ,MAAMC,EAASF,EAAqBC,CAAG,EACvC,OAAAA,EAAI,IAAIC,CAAM,EACPA,CACV,ECLQC,EAAeC,GACjB,CAACC,EAAYC,KAChBF,EAAkB,IAAIC,EAAYC,CAAU,EACrCA,GCCTC,EAAmB,OAAO,mBAAqB,OAAY,iBAAmB,OAAO,iBACrFC,EAAkC,UAClCC,EAA6BD,EAAkC,EACxDE,EAA6B,CAACC,EAAOP,IACtCC,GAAe,CACnB,MAAMO,EAAaR,EAAkB,IAAIC,CAAU,EASnD,IAAIC,EAAaM,IAAe,OAAYP,EAAW,KAAOO,EAAaH,EAA6BG,EAAa,EAAI,EACzH,GAAI,CAACP,EAAW,IAAIC,CAAU,EAC1B,OAAOK,EAAMN,EAAYC,CAAU,EAQvC,GAAID,EAAW,KAAOG,EAAiC,CACnD,KAAOH,EAAW,IAAIC,CAAU,GAC5BA,EAAa,KAAK,MAAM,KAAK,OAAM,EAAKG,CAA0B,EAEtE,OAAOE,EAAMN,EAAYC,CAAU,CAC/C,CAEQ,GAAID,EAAW,KAAOE,EAClB,MAAM,IAAI,MAAM,gGAAgG,EAGpH,KAAOF,EAAW,IAAIC,CAAU,GAC5BA,EAAa,KAAK,MAAM,KAAK,OAAM,EAAKC,CAAgB,EAE5D,OAAOI,EAAMN,EAAYC,CAAU,CACtC,ECnCCO,EAAuB,IAAI,QAC3BF,EAAQR,EAAYU,CAAoB,EACxCb,EAAuBU,EAA2BC,EAAOE,CAAoB,EAC7EC,EAAkBf,EAAsBC,CAAoB","x_google_ignoreList":[0,1,2,3]}