wext-manifest-transformer
Version:
Transformer that lets you specify `manifest.json` properties to appear only in specific browsers.
35 lines (34 loc) • 1.64 kB
JavaScript
import { CUSTOM_PREFIX_REGEX, browserVendors, envVariables, ENVKeys, } from "./constants.js";
export const transformer = (manifest, selectedVendor, nodeEnv) => {
if (Array.isArray(manifest)) {
return manifest.map((newManifest) => {
return transformer(newManifest, selectedVendor, nodeEnv);
});
}
if (typeof manifest === "object" && !!manifest) {
return Object.entries(manifest).reduce((newManifest, [key, value]) => {
const vendorMatch = key.match(CUSTOM_PREFIX_REGEX);
if (!!vendorMatch) {
const matches = vendorMatch[1]?.split("|") || [];
const isProd = nodeEnv === "production";
const hasCurrentVendor = matches.includes(selectedVendor);
const hasVendorKeys = matches.some((m) => browserVendors.includes(m));
const hasEnvKey = matches.some((m) => envVariables.includes(m));
const hasCurrentEnvKey = hasEnvKey &&
((isProd && matches.includes(ENVKeys.PROD)) ||
(!isProd && matches.includes(ENVKeys.DEV)));
if ((hasCurrentVendor && hasCurrentEnvKey) ||
(!hasVendorKeys && hasCurrentEnvKey) ||
(!hasEnvKey && hasCurrentVendor)) {
newManifest[vendorMatch[2]] =
transformer(value, selectedVendor, nodeEnv);
}
}
else {
newManifest[key] = transformer(value, selectedVendor, nodeEnv);
}
return newManifest;
}, {});
}
return manifest;
};