Dive into secure and efficient coding practices with our curated list of the top 10 examples showcasing 'fp-ts' in functional components in JavaScript. Our advanced machine learning engine meticulously scans each line of code, cross-referencing millions of open source libraries to ensure your implementation is not just functional, but also robust and secure. Elevate your React applications to new heights by mastering the art of handling side effects, API calls, and asynchronous operations with confidence and precision.
export function assertFailure(codec: t.Any, value: unknown, errors: Array): void {
const result = codec.decode(value)
pipe(
result,
fold(
() => {
assert.deepStrictEqual(PathReporter.report(result), errors)
},
/* istanbul ignore next */
() => {
throw new Error(`${result} is not a left`)
}
)
)
}
export function assertStrictEqual(result: t.Validation, expected: any): void {
pipe(
result,
fold(
/* istanbul ignore next */
() => {
throw new Error(`${result} is not a right`)
},
a => {
assert.deepStrictEqual(a, expected)
}
)
)
}
() =>
pipe(
T.race(breakerError, waitFiberSlot(fiberSlot)),
T.foldExit(
c => pushBreaker.cause(c), // if we get a latchError forward it through to downstream
constant(pushQueue.offer(none)) // otherwise we are done, so lets forward that
)
),
next =>
T.async(res => {
if (leftover.length > 0) {
res(Ei.right(O.some(leftover.splice(0, batch))));
} else {
if (errors.length > 0) {
res(Ei.left(errors[0]));
} else {
if (open) {
res(Ei.right(O.some([])));
} else {
res(Ei.right(O.none));
}
}
}
// tslint:disable-next-line: no-empty
return () => {};
}),
every
op: Ops,
callback: (r: E.Either>) => void
): () => void {
switch (op._tag) {
case "error":
callback(E.left(op.e));
// this will never be called
/* istanbul ignore next */
// tslint:disable-next-line: no-empty
return () => {};
case "complete":
callback(E.right(O.none));
// tslint:disable-next-line: no-empty
return () => {};
case "offer":
callback(E.right(O.some(op.a)));
// tslint:disable-next-line: no-empty
return () => {};
}
}
// FIXME: check for more methods as necessary
if (!recipientAddress && extrinsic && extrinsic.method.methodName === 'transfer') {
errors.recipientAddress = 'Please enter a recipient address.';
}
if (currentAccount === recipientAddress) {
errors.currentAccount = 'You cannot send balance to yourself.';
}
if (!amountAsString) {
errors.amount = 'Please enter an amount';
}
return Object.keys(errors).length
? left(errors)
: right({ amountAsString, currentAccount, recipientAddress, extrinsic, ...rest } as Partial & UserInputs);
}
if (isLeft(errorOrAttachment)) {
return left(
TransientError("Cannot store message content")
);
}
// Now that the message content has been stored, we can make the message
// visible to getMessages by changing the pending flag to false
const updatedMessageOrError = await lMessageModel.createOrUpdate(
{
...newMessageWithoutContent,
isPending: false
},
createdMessageEvent.message.fiscalCode
);
if (isLeft(updatedMessageOrError)) {
return left(
TransientError("Cannot update message pending status")
);
}
//
// Email notification
//
// check if the user has blocked emails sent from this service
// 'some(true)' in case we must send the notification by email
// 'none' in case the user has blocked the email channel
const isEmailBlockedForService = blockedInboxOrChannels.has(
BlockedInboxOrChannelEnum.EMAIL
);
if (isLeft(errorOrActiveMessage)) {
// if the message is expired no more processing is necessary
return left(
ExpiredError(
`Message expired|notification=${notificationId}|message=${message.id}`
)
);
}
// fetch the notification
const errorOrMaybeNotification = await lNotificationModel.find(
notificationId,
message.id
);
if (isLeft(errorOrMaybeNotification)) {
const error = errorOrMaybeNotification.value;
// we got an error while fetching the notification
return left(
TransientError(
`Error while fetching the notification|notification=${notificationId}|message=${
message.id
}|error=${error.code}`
)
);
}
const maybeEmailNotification = errorOrMaybeNotification.value;
if (isNone(maybeEmailNotification)) {
// it may happen that the object is not yet visible to this function due to latency
// as the notification object is retrieved from database (?)
static fromRawString(rawData: string) {
const data = JSON.parse(rawData)
// TODO: We should validate:
// 1. data.claims being an array
// 2. payload being JSON-parsable
// This is hard to put into io-ts + we need to eventually do signature checking
const parsedData = {
claims: data.claims.map((claim: any) => ({
payload: JSON.parse(claim.payload),
signature: claim.signature,
})),
}
const validatedData = IdentityMetadataType.decode(parsedData)
if (isLeft(validatedData)) {
// TODO: We could probably return a more useful error in the future
throw new Error(PathReporter.report(validatedData).join(', '))
}
return new IdentityMetadataWrapper(validatedData.right)
}
// the user is allowed to see the message when he is either
// a trusted application or he is the sender of the message
const isUserAllowed =
canListMessages ||
retrievedMessage.senderServiceId === userAttributes.service.serviceId;
if (!isUserAllowed) {
// the user is not allowed to see the message
return ResponseErrorForbiddenNotAuthorized;
}
const errorOrMaybeNotification = await notificationModel.findNotificationForMessage(
retrievedMessage.id
);
if (isLeft(errorOrMaybeNotification)) {
// query failed
return ResponseErrorQuery(
"Error while retrieving the notification status",
errorOrMaybeNotification.value
);
}
const maybeNotification = errorOrMaybeNotification.value;
const maybeNotificationStatus = maybeNotification.map(n => {
return {
email: n.emailNotification ? n.emailNotification.status : undefined
};
});
const maybeContentOrError = await messageModel.getStoredContent(