Add context
to Message.upgradeSchema
Allows us to pass in Electron/Node.js specific functions. This allows better unit testing in Mocha where we don’t have access to Electron APIs.
This commit is contained in:
parent
ebe2a769c9
commit
aa82a2a5fb
1 changed files with 15 additions and 13 deletions
|
@ -73,7 +73,7 @@ exports.initializeSchemaVersion = (message) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Middleware
|
// Middleware
|
||||||
// type UpgradeStep = Message -> Promise Message
|
// type UpgradeStep = (Message, Context) -> Promise Message
|
||||||
|
|
||||||
// SchemaVersion -> UpgradeStep -> UpgradeStep
|
// SchemaVersion -> UpgradeStep -> UpgradeStep
|
||||||
exports._withSchemaVersion = (schemaVersion, upgrade) => {
|
exports._withSchemaVersion = (schemaVersion, upgrade) => {
|
||||||
|
@ -84,7 +84,7 @@ exports._withSchemaVersion = (schemaVersion, upgrade) => {
|
||||||
throw new TypeError('`upgrade` must be a function');
|
throw new TypeError('`upgrade` must be a function');
|
||||||
}
|
}
|
||||||
|
|
||||||
return async (message) => {
|
return async (message, context) => {
|
||||||
if (!exports.isValid(message)) {
|
if (!exports.isValid(message)) {
|
||||||
console.log('Message._withSchemaVersion: Invalid input message:', message);
|
console.log('Message._withSchemaVersion: Invalid input message:', message);
|
||||||
return message;
|
return message;
|
||||||
|
@ -109,7 +109,7 @@ exports._withSchemaVersion = (schemaVersion, upgrade) => {
|
||||||
|
|
||||||
let upgradedMessage;
|
let upgradedMessage;
|
||||||
try {
|
try {
|
||||||
upgradedMessage = await upgrade(message);
|
upgradedMessage = await upgrade(message, context);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(
|
console.log(
|
||||||
'Message._withSchemaVersion: error:',
|
'Message._withSchemaVersion: error:',
|
||||||
|
@ -137,16 +137,14 @@ exports._withSchemaVersion = (schemaVersion, upgrade) => {
|
||||||
|
|
||||||
// Public API
|
// Public API
|
||||||
// _mapAttachments :: (Attachment -> Promise Attachment) ->
|
// _mapAttachments :: (Attachment -> Promise Attachment) ->
|
||||||
// Message ->
|
// (Message, Context) ->
|
||||||
// Promise Message
|
// Promise Message
|
||||||
exports._mapAttachments = upgradeAttachment => async message =>
|
exports._mapAttachments = upgradeAttachment => async (message, context) => {
|
||||||
Object.assign(
|
const upgradeWithContext = attachment =>
|
||||||
{},
|
upgradeAttachment(attachment, context);
|
||||||
message,
|
const attachments = await Promise.all(message.attachments.map(upgradeWithContext));
|
||||||
{
|
return Object.assign({}, message, { attachments });
|
||||||
attachments: await Promise.all(message.attachments.map(upgradeAttachment)),
|
};
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const toVersion0 = async message =>
|
const toVersion0 = async message =>
|
||||||
exports.initializeSchemaVersion(message);
|
exports.initializeSchemaVersion(message);
|
||||||
|
@ -159,7 +157,11 @@ const toVersion2 = exports._withSchemaVersion(
|
||||||
2,
|
2,
|
||||||
exports._mapAttachments(Attachment.replaceUnicodeOrderOverrides)
|
exports._mapAttachments(Attachment.replaceUnicodeOrderOverrides)
|
||||||
);
|
);
|
||||||
|
const toVersion3 = exports._withSchemaVersion(
|
||||||
|
3,
|
||||||
|
exports._mapAttachments(Attachment.migrateDataToFileSystem)
|
||||||
|
);
|
||||||
|
|
||||||
// UpgradeStep
|
// UpgradeStep
|
||||||
exports.upgradeSchema = async message =>
|
exports.upgradeSchema = async (message, context) =>
|
||||||
toVersion2(await toVersion1(await toVersion0(message)));
|
toVersion2(await toVersion1(await toVersion0(message)));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue