Socket
Socket
Sign inDemoInstall

@poprank/rankings

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@poprank/rankings - npm Package Compare versions

Comparing version 1.1.6 to 1.1.7

108

lib/rarity/rarity.js

@@ -105,3 +105,3 @@ "use strict";

if (collectionMetaFunctionPair)
collectionMetaFunctionPair[collection](nftTraits, metaTraits);
metaTraits.push.apply(metaTraits, collectionMetaFunctionPair[collection](nftTraits));
// Calculate our "Matches" meta trait

@@ -120,2 +120,3 @@ var traitValueMatches = (0, rarity_meta_1.getNftTraitsMatches)(nftTraits, collection);

});
// if (metaTraits.find(t => t.value === 'Triple')) console.log(metaTraits);
return metaTraits;

@@ -160,26 +161,25 @@ };

nfts.forEach(function (nft) {
// Uncommenting this in a future PR
// if (ensCollectionSlugs.includes(collection as EnsCollectionSlug)) {
// const max = ensCollectionSizes[collection as EnsCollectionSlug];
// const digits = max.toString().length - 1;
// // Reverse engineer the number value of the ENS given its name or tokenID
// let i = 0;
// if (nft.name.includes('eth')) {
// i = +nft.name.replace('.eth', '');
// } else {
// for (i = 0; i < 10000; i++) {
// const id = stringToKeccak256DecimalId(i.toString(), digits);
var _a;
if (rarity_meta_1.ensCollectionSlugs.includes(collection)) {
var max = rarity_meta_1.ensCollectionSizes[collection];
var digits = max.toString().length - 1;
// Reverse engineer the number value of the ENS given its name or tokenID
var i = 0;
if (nft.name.includes('eth')) {
i = +nft.name.replace('.eth', '');
}
else {
for (i = 0; i < 10000; i++) {
var id = (0, rarity_meta_1.stringToKeccak256DecimalId)(i.toString(), digits);
// Find the initial integer ID
if (id === nft.id)
break;
}
}
nft.traits.push({
value: i.toString(),
category: 'Traits',
typeValue: rarity_meta_1.ID_TRAIT_TYPE,
displayType: 'number',
});
}
// // Find the initial integer ID
// if (id === nft.id) break;
// }
// }
// nft.traits.push({
// value: i.toString(),
// category: 'Traits',
// typeValue: ID_TRAIT_TYPE,
// displayType: 'number',
// });
// }
(_a = nft.traits).push.apply(_a, (0, exports.getMetaTraits)(nft.traits, nft.collection, true));

@@ -190,18 +190,11 @@ });

var collectionTraits = {};
var pushRatedTraitToCollectionTraits = function (trait) {
var typeValue = trait.typeValue, value = trait.value;
if (!collectionTraits[typeValue])
collectionTraits[typeValue] = [];
if (!collectionTraits[typeValue].find(function (t) { return t.value === value; }))
collectionTraits[typeValue].push((trait));
};
// find the trait weighting for all traits' rarities in this collection
var weight = calculateCollectionRarityWeight(collectionTraitsNoRarity, nfts.length);
var maxTraitsNum = -1;
nfts.forEach(function (nft) {
var numTraits;
var traitCountTrait = nft.traits.find(function (t) { return t.category === 'Meta' && t.typeValue === rarity_meta_1.TRAIT_COUNT; });
// If we have a "Trait Count" trait, use that, otherwise naively filter out "none" and use the remaining
// traits' length
if (traitCountTrait) {
numTraits = +traitCountTrait.value;
}
else {
numTraits = nft.traits.filter(function (t) { return t.category !== 'None'; }).length;
}
maxTraitsNum = Math.max(maxTraitsNum, numTraits);
});
// For each NFT, go through every trait it has / doesn't have, summing the rarity of each individual trait

@@ -213,24 +206,23 @@ // to produce the final `rarityTraitSum` for the NFT. At the same time, add the traits with their now-calculated

var nftTraitsWithRarity = [];
// All the NFTs' traits, and the "None" traits
var traitsToParse = nft.traits;
// Add the "None" traits for all non-Meta traits
Object.keys(collectionTraitsNoRarity).forEach(function (traitType) {
var _a;
var traitValuesOfThisType = collectionTraitsNoRarity[traitType];
if (traitValuesOfThisType.length === 0)
return;
if (!nft.traits.find(function (t) { return t.typeValue === traitType; }) && !collectionTraitsNoRarity[traitType].find(function (t) { return t.category === 'Meta'; })) {
traitsToParse.push(collectionTraitsNoRarity[traitType].find(function (t) { return t.category === 'None'; }));
}
});
traitsToParse.forEach(function (trait) {
// The trait is either the nft's trait w/ this type, or this type's "none"
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
var trait = (_a = nft.traits.find(function (t) { return t.typeValue === traitType; })) !== null && _a !== void 0 ? _a : traitValuesOfThisType.find(function (t) { return t.category === 'None'; });
var value = trait.value, typeValue = trait.typeValue;
var currTraitValueCount = traitValuesOfThisType.find(function (t) { return t.value === value; }).traitCount;
var pushRatedTraitToCollectionTraits = function (rarity, count) {
if (!collectionTraits[typeValue])
collectionTraits[typeValue] = [];
if (!collectionTraits[typeValue].find(function (t) { return t.value === value; }))
collectionTraits[typeValue].push((__assign(__assign({}, trait), { traitCount: count, rarityTraitSum: rarity })));
};
var value = trait.value, typeValue = trait.typeValue, category = trait.category;
var currTraitValueCount = collectionTraitsNoRarity[typeValue].find(function (t) { return t.value === value; }).traitCount;
// Adds the rated trait to the output `collectionTraits` obj if it's not already there
// For all non trait-count meta traits, don't calculate the rarity. If it's not none though, still
// add it to the end traits array
if (traitValuesOfThisType.find(function (t) { return t.category === 'Meta' && t.typeValue !== rarity_meta_1.TRAIT_COUNT; })) {
if (category === 'Meta' && typeValue !== rarity_meta_1.TRAIT_COUNT) {
if (trait.category !== 'None') {
pushRatedTraitToCollectionTraits(0, currTraitValueCount);
nftTraitsWithRarity.push(__assign(__assign({}, trait), { traitCount: 1, rarityTraitSum: 0 }));
var ratedTrait_1 = __assign(__assign({}, trait), { traitCount: currTraitValueCount, rarityTraitSum: 0 });
pushRatedTraitToCollectionTraits(ratedTrait_1);
nftTraitsWithRarity.push(ratedTrait_1);
}

@@ -242,8 +234,9 @@ return;

var currTraitRarity = (0, exports.calculateTraitScore)(currTraitValueCount, nfts.length, traitTypeCount, weight);
var ratedTrait = __assign(__assign({}, trait), { traitCount: currTraitValueCount, rarityTraitSum: currTraitRarity });
rarityTraitSum += currTraitRarity;
// Push this trait to the collection-wide object if it's not there
pushRatedTraitToCollectionTraits(currTraitRarity, currTraitValueCount);
pushRatedTraitToCollectionTraits(ratedTrait);
// Don't add "None" traits to the final array, they're implicit
if (trait.category !== 'None')
nftTraitsWithRarity.push(__assign(__assign({}, trait), { traitCount: 1, rarityTraitSum: currTraitRarity }));
// if (trait.category !== 'None')
nftTraitsWithRarity.push(ratedTrait);
});

@@ -254,2 +247,3 @@ // Collections for which rarity doesn't make sense

}
nftTraitsWithRarity.sort(function (a, b) { return b.rarityTraitSum - a.rarityTraitSum; });
nftsWithRarity.push(__assign(__assign({}, nft), { traits: nftTraitsWithRarity, rarityTraitSum: +rarityTraitSum.toFixed(3) }));

@@ -256,0 +250,0 @@ });

@@ -17,3 +17,3 @@ import { TraitBase } from '../types';

*/
export declare const collectionNameMetaFunctionPairs: Record<string, (nftTraits: TraitBase[], outTraits: TraitBase[]) => void>[];
export declare const collectionNameMetaFunctionPairs: Record<string, (nftTraits: TraitBase[]) => TraitBase[]>[];
/**

@@ -20,0 +20,0 @@ * Get the "match" traits for a collection. Has some collection-specific logic to add desired

@@ -62,5 +62,6 @@ "use strict";

exports.stringToKeccak256DecimalId = stringToKeccak256DecimalId;
var ensMetaFunc = function (nftTraits, outTraits, collection) {
var ensMetaFunc = function (nftTraits, collection) {
var max = exports.ensCollectionSizes[collection];
var digits = max.toString().length - 1;
var outTraits = [];
var trait = nftTraits.find(function (t) { return t.displayType === 'number' && t.typeValue === exports.ID_TRAIT_TYPE; });

@@ -185,3 +186,3 @@ if (!trait)

var isTriple = false;
for (var j = 0; j < stringified.length - 3; j++) {
for (var j = 0; j <= stringified.length - 3; j++) {
if (['000', '111', '222', '333', '444', '555', '666', '777', '888', '999'].includes(stringified.slice(j, j + 3)))

@@ -200,3 +201,3 @@ isTriple = true;

var isQuadruple = false;
for (var j = 0; j < stringified.length - 4; j++) {
for (var j = 0; j <= stringified.length - 4; j++) {
if (['0000', '1111', '2222', '3333', '4444', '5555', '6666', '7777', '8888', '9999'].includes(stringified.slice(j, j + 4)))

@@ -213,2 +214,3 @@ isQuadruple = true;

}
return outTraits;
};

@@ -221,3 +223,4 @@ /**

exports.collectionNameMetaFunctionPairs = [{
'creatureworld': function (nftTraits, outTraits) {
'creatureworld': function (nftTraits) {
var outTraits = [];
var bg = nftTraits.find(function (t) { return t.typeValue === 'Background'; });

@@ -236,5 +239,7 @@ var creature = nftTraits.find(function (t) { return t.typeValue === 'Creature'; });

}
return outTraits;
},
}, {
'deathbats-club': function (nftTraits, outTraits) {
'deathbats-club': function (nftTraits) {
var outTraits = [];
nftTraits.forEach(function (trait) {

@@ -251,5 +256,7 @@ var tType = trait.typeValue;

});
return outTraits;
},
}, {
'mutant-ape-yacht-club': function (nftTraits, outTraits) {
'mutant-ape-yacht-club': function (nftTraits) {
var outTraits = [];
var firstTrait = nftTraits[0].value;

@@ -273,7 +280,8 @@ var baseTrait = {

}
return outTraits;
},
}, {
'ens': function (nftTraits, outTraits) { return ensMetaFunc(nftTraits, outTraits, 'ens'); },
'ens': function (nftTraits) { return ensMetaFunc(nftTraits, 'ens'); },
}, {
'999club': function (nftTraits, outTraits) { return ensMetaFunc(nftTraits, outTraits, '999club'); },
'999club': function (nftTraits) { return ensMetaFunc(nftTraits, '999club'); },
},

@@ -280,0 +288,0 @@ ];

{
"name": "@poprank/rankings",
"version": "1.1.6",
"version": "1.1.7",
"description": "PopRank's NFT rarity and aesthetic ranking logic",

@@ -49,2 +49,2 @@ "publishConfig": {

}
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc