UNPKG

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
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; };