@comake/skl-js-engine
Version:
Standard Knowledge Language Javascript Engine
61 lines (52 loc) • 1.75 kB
text/typescript
import type { PermissionConfig } from './types';
/**
* Builds Deno permissions array based on options
* @param config - Permission configuration
* @returns Array of permission strings for Deno command
*/
export function buildDenoPermissions(config: PermissionConfig): string[] {
const permissions: string[] = [];
// Add network permissions if enabled
if (config.allowNetwork) {
if (config.allowedDomains.length > 0) {
permissions.push(`--allow-net=${config.allowedDomains.join(',')}`);
} else {
permissions.push('--allow-net');
}
}
// Add env permissions if enabled
if (config.allowEnv) {
permissions.push('--allow-env');
}
// Add read permissions if enabled
if (config.allowRead) {
permissions.push('--allow-read');
}
return permissions;
}
/**
* Basic domain validation
* @param domain - Domain to validate
* @returns True if domain format is valid
*/
function isValidDomain(domain: string): boolean {
// Basic domain validation - can be enhanced as needed
const domainRegex = /^[\dA-Za-z]([\dA-Za-z-]{0,61}[\dA-Za-z])?(\.[\dA-Za-z]([\dA-Za-z-]{0,61}[\dA-Za-z])?)*$/u;
return domainRegex.test(domain) && domain.length <= 253;
}
/**
* Validates permission configuration
* @param config - Permission configuration to validate
* @throws Error if configuration is invalid
*/
export function validatePermissionConfig(config: PermissionConfig): void {
if (config.allowedDomains.length > 0 && !config.allowNetwork) {
throw new Error('allowedDomains specified but allowNetwork is false');
}
// Validate domain format
for (const domain of config.allowedDomains) {
if (!isValidDomain(domain)) {
throw new Error(`Invalid domain format: ${domain}`);
}
}
}