1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.assertKeyTypes = exports.requireKeys = void 0;
- const error_1 = require("../../../../error");
- function requireKeys(prefix, yaml, ...keys) {
- if (prefix) {
- prefix = prefix + ".";
- }
- for (const key of keys) {
- if (!yaml[key]) {
- throw new error_1.FirebaseError(`Expected key ${prefix + key.toString()}`);
- }
- }
- }
- exports.requireKeys = requireKeys;
- function assertKeyTypes(prefix, yaml, schema) {
- if (!yaml) {
- return;
- }
- for (const [keyAsString, value] of Object.entries(yaml)) {
- const key = keyAsString;
- const fullKey = prefix ? `${prefix}.${keyAsString}` : keyAsString;
- if (!schema[key] || schema[key] === "omit") {
- throw new error_1.FirebaseError(`Unexpected key ${fullKey}. You may need to install a newer version of the Firebase CLI.`);
- }
- let schemaType = schema[key];
- if (typeof schemaType === "function") {
- if (!schemaType(value)) {
- const friendlyName = value === null ? "null" : Array.isArray(value) ? "array" : typeof value;
- throw new error_1.FirebaseError(`${friendlyName} ${fullKey} failed validation`);
- }
- continue;
- }
- if (value === null) {
- if (schemaType.endsWith("?")) {
- continue;
- }
- throw new error_1.FirebaseError(`Expected ${fullKey} to be type ${schemaType}; was null`);
- }
- if (schemaType.endsWith("?")) {
- schemaType = schemaType.slice(0, schemaType.length - 1);
- }
- if (schemaType.includes("Field")) {
- const match = /^Field<(\w+)>$/.exec(schemaType);
- if (match && typeof value !== "string" && typeof value !== match[1]) {
- throw new error_1.FirebaseError(`Expected ${fullKey} to be Field<${match[1]}>; was ${typeof value}`);
- }
- continue;
- }
- if (schemaType === "List") {
- if (typeof value !== "string" && !Array.isArray(value)) {
- throw new error_1.FirebaseError(`Expected ${fullKey} to be a field list (array or list expression); was ${typeof value}`);
- }
- continue;
- }
- if (value === null) {
- if (schemaType.endsWith("?")) {
- continue;
- }
- throw new error_1.FirebaseError(`Expected ${fullKey}} to be type ${schemaType}; was null`);
- }
- if (schemaType.endsWith("?")) {
- schemaType = schemaType.slice(0, schemaType.length - 1);
- }
- if (schemaType === "string") {
- if (typeof value !== "string") {
- throw new error_1.FirebaseError(`Expected ${fullKey} to be type string; was ${typeof value}`);
- }
- }
- else if (schemaType === "number") {
- if (typeof value !== "number") {
- throw new error_1.FirebaseError(`Expected ${fullKey} to be type number; was ${typeof value}`);
- }
- }
- else if (schemaType === "boolean") {
- if (typeof value !== "boolean") {
- throw new error_1.FirebaseError(`Expected ${fullKey} to be type boolean; was ${typeof value}`);
- }
- }
- else if (schemaType === "array") {
- if (!Array.isArray(value)) {
- throw new error_1.FirebaseError(`Expected ${fullKey} to be type array; was ${typeof value}`);
- }
- }
- else if (schemaType === "object") {
- if (value === null || typeof value !== "object" || Array.isArray(value)) {
- throw new error_1.FirebaseError(`Expected ${fullKey} to be type object; was ${typeof value}`);
- }
- }
- else {
- throw new error_1.FirebaseError("YAML validation is missing a handled type " + schema[key]);
- }
- }
- }
- exports.assertKeyTypes = assertKeyTypes;
|