You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
"use strict";
|
|
|
|
const lookupTimezoneName = require("../lookup-timezone-name");
|
|
|
|
module.exports = {
|
|
// Note that this mapping can be used to determine the losslessness of both forward and backward migrations!
|
|
types: {
|
|
bytes: {
|
|
requiredAttributes: new Set([ "required" ]),
|
|
losslessConversionTo: {}
|
|
},
|
|
string: {
|
|
requiredAttributes: new Set([ "required" ]),
|
|
losslessConversionTo: {
|
|
bytes: (string) => Buffer.from(string, "utf8")
|
|
}
|
|
},
|
|
decimal: {
|
|
requiredAttributes: new Set([ "required", "signed", "precision" ]),
|
|
losslessConversionTo: {
|
|
// Decimals are already internally represented as strings
|
|
string: (decimal) => decimal
|
|
}
|
|
},
|
|
integer: {
|
|
requiredAttributes: new Set([ "required", "signed" ]),
|
|
losslessConversionTo: {
|
|
string: (integer) => String(integer),
|
|
decimal: (integer) => String(integer)
|
|
}
|
|
},
|
|
boolean: {
|
|
requiredAttributes: new Set([ "required" ]),
|
|
losslessConversionTo: {}
|
|
},
|
|
date: {
|
|
requiredAttributes: new Set([ "required", "withTimezone" ]),
|
|
losslessConversionTo: {}
|
|
},
|
|
duration: {
|
|
requiredAttributes: new Set([ "required" ]),
|
|
losslessConversionTo: {}
|
|
},
|
|
},
|
|
attributes: {
|
|
precision: {
|
|
validForTypes: new Set([ "decimal" ]),
|
|
isLossless: (oldSetting, newSetting) => (newSetting > oldSetting),
|
|
losslessTransformer: (value) => value, // No change to value
|
|
requiresMigrationDefault: false
|
|
},
|
|
signed: {
|
|
validForTypes: new Set([ "decimal", "integer" ]),
|
|
isLossless: (oldSetting, newSetting) => (oldSetting === false && newSetting === true),
|
|
losslessTransformer: (value, _oldAttribute, _newAttribute) => value, // No change
|
|
requiresMigrationDefault: false,
|
|
},
|
|
withTimezone: {
|
|
validForTypes: new Set([ "date" ]),
|
|
isLossless: (oldSetting, newSetting) => (oldSetting === false && newSetting === true),
|
|
losslessTransformer: (value) => ({
|
|
... value,
|
|
timezone: lookupTimezoneName("Etc/UTC")
|
|
}),
|
|
requiresMigrationDefault: false
|
|
},
|
|
required: {
|
|
// Valid for all types
|
|
validForTypes: true,
|
|
isLossless: true,
|
|
requiresMigrationDefault: true
|
|
}
|
|
},
|
|
operations: {
|
|
//
|
|
}
|
|
};
|