@rudderstack/integrations-lib
Version:
A comprehensive TypeScript library providing shared utilities, SDKs, and tools for RudderStack integrations and destinations.
40 lines • 6.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FeatureFlagUtils = void 0;
class FeatureFlagUtils {
static normalizeKey(key) {
return key.toLowerCase().replace(/[^a-z0-9-_]/g, '-');
}
static validateDefinition(definition) {
if (!definition.key || typeof definition.key !== 'string') {
throw new Error('Flag definition must have a valid key');
}
if (!definition.name || typeof definition.name !== 'string') {
throw new Error('Flag definition must have a valid name');
}
if (!definition.description || typeof definition.description !== 'string') {
throw new Error('Flag definition must have a valid description');
}
if (definition.defaultValue === undefined) {
throw new Error('Flag definition must have a defaultValue');
}
if (!['boolean', 'string', 'number'].includes(definition.type)) {
throw new Error('Flag definition type must be boolean, string, or number');
}
// Validate defaultValue matches type
const actualType = typeof definition.defaultValue;
if (actualType !== definition.type) {
throw new Error(`Flag defaultValue type (${actualType}) does not match declared type (${definition.type})`);
}
}
static createWorkspaceEnvKey(flagName, workspaceId) {
const normalizedFlag = flagName.toUpperCase().replace(/-/g, '_');
return `FEATURE_FLAG_LOCAL__${workspaceId}__${normalizedFlag}`;
}
static createGlobalEnvKey(flagName) {
const normalizedFlag = flagName.toUpperCase().replace(/-/g, '_');
return `FEATURE_FLAG_LOCAL_${normalizedFlag}`;
}
}
exports.FeatureFlagUtils = FeatureFlagUtils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy9jb3JlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBVztRQUM3QixPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBaUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksT0FBTyxVQUFVLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLElBQUksT0FBTyxVQUFVLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFFRCxxQ0FBcUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ2xELElBQUksVUFBVSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUNiLDJCQUEyQixVQUFVLG1DQUFtQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQzNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLFdBQW1CO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sdUJBQXVCLFdBQVcsS0FBSyxjQUFjLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQWdCO1FBQ3hDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sc0JBQXNCLGNBQWMsRUFBRSxDQUFDO0lBQ2hELENBQUM7Q0FDRjtBQXhDRCw0Q0F3Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnRGVmaW5pdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEZlYXR1cmVGbGFnVXRpbHMge1xuICBzdGF0aWMgbm9ybWFsaXplS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktX10vZywgJy0nKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmluaXRpb24oZGVmaW5pdGlvbjogRmVhdHVyZUZsYWdEZWZpbml0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFkZWZpbml0aW9uLmtleSB8fCB0eXBlb2YgZGVmaW5pdGlvbi5rZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZsYWcgZGVmaW5pdGlvbiBtdXN0IGhhdmUgYSB2YWxpZCBrZXknKTtcbiAgICB9XG4gICAgaWYgKCFkZWZpbml0aW9uLm5hbWUgfHwgdHlwZW9mIGRlZmluaXRpb24ubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmxhZyBkZWZpbml0aW9uIG11c3QgaGF2ZSBhIHZhbGlkIG5hbWUnKTtcbiAgICB9XG4gICAgaWYgKCFkZWZpbml0aW9uLmRlc2NyaXB0aW9uIHx8IHR5cGVvZiBkZWZpbml0aW9uLmRlc2NyaXB0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGbGFnIGRlZmluaXRpb24gbXVzdCBoYXZlIGEgdmFsaWQgZGVzY3JpcHRpb24nKTtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24uZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmxhZyBkZWZpbml0aW9uIG11c3QgaGF2ZSBhIGRlZmF1bHRWYWx1ZScpO1xuICAgIH1cbiAgICBpZiAoIVsnYm9vbGVhbicsICdzdHJpbmcnLCAnbnVtYmVyJ10uaW5jbHVkZXMoZGVmaW5pdGlvbi50eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGbGFnIGRlZmluaXRpb24gdHlwZSBtdXN0IGJlIGJvb2xlYW4sIHN0cmluZywgb3IgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGVmYXVsdFZhbHVlIG1hdGNoZXMgdHlwZVxuICAgIGNvbnN0IGFjdHVhbFR5cGUgPSB0eXBlb2YgZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGFjdHVhbFR5cGUgIT09IGRlZmluaXRpb24udHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmxhZyBkZWZhdWx0VmFsdWUgdHlwZSAoJHthY3R1YWxUeXBlfSkgZG9lcyBub3QgbWF0Y2ggZGVjbGFyZWQgdHlwZSAoJHtkZWZpbml0aW9uLnR5cGV9KWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVXb3Jrc3BhY2VFbnZLZXkoZmxhZ05hbWU6IHN0cmluZywgd29ya3NwYWNlSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZsYWcgPSBmbGFnTmFtZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoLy0vZywgJ18nKTtcbiAgICByZXR1cm4gYEZFQVRVUkVfRkxBR19MT0NBTF9fJHt3b3Jrc3BhY2VJZH1fXyR7bm9ybWFsaXplZEZsYWd9YDtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVHbG9iYWxFbnZLZXkoZmxhZ05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZsYWcgPSBmbGFnTmFtZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoLy0vZywgJ18nKTtcbiAgICByZXR1cm4gYEZFQVRVUkVfRkxBR19MT0NBTF8ke25vcm1hbGl6ZWRGbGFnfWA7XG4gIH1cbn1cbiJdfQ==