add utility function mergeEnvVarsWithDefaults

This commit is contained in:
Dave Horton
2025-05-10 10:10:36 -04:00
parent aacc6136c5
commit ced40a58b9
2 changed files with 33 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
const Jambonz = require('./rest/jambonz');
const { validateAppConfig, getAppConfig, schema } = require('./validator');
const { validateAppConfig, getAppConfig, mergeEnvVarsWithDefaults, schema } = require('./validator');
const initializer = (accountSid, apiKey, opts) => {
return new Jambonz(accountSid, apiKey, opts);
@@ -12,6 +12,7 @@ initializer.WsSession = require('./jambonz/ws-session');
initializer.validateAppConfig = validateAppConfig;
initializer.getAppConfig = getAppConfig;
initializer.appSchema = schema;
initializer.mergeEnvVarsWithDefaults = mergeEnvVarsWithDefaults;
initializer.handleProtocols = (protocols) => {
if (!protocols.has('ws.jambonz.org')) return false;
return 'ws.jambonz.org';

View File

@@ -3,7 +3,7 @@ const addFormats = require('ajv-formats');
const fs = require('fs');
const path = require('path');
const schemaPath = path.join(__dirname, 'schema/app-schema.json');
const schemaPath = path.join(__dirname, './schema/app-schema.json');
const schema = JSON.parse(fs.readFileSync(schemaPath, 'utf8'));
/**
@@ -149,8 +149,38 @@ function validateAppConfig(config) {
}
}
const mergeEnvVarsWithDefaults = (env_vars, route, schema) => {
env_vars = env_vars || {};
const merged = {...env_vars};
// First handle global properties (those not starting with /)
Object.entries(schema).forEach(([propName, propSchema]) => {
if (!propName.startsWith('/')) {
if (!(propName in merged) && 'default' in propSchema) {
merged[propName] = propSchema.default;
}
}
});
// Then handle route-specific properties
const routeSchema = schema[route];
if (!routeSchema) {
return merged;
}
Object.entries(routeSchema).forEach(([propName, propSchema]) => {
if (!(propName in merged) && 'default' in propSchema) {
merged[propName] = propSchema.default;
}
});
return merged;
};
module.exports = {
validateAppConfig,
getAppConfig,
mergeEnvVarsWithDefaults,
schema
};