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

Commit a53e243

Browse files
author
exoego
committed
Make Environment as dictionary-like and have predefined members.
1 parent 103008e commit a53e243

File tree

4 files changed

+61
-97
lines changed

4 files changed

+61
-97
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.scalajs.nodejs.process
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSBracketAccess
5+
6+
@js.native
7+
trait Environment extends js.Object {
8+
// common for unix-like and windows
9+
def PATH: String = js.native
10+
11+
// unix-like
12+
def `_` : js.UndefOr[String] = js.native
13+
def HOME: js.UndefOr[String] = js.native
14+
def PWD: js.UndefOr[String] = js.native
15+
def LD_LIBRARY_PATH: js.UndefOr[String] = js.native
16+
def LIBPATH: js.UndefOr[String] = js.native
17+
def SHLIB_PATH: js.UndefOr[String] = js.native
18+
def LANG: js.UndefOr[String] = js.native
19+
def TZ: js.UndefOr[String] = js.native
20+
def DISPLAY: js.UndefOr[String] = js.native
21+
def PS1: js.UndefOr[String] = js.native
22+
def OSTYPE: js.UndefOr[String] = js.native
23+
def TERM: js.UndefOr[String] = js.native
24+
def SHELL: js.UndefOr[String] = js.native
25+
def USER: js.UndefOr[String] = js.native
26+
def EDITOR: js.UndefOr[String] = js.native
27+
def SHLVL: js.UndefOr[String] = js.native
28+
def LOGNAME: js.UndefOr[String] = js.native
29+
30+
@JSBracketAccess
31+
def apply(key: String): js.UndefOr[String] = js.native
32+
33+
@JSBracketAccess
34+
def update(key: String, value: String): Unit = js.native
35+
}

app/current/src/main/scala/io/scalajs/nodejs/process/package.scala

Lines changed: 0 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ import io.scalajs.util.PromiseHelper.promiseWithError1
77
import scala.concurrent.Future
88
import scala.scalajs.js
99
import scala.scalajs.js.|
10-
import scala.scalajs.js.JSConverters._
1110

1211
package object process {
13-
type Environment = js.Dictionary[String]
1412
// TODO: js.Set
1513
type EnvironmentFlags = js.Any
1614
type ExitCode = Int
@@ -130,97 +128,6 @@ package object process {
130128
@deprecated("use Process object instead", "0.9.0")
131129
def uptime(): Int = Process.uptime()
132130

133-
/**
134-
* Process Environment Extensions
135-
* @param env the given environment dictionary
136-
*/
137-
implicit final class ProcessEnvExtensions(val env: Environment) extends AnyVal {
138-
def `_` : String = env("_")
139-
def __avn_active_file: String = env("__avn_active_file")
140-
def __INTELLIJ_COMMAND_HISTFILE__ : String = env("__INTELLIJ_COMMAND_HISTFILE__")
141-
def CLUTTER_BACKEND: String = env("CLUTTER_BACKEND")
142-
def CLUTTER_IM_MODULE: String = env("CLUTTER_IM_MODULE")
143-
def DBUS_SESSION_BUS_ADDRESS: String = env("DBUS_SESSION_BUS_ADDRESS")
144-
def DEFAULTS_PATH: String = env("DEFAULTS_PATH")
145-
def DESKTOP_SESSION: String = env("DESKTOP_SESSION")
146-
def DISPLAY: String = env("DISPLAY")
147-
def EDITOR: String = env("EDITOR")
148-
def GDM_LANG: String = env("GDM_LANG")
149-
def GDMSESSION: String = env("GDMSESSION")
150-
def GLADE_CATALOG_PATH: String = env("GLADE_CATALOG_PATH")
151-
def GLADE_MODULE_PATH: String = env("GLADE_MODULE_PATH")
152-
def GLADE_PIXMAP_PATH: String = env("GLADE_PIXMAP_PATH")
153-
def GOROOT: String = env("GOROOT")
154-
def GPG_AGENT_INFO: String = env("GPG_AGENT_INFO")
155-
def GREP_COLOR: String = env("GREP_COLOR")
156-
def GREP_COLORS: String = env("GREP_COLORS")
157-
def GTK_IM_MODULE: String = env("GTK_IM_MODULE")
158-
def GTK_OVERLAY_SCROLLING: String = env("GTK_OVERLAY_SCROLLING")
159-
def HOME: String = env("HOME")
160-
def LANG: String = env("LANG")
161-
def LANGUAGE: String = env("LANGUAGE")
162-
def LC_ADDRESS: String = env("LC_ADDRESS")
163-
def LC_IDENTIFICATION: String = env("LC_IDENTIFICATION")
164-
def LC_MEASUREMENT: String = env("LC_MEASUREMENT")
165-
def LC_MONETARY: String = env("LC_MONETARY")
166-
def LC_NAME: String = env("LC_NAME")
167-
def LC_NUMERIC: String = env("LC_NUMERIC")
168-
def LC_PAPER: String = env("LC_PAPER")
169-
def LC_TELEPHONE: String = env("LC_TELEPHONE")
170-
def LC_TIME: String = env("LC_TIME")
171-
def LESS: String = env("LESS")
172-
def LESS_TERMCAP_mb: String = env("LESS_TERMCAP_mb")
173-
def LESS_TERMCAP_md: String = env("LESS_TERMCAP_md")
174-
def LESS_TERMCAP_me: String = env("LESS_TERMCAP_me")
175-
def LESS_TERMCAP_se: String = env("LESS_TERMCAP_se")
176-
def LESS_TERMCAP_so: String = env("LESS_TERMCAP_so")
177-
def LESS_TERMCAP_ue: String = env("LESS_TERMCAP_ue")
178-
def LESS_TERMCAP_us: String = env("LESS_TERMCAP_us")
179-
def LESSOPEN: String = env("LESSOPEN")
180-
def LOGNAME: String = env("LOGNAME")
181-
def LS_COLORS: String = env("LS_COLORS")
182-
def M2: String = env("M2")
183-
def M2_HOME: String = env("M2_HOME")
184-
def MANDATORY_PATH: String = env("MANDATORY_PATH")
185-
def NODE_DEBUG: js.UndefOr[String] = env.get("NODE_DEBUG").orUndefined
186-
def NODE_ENV: js.UndefOr[String] = env.get("NODE_ENV").orUndefined
187-
def OLDPWD: String = env("OLDPWD")
188-
def PAGER: String = env("PAGER")
189-
def PAPERSIZE: String = env("PAPERSIZE")
190-
def PATH: String = env("PATH")
191-
def PWD: String = env("PWD")
192-
def QT4_IM_MODULE: String = env("QT4_IM_MODULE")
193-
def QT_ACCESSIBILITY: String = env("QT_ACCESSIBILITY")
194-
def QT_IM_MODULE: String = env("QT_IM_MODULE")
195-
def QT_QPA_PLATFORMTHEME: String = env("QT_QPA_PLATFORMTHEME")
196-
def SESSION_MANAGER: String = env("SESSION_MANAGER")
197-
def SHELL: String = env("SHELL")
198-
def SHLVL: String = env("SHLVL")
199-
def SSH_AGENT_PID: String = env("SSH_AGENT_PID")
200-
def SSH_AUTH_SOCK: String = env("SSH_AUTH_SOCK")
201-
def TERM: String = env("TERM")
202-
def TERMINAL_EMULATOR: String = env("TERMINAL_EMULATOR")
203-
def TMPDIR: js.UndefOr[String] = env.get("TMPDIR").orUndefined
204-
def USER: String = env("USER")
205-
def VISUAL: String = env("VISUAL")
206-
def XAUTHORITY: String = env("XAUTHORITY")
207-
def XDG_CONFIG_DIRS: String = env("XDG_CONFIG_DIRS")
208-
def XDG_CURRENT_DESKTOP: String = env("XDG_CURRENT_DESKTOP")
209-
def XDG_DATA_DIRS: String = env("XDG_DATA_DIRS")
210-
def XDG_GREETER_DATA_DIR: String = env("XDG_GREETER_DATA_DIR")
211-
def XDG_MENU_PREFIX: String = env("XDG_MENU_PREFIX")
212-
def XDG_RUNTIME_DIR: String = env("XDG_RUNTIME_DIR")
213-
def XDG_SEAT: String = env("XDG_SEAT")
214-
def XDG_SEAT_PATH: String = env("XDG_SEAT_PATH")
215-
def XDG_SESSION_DESKTOP: String = env("XDG_SESSION_DESKTOP")
216-
def XDG_SESSION_ID: String = env("XDG_SESSION_ID")
217-
def XDG_SESSION_PATH: String = env("XDG_SESSION_PATH")
218-
def XDG_SESSION_TYPE: String = env("XDG_SESSION_TYPE")
219-
def XDG_VTNR: String = env("XDG_VTNR")
220-
def XMODIFIERS: String = env("XMODIFIERS")
221-
def ZDOTDIR: String = env("ZDOTDIR")
222-
}
223-
224131
/**
225132
* Process Object Extensions
226133
* @param process the given [[Process process]]

app/current/src/main/scala/io/scalajs/nodejs/repl/package.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ package object repl {
5555
* REPL history. Whitespace will be trimmed from the value.
5656
*/
5757
@inline
58-
def NODE_REPL_HISTORY: Option[String] = env.get("NODE_REPL_HISTORY")
58+
def NODE_REPL_HISTORY: Option[String] = env("NODE_REPL_HISTORY").toOption
5959

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

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

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

8585
}
8686

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.scalajs.nodejs.process
2+
3+
import org.scalatest.FunSpec
4+
5+
class EnvironmentTest extends FunSpec {
6+
7+
describe("Environment") {
8+
it("have PATH as member") {
9+
assert(Process.env.PATH.nonEmpty)
10+
}
11+
12+
it("have getter for arbitrary variables") {
13+
assert(Process.env.PATH === Process.env("PATH"))
14+
}
15+
16+
it("have setter") {
17+
assert(Process.env("__NO_SUCH_ENV_VAR__").isEmpty)
18+
Process.env.update("__NO_SUCH_ENV_VAR__", "FOO")
19+
assert(Process.env("__NO_SUCH_ENV_VAR__").getOrElse("") === "FOO")
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)