firebase-tools
Version:
Command-Line Interface for Firebase
158 lines (157 loc) • 5.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.compareFieldOverride = exports.compareApiField = exports.compareApiBackupSchedule = exports.compareApiBackup = exports.compareLocation = exports.compareApiDatabase = exports.compareApiIndex = exports.compareSpecIndex = void 0;
const API = require("./api-types");
const util = require("./util");
const QUERY_SCOPE_SEQUENCE = [
API.QueryScope.COLLECTION_GROUP,
API.QueryScope.COLLECTION,
undefined,
];
const ORDER_SEQUENCE = [API.Order.ASCENDING, API.Order.DESCENDING, undefined];
const ARRAY_CONFIG_SEQUENCE = [API.ArrayConfig.CONTAINS, undefined];
function compareSpecIndex(a, b) {
if (a.collectionGroup !== b.collectionGroup) {
return a.collectionGroup.localeCompare(b.collectionGroup);
}
if (a.queryScope !== b.queryScope) {
return compareQueryScope(a.queryScope, b.queryScope);
}
return compareArrays(a.fields, b.fields, compareIndexField);
}
exports.compareSpecIndex = compareSpecIndex;
function compareApiIndex(a, b) {
if (a.name && b.name) {
const aName = util.parseIndexName(a.name);
const bName = util.parseIndexName(b.name);
if (aName.collectionGroupId !== bName.collectionGroupId) {
return aName.collectionGroupId.localeCompare(bName.collectionGroupId);
}
}
if (a.queryScope !== b.queryScope) {
return compareQueryScope(a.queryScope, b.queryScope);
}
return compareArrays(a.fields, b.fields, compareIndexField);
}
exports.compareApiIndex = compareApiIndex;
function compareApiDatabase(a, b) {
return a.name > b.name ? 1 : -1;
}
exports.compareApiDatabase = compareApiDatabase;
function compareLocation(a, b) {
return a.locationId > b.locationId ? 1 : -1;
}
exports.compareLocation = compareLocation;
function compareApiBackup(a, b) {
const aLocation = a.name.split("/")[3];
const bLocation = b.name.split("/")[3];
if (aLocation && bLocation && aLocation !== bLocation) {
return aLocation > bLocation ? 1 : -1;
}
if (a.snapshotTime && b.snapshotTime && a.snapshotTime !== b.snapshotTime) {
return a.snapshotTime > b.snapshotTime ? -1 : 1;
}
return a.name > b.name ? 1 : -1;
}
exports.compareApiBackup = compareApiBackup;
function compareApiBackupSchedule(a, b) {
if (a.dailyRecurrence && !b.dailyRecurrence) {
return -1;
}
else if (a.weeklyRecurrence && b.dailyRecurrence) {
return 1;
}
return a.name > b.name ? 1 : -1;
}
exports.compareApiBackupSchedule = compareApiBackupSchedule;
function compareApiField(a, b) {
const aName = util.parseFieldName(a.name);
const bName = util.parseFieldName(b.name);
if (aName.collectionGroupId !== bName.collectionGroupId) {
return aName.collectionGroupId.localeCompare(bName.collectionGroupId);
}
if (aName.fieldPath !== bName.fieldPath) {
return aName.fieldPath.localeCompare(bName.fieldPath);
}
return compareArraysSorted(a.indexConfig.indexes || [], b.indexConfig.indexes || [], compareApiIndex);
}
exports.compareApiField = compareApiField;
function compareFieldOverride(a, b) {
if (a.collectionGroup !== b.collectionGroup) {
return a.collectionGroup.localeCompare(b.collectionGroup);
}
const compareTtl = Number(!!a.ttl) - Number(!!b.ttl);
if (compareTtl) {
return compareTtl;
}
if (a.fieldPath !== b.fieldPath) {
return a.fieldPath.localeCompare(b.fieldPath);
}
return compareArraysSorted(a.indexes, b.indexes, compareFieldIndex);
}
exports.compareFieldOverride = compareFieldOverride;
function compareIndexField(a, b) {
if (a.fieldPath !== b.fieldPath) {
return a.fieldPath.localeCompare(b.fieldPath);
}
if (a.order !== b.order) {
return compareOrder(a.order, b.order);
}
if (a.arrayConfig !== b.arrayConfig) {
return compareArrayConfig(a.arrayConfig, b.arrayConfig);
}
if (a.vectorConfig !== b.vectorConfig) {
return compareVectorConfig(a.vectorConfig, b.vectorConfig);
}
return 0;
}
function compareFieldIndex(a, b) {
if (a.queryScope !== b.queryScope) {
return compareQueryScope(a.queryScope, b.queryScope);
}
if (a.order !== b.order) {
return compareOrder(a.order, b.order);
}
if (a.arrayConfig !== b.arrayConfig) {
return compareArrayConfig(a.arrayConfig, b.arrayConfig);
}
return 0;
}
function compareQueryScope(a, b) {
return QUERY_SCOPE_SEQUENCE.indexOf(a) - QUERY_SCOPE_SEQUENCE.indexOf(b);
}
function compareOrder(a, b) {
return ORDER_SEQUENCE.indexOf(a) - ORDER_SEQUENCE.indexOf(b);
}
function compareArrayConfig(a, b) {
return ARRAY_CONFIG_SEQUENCE.indexOf(a) - ARRAY_CONFIG_SEQUENCE.indexOf(b);
}
function compareVectorConfig(a, b) {
if (!a) {
if (!b) {
return 0;
}
else {
return 1;
}
}
else if (!b) {
return -1;
}
return a.dimension - b.dimension;
}
function compareArrays(a, b, fn) {
const minFields = Math.min(a.length, b.length);
for (let i = 0; i < minFields; i++) {
const cmp = fn(a[i], b[i]);
if (cmp !== 0) {
return cmp;
}
}
return a.length - b.length;
}
function compareArraysSorted(a, b, fn) {
const aSorted = a.sort(fn);
const bSorted = b.sort(fn);
return compareArrays(aSorted, bSorted, fn);
}