getValueSync
Get a value from the registry synchronously. Does not support async processors.
Import
import { getValueSync, addProcessor } from '@evershop/evershop/lib/util/registry';
Syntax
getValueSync<T>(
name: string,
initialization: T | SyncProcessor<T>,
context: Record<string, any>,
validator?: (value: T) => boolean
): T
Parameters
name
Type: string
The unique name of the value in the registry.
initialization
Type: T | SyncProcessor<T>
The initial value or a synchronous function that returns the initial value.
context
Type: Record<string, any>
Context object passed to processors.
validator
Type: (value: T) => boolean (optional)
Validation function called after each processor.
Return Value
Returns the processed value of type T.
Examples
Basic Usage
import { getValueSync } from '@evershop/evershop/lib/util/registry';
// Get a simple value synchronously
const config = getValueSync('appConfig', defaultConfig, {});
// Get with initialization function
const routes = getValueSync(
'adminRoutes',
() => {
return loadRoutesSync();
},
{ area: 'admin' }
);
With Processors
import { getValueSync, addProcessor } from '@evershop/evershop/lib/util/registry';
// Register synchronous processors
addProcessor('menuItems', (items) => {
// Filter by permission
return items.filter(item => item.permission);
}, 10);
addProcessor('menuItems', (items) => {
// Sort by position
return items.sort((a, b) => a.position - b.position);
}, 20);
// Get processed value
const menu = getValueSync('menuItems', defaultMenuItems, {});
With Context
import { getValueSync, addProcessor } from '@evershop/evershop/lib/util/registry';
// Processor using context
addProcessor('navigationLinks', function(links) {
// Access context via 'this'
const userRole = this.userRole;
// Filter links by role
return links.filter(link => {
if (!link.roles) return true;
return link.roles.includes(userRole);
});
}, 10);
// Get value with context
const links = getValueSync(
'navigationLinks',
allLinks,
{ userRole: 'admin' }
);
With Validation
import { getValueSync } from '@evershop/evershop/lib/util/registry';
// Validator function
function validateConfig(config) {
if (!config.apiKey) {
return false;
}
return true;
}
// Get value with validation
try {
const config = getValueSync(
'apiConfig',
{ apiKey: '' },
{},
validateConfig
);
} catch (error) {
console.error('Validation failed:', error);
}
Complete Example
import { getValueSync, addProcessor } from '@evershop/evershop/lib/util/registry';
// Register processors for admin menu
addProcessor('adminMenu', (menu) => {
// Add default items
menu.push({
label: 'Dashboard',
url: '/admin',
position: 1
});
return menu;
}, 5);
addProcessor('adminMenu', (menu) => {
// Sort by position
return menu.sort((a, b) => a.position - b.position);
}, 100);
// Get the processed menu
const adminMenu = getValueSync('adminMenu', [], {});
Caching
The registry caches processed values. A cached value is returned if:
- The initialization value is identical
- The context is identical
- A value has been computed
import { getValueSync } from '@evershop/evershop/lib/util/registry';
// First call - processes value
const data1 = getValueSync('configData', defaultConfig, { env: 'prod' });
// Second call - returns cached value (processors not executed)
const data2 = getValueSync('configData', defaultConfig, { env: 'prod' });
// Different context - processes value again
const data3 = getValueSync('configData', defaultConfig, { env: 'dev' });
Bootstrap Location
Processors must be registered during application bootstrap:
// extensions/my-extension/bootstrap.ts
import { addProcessor } from '@evershop/evershop/lib/util/registry';
export default function bootstrap() {
addProcessor('themeConfig', (config) => {
// Add theme customization
config.customColors = {
primary: '#FF6B6B',
secondary: '#4ECDC4'
};
return config;
});
}
Notes
- Values are cached based on initialization value and context
- Processors execute in priority order (lower numbers first)
- Maximum priority is 1000
- Only synchronous processors are supported
- If a processor returns a Promise, an error is thrown
- If a processor returns
undefined, a warning is logged - Processors are locked after bootstrap
- Context is passed to processors via the
thiskeyword
See Also
- getValue - Async version
- addProcessor - Register value processors