import { getQueryStringValue } from '@/utils/querystring'
import { isUnitTest } from '@/utils/unit.js'
/**
* Some frameworks prefix variables differently
* @todo Resemble all the env names here (Each time you see process.env.VUE_APP..., replace with getEnvValue)
*/
export const envNames = {
VUE_APP_ROUTER_DEFAULT_ROUTE: 'VUE_APP_ROUTER_DEFAULT_ROUTE',
VUE_APP_API_GEORED_HOST: 'VUE_APP_API_GEORED_HOST',
VUE_APP_RELEASE_NAME: 'VUE_APP_RELEASE_NAME',
VUE_APP_RELEASE_TIMESTAMP: 'VUE_APP_RELEASE_TIMESTAMP',
VUE_APP_DISABLE_USER_AUDIT: 'VUE_APP_DISABLE_USER_AUDIT',
VUE_APP_FILTERS_MAX_SELECTION: 'VUE_APP_FILTERS_MAX_SELECTION',
VUE_APP_FILTERS_MAX_SELECTION_DATES: 'VUE_APP_FILTERS_MAX_SELECTION_DATES',
VUE_APP_IDENTIFICATION_MODULE_SEARCH_SELECTION_LIMIT:
'VUE_APP_IDENTIFICATION_MODULE_SEARCH_SELECTION_LIMIT',
VUE_APP_SEARCH_SELECTION_LIMIT: 'VUE_APP_SEARCH_SELECTION_LIMIT',
VUE_APP_CLIENT_PARAMETERS_URI: 'VUE_APP_CLIENT_PARAMETERS_URI',
VUE_APP_GOOGLE_GEOCODING: 'VUE_APP_GOOGLE_GEOCODING',
VUE_APP_AUTOCOMPLETE_DEFAULT_PROVIDER:
'VUE_APP_AUTOCOMPLETE_DEFAULT_PROVIDER',
VUE_APP_GEORED_HOST: 'VUE_APP_GEORED_HOST',
VUE_APP_CITIFRET_HOST: 'VUE_APP_CITIFRET_HOST',
VUE_APP_CITIPAV_HOST: 'VUE_APP_CITIPAV_HOST',
VUE_APP_GOOGLE_KEY: 'VUE_APP_GOOGLE_KEY',
VUE_APP_APP_GEONLINE_NEWS_API_HOST_URL:
'VUE_APP_APP_GEONLINE_NEWS_API_HOST_URL',
VUE_APP_AUTOREFRESH_INTERVAL: 'VUE_APP_AUTOREFRESH_INTERVAL',
events_enable_group_all: 'VUE_APP_EVENTS_CAN_GROUP_EVENTS_BY_ALL',
IFRAME_WHITELIST_URLS: 'VUE_APP_IFRAME_WHITELIST_URLS',
}
const customEnvs = {
VUE_APP_RELEASE_NAME:
process.env.RELEASE_NAME || process.env.VUE_APP_RELEASE_NAME,
VUE_APP_RELEASE_TIMESTAMP:
process.env.RELEASE_TIMESTAMP || process.env.VUE_APP_RELEASE_TIMESTAMP,
//Test sentry locally
//VUE_APP_SENTRY_DSN:"https://[email protected]/4"
}
/**
* Wrapper to retrieve env values. Adapt to different frameworks if needed (i.g vite)
* @param {*} name
* @function getEnvValue
* @returns {String}
*/
export function getEnvValue(name, defaultValue = '', options = {}) {
let computedName = envNames[name] || name
let value = ''
//On dev envs, envs can be set via querystring
if (
!computedName.includes('GEORED_HOST') &&
!envService.isProduction() &&
(getQueryStringValue(computedName).length >= 1 ||
getQueryStringValue(name).length >= 1)
) {
value = getQueryStringValue(computedName) || getQueryStringValue(name)
} else {
value =
process.env[computedName] || customEnvs[computedName] || defaultValue
}
if (options.transform) {
return options.transform(value)
}
return value
}
export function getDevOnlyQueryStringValue(name) {
if (!envService.isProduction()) {
return getQueryStringValue(name)
} else {
return ''
}
}
export function isTestMode() {
return getDevOnlyQueryStringValue('test') === '1'
}
const envService = {
isTestMode,
getDevOnlyQueryStringValue,
getEnvValue,
envs: process.env,
/**
* @function isLocalhost
* @alias $env.isLocalhost
* @public
* @returns {boolean}
*/
isLocalhost: function () {
return window.location.origin.indexOf('localhost') !== -1
},
/**
* @function isDev
* @alias $env.isDev
* @public
* @returns {boolean}
*/
isDev: function () {
return (
window.location.origin.indexOf('dev-') !== -1 ||
(this.getEnvValue('VUE_APP_API_GEORED_HOST') || '').indexOf('dev-') !== -1
)
},
isRecette() {
return (
window.location.origin.indexOf('recette-') !== -1 ||
(this.getEnvValue('VUE_APP_API_GEORED_HOST') || '').indexOf(
'recette-'
) !== -1
)
},
isIsoprod() {
return (
window.location.origin.indexOf('isoprod-') !== -1 ||
(this.getEnvValue('VUE_APP_API_GEORED_HOST') || '').indexOf(
'isoprod-'
) !== -1
)
},
isBeta() {
return (
window.location.origin.indexOf('beta-') !== -1 ||
(this.getEnvValue('VUE_APP_API_GEORED_HOST') || '').indexOf('beta-') !==
-1
)
},
isPreprod() {
return (
window.location.origin.indexOf('preprod-') !== -1 ||
(this.getEnvValue('VUE_APP_API_GEORED_HOST') || '').indexOf(
'preprod-'
) !== -1
)
},
getEnvName() {
if (this.isDev()) return 'dev'
if (this.isRecette()) return 'recette'
if (this.isIsoprod()) return 'isoprod'
if (this.isBeta()) return 'beta'
if (this.isPreprod()) return 'preprod'
return 'production'
},
/**
* @function isProduction
* @alias $env.isProduction
* @public
* @returns {boolean}
*/
isProduction() {
return (
(isUnitTest ||
(!this.isLocalhost() &&
!this.isDev() &&
!this.isRecette() &&
!this.isIsoprod() &&
!this.isPreprod())) &&
process.env.NODE_ENV === 'production'
)
},
}
export default envService
Source