Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 8x 8x 8x 8x 8x 8x 8x 8x 8x 11x 1x 10x 3x 7x 8x 8x 10x 10x 8x 19x 8x 8x 6x 6x 6x 4x 2x 5x 5x 5x 2x 8x 8x 87x 8x | 'use strict';
/*
* Copyright 2021 Algolia
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import * as functions from 'firebase-functions';
import { DocumentSnapshot } from 'firebase-functions/lib/providers/firestore';
import { Config } from './config';
import * as logs from './logs';
import { valueProcessor } from './processors';
export enum ChangeType {
CREATE,
DELETE,
UPDATE,
}
export const getChangeType = (change: functions.Change<DocumentSnapshot>) => {
if (!change.after.exists) {
return ChangeType.DELETE;
}
if (!change.before.exists) {
return ChangeType.CREATE;
}
return ChangeType.UPDATE;
};
export const getObjectSizeInBytes = (object: [] | {}) => {
const recordBuffer = Buffer.from(JSON.stringify(object));
return recordBuffer.byteLength;
};
export const getFields = (config: Pick<Config, 'fields'>) =>
config.fields ? config.fields.split(/[ ,]+/) : [];
export const areFieldsUpdated = (
config: Config,
before: DocumentSnapshot,
after: DocumentSnapshot
) => {
const fields = getFields(config);
logs.debug(`fields: ${fields}`);
// If fields are not configured, then execute update record.
if (fields.length == 0) {
return true;
}
// If fields are configured, then check the before and after data for the specified fields.
// If any changes detected, then execute update record.
for (let field of fields) {
const [, beforeFieldValue] = valueProcessor(field, before.get(field));
const [, afterFieldValue] = valueProcessor(field, after.get(field));
if (JSON.stringify(beforeFieldValue) !== JSON.stringify(afterFieldValue)) {
return true;
}
}
return false;
};
export const isValidValue = (value) => {
return typeof value !== undefined && value !== null;
};
|