Now handles top level files and recursive files in folders. Set max line length to be 100
137 lines
3.5 KiB
JavaScript
137 lines
3.5 KiB
JavaScript
import Parse from 'parse/node';
|
|
import deepcopy from 'deepcopy';
|
|
|
|
export function isPushIncrementing(body) {
|
|
if (!body.data || !body.data.badge) {
|
|
return false;
|
|
}
|
|
|
|
const badge = body.data.badge;
|
|
if (typeof badge == 'string' && badge.toLowerCase() == 'increment') {
|
|
return true;
|
|
}
|
|
|
|
return (
|
|
typeof badge == 'object' &&
|
|
typeof badge.__op == 'string' &&
|
|
badge.__op.toLowerCase() == 'increment' &&
|
|
Number(badge.amount)
|
|
);
|
|
}
|
|
|
|
const localizableKeys = ['alert', 'title'];
|
|
|
|
export function getLocalesFromPush(body) {
|
|
const data = body.data;
|
|
if (!data) {
|
|
return [];
|
|
}
|
|
return [
|
|
...new Set(
|
|
Object.keys(data).reduce((memo, key) => {
|
|
localizableKeys.forEach(localizableKey => {
|
|
if (key.indexOf(`${localizableKey}-`) == 0) {
|
|
memo.push(key.slice(localizableKey.length + 1));
|
|
}
|
|
});
|
|
return memo;
|
|
}, [])
|
|
),
|
|
];
|
|
}
|
|
|
|
export function transformPushBodyForLocale(body, locale) {
|
|
const data = body.data;
|
|
if (!data) {
|
|
return body;
|
|
}
|
|
body = deepcopy(body);
|
|
localizableKeys.forEach(key => {
|
|
const localeValue = body.data[`${key}-${locale}`];
|
|
if (localeValue) {
|
|
body.data[key] = localeValue;
|
|
}
|
|
});
|
|
return stripLocalesFromBody(body);
|
|
}
|
|
|
|
export function stripLocalesFromBody(body) {
|
|
if (!body.data) {
|
|
return body;
|
|
}
|
|
Object.keys(body.data).forEach(key => {
|
|
localizableKeys.forEach(localizableKey => {
|
|
if (key.indexOf(`${localizableKey}-`) == 0) {
|
|
delete body.data[key];
|
|
}
|
|
});
|
|
});
|
|
return body;
|
|
}
|
|
|
|
export function bodiesPerLocales(body, locales = []) {
|
|
// Get all tranformed bodies for each locale
|
|
const result = locales.reduce((memo, locale) => {
|
|
memo[locale] = transformPushBodyForLocale(body, locale);
|
|
return memo;
|
|
}, {});
|
|
// Set the default locale, with the stripped body
|
|
result.default = stripLocalesFromBody(body);
|
|
return result;
|
|
}
|
|
|
|
export function groupByLocaleIdentifier(installations, locales = []) {
|
|
return installations.reduce(
|
|
(map, installation) => {
|
|
let added = false;
|
|
locales.forEach(locale => {
|
|
if (added) {
|
|
return;
|
|
}
|
|
if (installation.localeIdentifier && installation.localeIdentifier.indexOf(locale) === 0) {
|
|
added = true;
|
|
map[locale] = map[locale] || [];
|
|
map[locale].push(installation);
|
|
}
|
|
});
|
|
if (!added) {
|
|
map.default.push(installation);
|
|
}
|
|
return map;
|
|
},
|
|
{ default: [] }
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Check whether the deviceType parameter in qury condition is valid or not.
|
|
* @param {Object} where A query condition
|
|
* @param {Array} validPushTypes An array of valid push types(string)
|
|
*/
|
|
export function validatePushType(where = {}, validPushTypes = []) {
|
|
var deviceTypeField = where.deviceType || {};
|
|
var deviceTypes = [];
|
|
if (typeof deviceTypeField === 'string') {
|
|
deviceTypes.push(deviceTypeField);
|
|
} else if (Array.isArray(deviceTypeField['$in'])) {
|
|
deviceTypes.concat(deviceTypeField['$in']);
|
|
}
|
|
for (var i = 0; i < deviceTypes.length; i++) {
|
|
var deviceType = deviceTypes[i];
|
|
if (validPushTypes.indexOf(deviceType) < 0) {
|
|
throw new Parse.Error(
|
|
Parse.Error.PUSH_MISCONFIGURED,
|
|
deviceType + ' is not supported push type.'
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
export function applyDeviceTokenExists(where) {
|
|
where = deepcopy(where);
|
|
if (!Object.prototype.hasOwnProperty.call(where, 'deviceToken')) {
|
|
where['deviceToken'] = { $exists: true };
|
|
}
|
|
return where;
|
|
}
|