Skip to content

Commit 1cfd3d4

Browse files
committed
chore(nimble): breaks: chore(nimble): buildKarax, npython is now appname; chore(nimble): sup jsDir,appName,htmlName arg
1 parent c50a8fc commit 1cfd3d4

File tree

3 files changed

+133
-2
lines changed

3 files changed

+133
-2
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ trash/
1010
__pycache__/
1111
/bin/
1212
/app.html
13-
/app.js
13+
/app.js
14+
/npython.html
15+
/npython.js

Tools/mykarun.nim

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
2+
import std / [os, strutils, browsers, strformat, parseopt]
3+
4+
const
5+
css = """
6+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.4/css/bulma.min.css">
7+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
8+
"""
9+
html = """
10+
<!DOCTYPE html>
11+
<html>
12+
<head>
13+
<meta charset="UTF-8"/>
14+
<meta content="width=device-width, initial-scale=1" name="viewport"/>
15+
<title>$1</title>
16+
$2
17+
</head>
18+
<body id="body" class="site">
19+
<div id="ROOT">$3</div>
20+
$4
21+
</body>
22+
</html>
23+
"""
24+
25+
26+
proc exec(cmd: string) =
27+
if os.execShellCmd(cmd) != 0:
28+
quit "External command failed: " & cmd
29+
30+
proc build(ssr: bool, entry: string, rest: string, selectedCss: string, run: bool,
31+
watch: bool,
32+
jsDir, appName: string, htmlName=appName
33+
) =
34+
echo("Building...")
35+
var cmd: string
36+
var content = ""
37+
var outTempPath: string
38+
var outHtmlName: string
39+
let jsFp = jsDir / appName & ".js"
40+
if ssr:
41+
outHtmlName = changeFileExt(extractFilename(entry),"html")
42+
outTempPath = getTempDir() / outHtmlName
43+
cmd = "nim c -r " & rest & " " & outTempPath
44+
else:
45+
cmd = "nim js --out:" & jsFp & ' ' & rest
46+
if watch:
47+
discard os.execShellCmd(cmd)
48+
else:
49+
exec cmd
50+
let dest = htmlName & ".html"
51+
let script = if ssr:"" else: &"""<script type="text/javascript" src="{jsFp}"></script>""" # & (if watch: websocket else: "")
52+
if ssr:
53+
content = readFile(outTempPath)
54+
writeFile(dest, html % [if ssr: outHtmlName else:appName, selectedCss,content, script])
55+
if run: openDefaultBrowser("http://localhost:8080")
56+
57+
proc main =
58+
var op = initOptParser()
59+
var rest: string
60+
var
61+
jsDir = "" # root
62+
appName = "app"
63+
htmlName = appName
64+
htmlNameGiven = false
65+
var file = ""
66+
var run = false
67+
var watch = false
68+
var selectedCss = ""
69+
var ssr = false
70+
71+
template addToRestAux =
72+
rest.add op.key
73+
if op.val != "":
74+
rest.add ':'
75+
rest.add op.val
76+
77+
while true:
78+
op.next()
79+
case op.kind
80+
of cmdLongOption:
81+
case op.key
82+
of "htmlName":
83+
htmlName = op.val
84+
htmlNameGiven = true
85+
of "appName":
86+
appName = op.val
87+
of "jsDir":
88+
jsDir = op.val
89+
of "run":
90+
run = true
91+
of "css":
92+
if op.val != "":
93+
selectedCss = readFile(op.val)
94+
else:
95+
selectedCss = css
96+
of "ssr":
97+
ssr = true
98+
else:
99+
rest.add " --"
100+
addToRestAux
101+
of cmdShortOption:
102+
if op.key == "r":
103+
run = true
104+
elif op.key == "w":
105+
watch = true
106+
elif op.key == "s":
107+
ssr = true
108+
else:
109+
rest.add " -"
110+
addToRestAux
111+
of cmdArgument:
112+
file = op.key
113+
rest.add ' '
114+
rest.add file
115+
of cmdEnd: break
116+
117+
if file.len == 0: quit "filename expected"
118+
# if run:
119+
# spawn serve()
120+
# if watch:
121+
# spawn watchBuild(ssr, file, selectedCss, rest)
122+
if not htmlNameGiven:
123+
htmlName = appName
124+
build(ssr, file, rest, selectedCss, run, watch,
125+
jsDir, appName, htmlName,
126+
)
127+
# sync()
128+
129+
main()

npython.nimble

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,5 @@ taskWithArgs buildJs, "build JS. supported backends: " &
5555
args.quoteShellCommand & ' '& srcDir & '/' & srcName
5656

5757
taskWithArgs buildKarax, "build html page with karax":
58-
exec "karun -d:karax " &
58+
selfExec "r --hints:off -d:release Tools/mykarun -d:karax " & " --appName=" & namedBin[srcName] & ' ' &
5959
args.quoteShellCommand & ' '& srcDir & '/' & srcName

0 commit comments

Comments
 (0)