Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Make Environment as dictionary-like and have predefined members. #98

Merged
merged 1 commit into from
Oct 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package io.scalajs.nodejs.process

import scala.scalajs.js
import scala.scalajs.js.annotation.JSBracketAccess

@js.native
trait Environment extends js.Object {
// common for unix-like and windows
def PATH: String = js.native

// unix-like
def `_` : js.UndefOr[String] = js.native
def HOME: js.UndefOr[String] = js.native
def PWD: js.UndefOr[String] = js.native
def LD_LIBRARY_PATH: js.UndefOr[String] = js.native
def LIBPATH: js.UndefOr[String] = js.native
def SHLIB_PATH: js.UndefOr[String] = js.native
def LANG: js.UndefOr[String] = js.native
def TZ: js.UndefOr[String] = js.native
def DISPLAY: js.UndefOr[String] = js.native
def PS1: js.UndefOr[String] = js.native
def OSTYPE: js.UndefOr[String] = js.native
def TERM: js.UndefOr[String] = js.native
def SHELL: js.UndefOr[String] = js.native
def USER: js.UndefOr[String] = js.native
def EDITOR: js.UndefOr[String] = js.native
def SHLVL: js.UndefOr[String] = js.native
def LOGNAME: js.UndefOr[String] = js.native

@JSBracketAccess
def apply(key: String): js.UndefOr[String] = js.native

@JSBracketAccess
def update(key: String, value: String): Unit = js.native
}
93 changes: 0 additions & 93 deletions app/current/src/main/scala/io/scalajs/nodejs/process/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ import io.scalajs.util.PromiseHelper.promiseWithError1
import scala.concurrent.Future
import scala.scalajs.js
import scala.scalajs.js.|
import scala.scalajs.js.JSConverters._

package object process {
type Environment = js.Dictionary[String]
// TODO: js.Set
type EnvironmentFlags = js.Any
type ExitCode = Int
Expand Down Expand Up @@ -130,97 +128,6 @@ package object process {
@deprecated("use Process object instead", "0.9.0")
def uptime(): Int = Process.uptime()

/**
* Process Environment Extensions
* @param env the given environment dictionary
*/
implicit final class ProcessEnvExtensions(val env: Environment) extends AnyVal {
def `_` : String = env("_")
def __avn_active_file: String = env("__avn_active_file")
def __INTELLIJ_COMMAND_HISTFILE__ : String = env("__INTELLIJ_COMMAND_HISTFILE__")
def CLUTTER_BACKEND: String = env("CLUTTER_BACKEND")
def CLUTTER_IM_MODULE: String = env("CLUTTER_IM_MODULE")
def DBUS_SESSION_BUS_ADDRESS: String = env("DBUS_SESSION_BUS_ADDRESS")
def DEFAULTS_PATH: String = env("DEFAULTS_PATH")
def DESKTOP_SESSION: String = env("DESKTOP_SESSION")
def DISPLAY: String = env("DISPLAY")
def EDITOR: String = env("EDITOR")
def GDM_LANG: String = env("GDM_LANG")
def GDMSESSION: String = env("GDMSESSION")
def GLADE_CATALOG_PATH: String = env("GLADE_CATALOG_PATH")
def GLADE_MODULE_PATH: String = env("GLADE_MODULE_PATH")
def GLADE_PIXMAP_PATH: String = env("GLADE_PIXMAP_PATH")
def GOROOT: String = env("GOROOT")
def GPG_AGENT_INFO: String = env("GPG_AGENT_INFO")
def GREP_COLOR: String = env("GREP_COLOR")
def GREP_COLORS: String = env("GREP_COLORS")
def GTK_IM_MODULE: String = env("GTK_IM_MODULE")
def GTK_OVERLAY_SCROLLING: String = env("GTK_OVERLAY_SCROLLING")
def HOME: String = env("HOME")
def LANG: String = env("LANG")
def LANGUAGE: String = env("LANGUAGE")
def LC_ADDRESS: String = env("LC_ADDRESS")
def LC_IDENTIFICATION: String = env("LC_IDENTIFICATION")
def LC_MEASUREMENT: String = env("LC_MEASUREMENT")
def LC_MONETARY: String = env("LC_MONETARY")
def LC_NAME: String = env("LC_NAME")
def LC_NUMERIC: String = env("LC_NUMERIC")
def LC_PAPER: String = env("LC_PAPER")
def LC_TELEPHONE: String = env("LC_TELEPHONE")
def LC_TIME: String = env("LC_TIME")
def LESS: String = env("LESS")
def LESS_TERMCAP_mb: String = env("LESS_TERMCAP_mb")
def LESS_TERMCAP_md: String = env("LESS_TERMCAP_md")
def LESS_TERMCAP_me: String = env("LESS_TERMCAP_me")
def LESS_TERMCAP_se: String = env("LESS_TERMCAP_se")
def LESS_TERMCAP_so: String = env("LESS_TERMCAP_so")
def LESS_TERMCAP_ue: String = env("LESS_TERMCAP_ue")
def LESS_TERMCAP_us: String = env("LESS_TERMCAP_us")
def LESSOPEN: String = env("LESSOPEN")
def LOGNAME: String = env("LOGNAME")
def LS_COLORS: String = env("LS_COLORS")
def M2: String = env("M2")
def M2_HOME: String = env("M2_HOME")
def MANDATORY_PATH: String = env("MANDATORY_PATH")
def NODE_DEBUG: js.UndefOr[String] = env.get("NODE_DEBUG").orUndefined
def NODE_ENV: js.UndefOr[String] = env.get("NODE_ENV").orUndefined
def OLDPWD: String = env("OLDPWD")
def PAGER: String = env("PAGER")
def PAPERSIZE: String = env("PAPERSIZE")
def PATH: String = env("PATH")
def PWD: String = env("PWD")
def QT4_IM_MODULE: String = env("QT4_IM_MODULE")
def QT_ACCESSIBILITY: String = env("QT_ACCESSIBILITY")
def QT_IM_MODULE: String = env("QT_IM_MODULE")
def QT_QPA_PLATFORMTHEME: String = env("QT_QPA_PLATFORMTHEME")
def SESSION_MANAGER: String = env("SESSION_MANAGER")
def SHELL: String = env("SHELL")
def SHLVL: String = env("SHLVL")
def SSH_AGENT_PID: String = env("SSH_AGENT_PID")
def SSH_AUTH_SOCK: String = env("SSH_AUTH_SOCK")
def TERM: String = env("TERM")
def TERMINAL_EMULATOR: String = env("TERMINAL_EMULATOR")
def TMPDIR: js.UndefOr[String] = env.get("TMPDIR").orUndefined
def USER: String = env("USER")
def VISUAL: String = env("VISUAL")
def XAUTHORITY: String = env("XAUTHORITY")
def XDG_CONFIG_DIRS: String = env("XDG_CONFIG_DIRS")
def XDG_CURRENT_DESKTOP: String = env("XDG_CURRENT_DESKTOP")
def XDG_DATA_DIRS: String = env("XDG_DATA_DIRS")
def XDG_GREETER_DATA_DIR: String = env("XDG_GREETER_DATA_DIR")
def XDG_MENU_PREFIX: String = env("XDG_MENU_PREFIX")
def XDG_RUNTIME_DIR: String = env("XDG_RUNTIME_DIR")
def XDG_SEAT: String = env("XDG_SEAT")
def XDG_SEAT_PATH: String = env("XDG_SEAT_PATH")
def XDG_SESSION_DESKTOP: String = env("XDG_SESSION_DESKTOP")
def XDG_SESSION_ID: String = env("XDG_SESSION_ID")
def XDG_SESSION_PATH: String = env("XDG_SESSION_PATH")
def XDG_SESSION_TYPE: String = env("XDG_SESSION_TYPE")
def XDG_VTNR: String = env("XDG_VTNR")
def XMODIFIERS: String = env("XMODIFIERS")
def ZDOTDIR: String = env("ZDOTDIR")
}

/**
* Process Object Extensions
* @param process the given [[Process process]]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ package object repl {
* REPL history. Whitespace will be trimmed from the value.
*/
@inline
def NODE_REPL_HISTORY: Option[String] = env.get("NODE_REPL_HISTORY")
def NODE_REPL_HISTORY: Option[String] = env("NODE_REPL_HISTORY").toOption

/**
* Previously in Node.js/io.js v2.x, REPL history was controlled by using a NODE_REPL_HISTORY_FILE environment
Expand All @@ -66,21 +66,21 @@ package object repl {
*/
@inline
@deprecated("Use NODE_REPL_HISTORY instead.", since = "3.0.0")
def NODE_REPL_HISTORY_FILE: Option[String] = env.get("NODE_REPL_HISTORY_FILE")
def NODE_REPL_HISTORY_FILE: Option[String] = env("NODE_REPL_HISTORY_FILE").toOption

/**
* Defaults to 1000. Controls how many lines of history will be persisted if history is available.
* Must be a positive number.
*/
@inline
def NODE_REPL_HISTORY_SIZE: Option[Int] = env.get("NODE_REPL_HISTORY_SIZE").map(_.toInt)
def NODE_REPL_HISTORY_SIZE: Option[Int] = env("NODE_REPL_HISTORY_SIZE").map(_.toInt).toOption

/**
* May be any of sloppy, strict, or magic. Defaults to magic, which will automatically run "strict mode only"
* statements in strict mode.
*/
@inline
def NODE_REPL_MODE: Option[String] = env.get("NODE_REPL_MODE")
def NODE_REPL_MODE: Option[String] = env("NODE_REPL_MODE").toOption

}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.scalajs.nodejs.process

import org.scalatest.FunSpec

class EnvironmentTest extends FunSpec {

describe("Environment") {
it("have PATH as member") {
assert(Process.env.PATH.nonEmpty)
}

it("have getter for arbitrary variables") {
assert(Process.env.PATH === Process.env("PATH"))
}

it("have setter") {
assert(Process.env("__NO_SUCH_ENV_VAR__").isEmpty)
Process.env.update("__NO_SUCH_ENV_VAR__", "FOO")
assert(Process.env("__NO_SUCH_ENV_VAR__").getOrElse("") === "FOO")
}
}
}