
Research
PyPI Package Disguised as Instagram Growth Tool Harvests User Credentials
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
dynamic-serializer
Advanced tools
crawls a JSON tree replacing dynamic values with a deterministic integer
A class to help you snapshot json trees that contain dynamic values like UIDs
yarn add dynamic-serializer
Jest snapshot testing is great, but it doesn't work if one of your values is non-deterministic. With this package, you can replace those values with deterministic ones.
Jests' built-in snapshotSerializers config stops short of being useful (for this case). You can't tell it which fields you'd like to replace. Even if you could, it doesn't hold state to ensure that the same dynamic value turns into the same static value.
Example:
// in foo.test.js
import DynamicSerializer from 'dynamic-serializer';
const fullPaths = ['primaryKey', 'wholeArray', 'singleValue.levelOne.arr.3'];
test('makes simple dynamic fields deterministic', () => {
const dynamicSerializer = new DynamicSerializer();
const userId = Math.random();
const results = {
staticProp: 'Hi there',
primaryKey: userId,
wholeArray: [Math.random(), Math.random()],
singleValue: {
levelOne: {
arr: ['badger', 'badger', 'mushroom', 'snake' + Math.random()]
}
}
};
const moreResults = {
foreignKey: userId
};
dynamicSerializer.toStatic(results, fullPaths);
dynamicSerializer.toStatic(moreResults, ['foreignKey']);
expect(results).toMatchSnapshot();
expect(moreResults).toMatchSnapshot();
expect(results.primaryKey).toBe(moreResults.foreignKey);
});
const dynamicSerializer = new DynamicSerializer();
Creates a new instance suitable for a single test.
dynamicSerializer.toStatic(snapshot, fullPaths)
Options:
snapshot
: the JSON tree you wish to mutatefullPaths
: an array of dot-separated paths.
If the final destination of the path is an array, all values will be replaced.
If you only want to replace one part of an array, it needs to end in a number.
If the JSON structure is an array, start it off with a number, too.
For more use cases, see the tests.options
: an object with the following:
constant
: default to false. if true, everything will serialize to the same value.
Useful if you're trying to sort objects but every key is serialized so there's no good sort key.Q: Why do you mutate my JSON tree? I heard good functional programming never mutates...
A: Speed, space, and forcing good habits. Mutating is faster and causes less GC. It also forces you to call it just before your snapshot. If you want to do something fancy with the original after calling this, you're doing it wrong.
MIT
FAQs
crawls a JSON tree replacing dynamic values with a deterministic integer
The npm package dynamic-serializer receives a total of 43 weekly downloads. As such, dynamic-serializer popularity was classified as not popular.
We found that dynamic-serializer demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
Product
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.
Security News
Research
Socket uncovered two npm packages that register hidden HTTP endpoints to delete all files on command.