UNPKG

@agnostack/env

Version:

Please contact agnoStack via info@agnostack.com for any questions

126 lines 6.64 kB
"use strict"; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.replaceEnvTemplate = exports.getPublicEnvValue = exports.parseEnvData = exports.cleanPublicEnv = exports.cleanLowerEnv = exports.publicKeyValidator = exports.lowerKeyValidator = exports.nextKeyValidator = exports.ENV_PREFIXES = exports.ENV_PREFIX = void 0; const display_1 = require("./display"); exports.ENV_PREFIX = { NEXT: 'NEXT_PUBLIC_', VITE: 'VITE_PUBLIC_', GATSBY: 'GATSBY_', DEFAULT: 'PUBLIC_', }; exports.ENV_PREFIXES = Object.values(exports.ENV_PREFIX); const nextKeyValidator = (envKey) => ( // NOTE: not allowed by NEXT: https://nextjs.org/docs/messages/env-key-not-allowed !(envKey.startsWith('__') || envKey.startsWith('NODE_'))); exports.nextKeyValidator = nextKeyValidator; const lowerKeyValidator = (envKey) => ((0, exports.nextKeyValidator)(envKey) && /^[^A-Z]*$/.test(envKey)); exports.lowerKeyValidator = lowerKeyValidator; const publicKeyValidator = (envKey) => (exports.ENV_PREFIXES.some((envPrefix) => envKey === null || envKey === void 0 ? void 0 : envKey.startsWith(envPrefix)) || ['NODE_ENV', 'PORT', 'ENVIRONMENT', 'DEBUG', 'SCOPES', 'SHOPIFY_API_SCOPES'].includes(envKey)); exports.publicKeyValidator = publicKeyValidator; // TODO: move to processBatch??? const stringifyEnv = (_env) => (Object.entries(_env !== null && _env !== void 0 ? _env : {}).reduce((__env, [key, val]) => (Object.assign(Object.assign({}, __env), { // NOTE: DefinePlugin requires stringified [key]: JSON.stringify(val) })), {})); // TODO: move to processBatch??? const cleanEnv = (_env, keyValidator = exports.nextKeyValidator) => (Object.entries(_env !== null && _env !== void 0 ? _env : []).reduce((__env, [key, val]) => (Object.assign(Object.assign({}, __env), keyValidator(key) && { [key]: val, })), {})); const cleanLowerEnv = (_env, keyValidator = exports.lowerKeyValidator) => (cleanEnv(process.env, keyValidator)); exports.cleanLowerEnv = cleanLowerEnv; const cleanPublicEnv = (_env, keyValidator = exports.publicKeyValidator) => (cleanEnv(_env, keyValidator)); exports.cleanPublicEnv = cleanPublicEnv; const parseEnvData = (_env = process.env) => { const { ENVIRONMENT, SITE_ENV, BUILD_ENV, NODE_ENV } = _env; const _environment = [SITE_ENV, BUILD_ENV, NODE_ENV, 'development'].find((value) => (0, display_1.stringNotEmptyOnly)(value)); const mergedEnv = Object.assign(Object.assign({}, _env), { // NOTE: intentionally giving precedence to ENVIRONMENT ENVIRONMENT: ENVIRONMENT || _environment }); const _a = process.argv.reduce(({ args: _args, argParams: _argParams, }, arg) => { var _a, _b; const [__param, _value, __value] = (_a = arg === null || arg === void 0 ? void 0 : arg.split('=')) !== null && _a !== void 0 ? _a : []; const _param = (_b = __param === null || __param === void 0 ? void 0 : __param.replace) === null || _b === void 0 ? void 0 : _b.call(__param, '--', ''); if ((0, display_1.stringEmptyOnly)(_param)) { return { args: _args, argParams: _argParams, }; } let entry = [_param, _value]; // NOTE: this handles serverless args similar to "--param=env=development" if ((_param === 'param') && (0, display_1.stringNotEmptyOnly)(_value) && (0, display_1.stringNotEmptyOnly)(__value)) { entry = [_value, __value]; } const [param, value] = entry; return { args: [ ..._args, ...(value == undefined) ? [__param] : [] ], argParams: Object.assign(Object.assign({}, _argParams), (0, display_1.stringNotEmptyOnly)(value) && { [param]: value, }), }; }, { args: [], argParams: {}, }), { argParams } = _a, output = __rest(_a, ["argParams"]); const nextEnv = cleanEnv(mergedEnv); const publicEnv = (0, exports.cleanPublicEnv)(mergedEnv); return Object.assign(Object.assign({}, output), { env: mergedEnv, nextEnv, publicEnv, stringifiedEnv: stringifyEnv(publicEnv), argParams, params: Object.assign(Object.assign({}, mergedEnv), argParams) }); }; exports.parseEnvData = parseEnvData; const getPublicEnvValue = (publicEnv, key) => { let envValue; if ((0, display_1.stringEmptyOnly)(key) || !publicEnv) { return envValue; } if ((0, display_1.stringNotEmptyOnly)(publicEnv === null || publicEnv === void 0 ? void 0 : publicEnv[key])) { return publicEnv[key]; } let baseKey = key; // NOTE: intentionally using for/of loop instead of map so we can break to exit quickly soon as matched // eslint-disable-next-line no-restricted-syntax for (const envPrefix of exports.ENV_PREFIXES) { if (key.startsWith(envPrefix)) { const trimmedKey = key.slice(envPrefix.length); if ((0, display_1.stringNotEmptyOnly)(trimmedKey)) { baseKey = trimmedKey; break; } } } const matchableEnvKeys = exports.ENV_PREFIXES.map((envPrefix) => `${envPrefix}${baseKey}`); // NOTE: intentionally using for/of loop instead of map so we can break to exit quickly soon as matched // eslint-disable-next-line no-restricted-syntax for (const matchableEnvKey of matchableEnvKeys) { envValue = publicEnv[matchableEnvKey]; if ((0, display_1.stringNotEmptyOnly)(envValue)) { break; } } return envValue; }; exports.getPublicEnvValue = getPublicEnvValue; const replaceEnvTemplate = (replaceable, { env: _env = process.env, template = /\{\{process\.env\.(\w+)\}\}/g, callback = (replacedValue) => replacedValue, } = {}) => ((0, display_1.ensureStringOnly)(replaceable).replace(template, (replaceable, variable) => { const replacedValue = (0, exports.getPublicEnvValue)(_env, variable.trim()); if ((0, display_1.stringEmptyOnly)(replacedValue)) { return replaceable; } return callback(replacedValue, replaceable); })); exports.replaceEnvTemplate = replaceEnvTemplate; //# sourceMappingURL=env.js.map