33 lines
1.1 KiB
TypeScript
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;
|
|
}
|