-
-
Notifications
You must be signed in to change notification settings - Fork 177
/
node_script.clj
86 lines (70 loc) · 2.14 KB
/
node_script.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
(ns shadow.build.targets.node-script
(:refer-clojure :exclude (flush))
(:require [clojure.set :as set]
[clojure.string :as str]
[cljs.compiler :as cljs-comp]
[clojure.spec.alpha :as s]
[shadow.cljs.repl :as repl]
[shadow.build.node :as node]
[shadow.build :as comp]
[shadow.build.targets.shared :as shared]
[shadow.build.config :as config]
[shadow.build.api :as cljs]
))
(s/def ::main shared/unquoted-qualified-symbol?)
(s/def ::target
(s/keys
:req-un
[::main
::shared/output-to]
:opt-un
[::shared/output-dir]
))
(defmethod config/target-spec :node-script [_]
(s/spec ::target))
(defmethod config/target-spec `process [_]
(s/spec ::target))
(defn configure [state mode config]
(-> state
(shared/set-output-dir mode config)
(node/set-defaults)
(node/configure config)
(assoc-in [:compiler-options :closure-defines 'cljs.core/*target*] "nodejs")
(cond->
(:worker-info state)
(shared/inject-node-repl config)
(= :dev mode)
(shared/inject-preloads :main config)
)))
(defn check-main-exists! [{:keys [compiler-env node-config] :as state}]
(let [{:keys [main main-ns main-fn]} node-config]
(when-not (get-in compiler-env [:cljs.analyzer/namespaces main-ns :defs main-fn])
(throw (ex-info (format "The configured main \"%s\" does not exist!" main)
{:tag ::main-not-found
:main-ns main-ns
:main-fn main-fn
:main main})))
state))
(defn flush [state mode config]
(case mode
:dev
(node/flush-unoptimized state)
:release
(node/flush-optimized state)))
(defn process
[{::comp/keys [mode stage config] :as state}]
(case stage
:configure
(configure state mode config)
:compile-prepare
(node/replace-goog-global state)
:compile-finish
(-> state
(check-main-exists!)
(cond->
(shared/bootstrap-host-build? state)
(shared/bootstrap-host-info)))
:flush
(flush state mode config)
state
))