Source

services/env-service.js

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