index.ts 1.06 KB
interface InjectEnvType {
  globalEnvName?: string
  variable?: {
    mode?: string
    base?: string
    shortName?: string
    enableOss?: boolean
    ossAddress?: string
  }
}

const stringToJSONParse = (string: string) => {
  try {
    return JSON.parse(string)
  }
  catch (error) {
    return string
  }
}

export function parseEnv(env: Record<string, string>) {
  const res: Record<string, string> = {}

  Object.keys(env).forEach((key) => {
    try {
      const value = env[key]
      res[key] = stringToJSONParse(value)
    }
    catch (err) {
      // eslint-disable-next-line no-console
      console.log(`env variable ${key} can't serialization!`)
    }
  })

  return res
}
export function injectEnv(options: InjectEnvType) {
  const { globalEnvName = 'PROJECT_ENV', variable = {} } = options
  const projectEnv = `window.${globalEnvName}`
  return `${projectEnv}=${JSON.stringify(parseEnv(variable as Record<string, string>))};
  Object.freeze(${projectEnv});
  Object.defineProperty(window, "${globalEnvName}", {
    configurable: false,
    writable: false,
  });
  `
}