Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
@total-typescript/shoehorn
Advanced tools
shoehorn
shoehorn
lets you pass partial data in tests, while keeping TypeScript happy.
type Request = {
body: {
id: string;
};
// Imagine oodles of other properties...
};
it("Should get the user", () => {
// Even though we only care about body.id for
// this test, we need to pass in the whole Request
// object
getUser({
body: {
id: "123",
},
} as Request);
});
'as' in tests feels bad.
as unknown as User
)shoehorn
gives you some first-class primitives for safely providing incomplete data to tests.
import { fromPartial } from "@total-typescript/shoehorn";
it("Should get the user", () => {
getUserId(
fromPartial({
body: {
id: "123",
},
}),
);
});
Yes, in general. Having to pass huge objects to tests is a sign that your types are too loose. Ideally, every function should only specify the data it needs.
Unfortunately, we live in the real world. There are many cases where shoehorn
is the best choice:
For each example below, imagine that the following types are defined:
type Request = {
body: {
id: string;
};
// Imagine oodles of other properties...
};
// The function we're testing
const requiresRequest = (request: Request) => {};
fromPartial
Lets you pass a deep partial to a slot expecting a type.
import { fromPartial } from "@total-typescript/shoehorn";
requiresRequest(
fromPartial({
body: {
id: "123",
},
}),
);
It'll fail if you pass a type that doesn't match the one expected:
// Type "1234123" has no properties in common
// with type 'PartialObjectDeep<Request>'
requiresRequest(fromPartial("1234123"));
fromAny
Lets you pass anything to a slot, while still giving you autocomplete on the original type:
import { fromAny } from "@total-typescript/shoehorn";
requiresRequest(
fromAny({
body: {
id: 124123,
},
}),
);
It WILL NOT FAIL if you pass something that doesn't match.
// All good!
requiresRequest(fromPartial("1234123"));
fromExact
A convenience method for forcing you to pass all the properties of a type. Useful for when you want to swap in and out of fromPartial
/fromAny
:
import { fromExact } from "@total-typescript/shoehorn";
requiresRequest(
// Will fail! We're not passing all the oodles of
// properties of Request
fromExact({
body: {
id: 124123,
},
}),
);
0.1.0
FAQs
Work seamlessly with partial mocks in TypeScript.
The npm package @total-typescript/shoehorn receives a total of 30,636 weekly downloads. As such, @total-typescript/shoehorn popularity was classified as popular.
We found that @total-typescript/shoehorn demonstrated a healthy version release cadence and project activity because the last version was released less than 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
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.