Files
ELY-Browser/cloudflare/src/kv_keys.ts
T

33 lines
1.1 KiB
TypeScript

const KV_NAMESPACE_PREFIX = "ely";
const ENVIRONMENT_NAME_PATTERN = /^[a-z0-9._-]{3,64}$/;
const KV_KEY_PART_PATTERN = /^[a-z0-9._-]{3,128}$/;
export class KvKeySchemaError extends Error {
constructor(message: string) {
super(message);
this.name = "KvKeySchemaError";
}
}
export function prefixedKvKey(environment: string, namespace: string): string {
const normalizedEnvironment = normalizedEnvironmentName(environment);
const normalizedNamespace = normalizedKvKeyPart("KV namespace", namespace);
return `${KV_NAMESPACE_PREFIX}:${normalizedEnvironment}:${normalizedNamespace}`;
}
function normalizedEnvironmentName(value: string): string {
const environment = value.trim();
if (!ENVIRONMENT_NAME_PATTERN.test(environment)) {
throw new KvKeySchemaError(`invalid environment name: ${value}`);
}
return environment;
}
function normalizedKvKeyPart(label: string, value: string): string {
const keyPart = value.trim();
if (!KV_KEY_PART_PATTERN.test(keyPart)) {
throw new KvKeySchemaError(`invalid ${label}: ${value}`);
}
return keyPart;
}