Skip to content

Commit 8f22a68

Browse files
committed
feat(js): importDenoOrNodeMod;2-arg importDenoOrProcess
1 parent 90c9610 commit 8f22a68

File tree

1 file changed

+22
-14
lines changed

1 file changed

+22
-14
lines changed

src/pylib/jsutils/denoAttrs.nim

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,29 +42,37 @@ when defined(js):
4242
macro importByNodeOrDeno*(node, deno: static[string]; def) =
4343
## pragma
4444
importByNodeOrDenoImpl(def, nodeExpr=node, denoExpr=deno)
45-
proc importDenoOrImpl(def: NimNode; objInNode: string; attr: NimNode): NimNode =
46-
var
47-
sAttr =
48-
if attr.kind in {nnkStrLit, nnkRStrLit, nnkTripleStrLit}:
49-
# allow using some expr that cannot be written as Nim expr
50-
attr.strVal
51-
else:
52-
# allow nnkCall, ident and more complex expr
53-
repr(attr)
45+
proc importDenoOrImpl(def: NimNode; objInNode: string; denoAttr, nodeAttr: NimNode): NimNode =
46+
let
47+
denoAttr = repr denoAttr
48+
nodeAttr = repr nodeAttr
5449
importByNodeOrDenoImpl(def,
55-
nodeExpr=objInNode&'.'&sAttr,
56-
denoExpr="Deno."&sAttr
50+
nodeExpr=objInNode&'.'&nodeAttr,
51+
denoExpr="Deno."&denoAttr
5752
)
53+
macro importDenoOr*(objInNode, attr; def) =
54+
importDenoOrImpl(def, $objInNode, attr, attr)
55+
56+
func requireExpr(module: string): string = "require('" & module & "')"
57+
macro importDenoOrNodeMod*(modInNode, attr; def) =
58+
importDenoOrImpl(def, requireExpr $modInNode, attr)
5859
macro importDenoOr*(objInNode, attr; def) =
5960
importDenoOrImpl(def, $objInNode, attr)
60-
macro importDenoOrProcess*(attr; def) =
61-
importDenoOrImpl(def, "process", attr)
6261

6362
proc importNodeImpl(def: NimNode, module, symExpr: string): NimNode =
6463
importByNodeOrDenoImpl(def,
65-
"require('" & module & "')." & symExpr,
64+
requireExpr(module) & '.' & symExpr,
6665
"(await import('" & module & "'))." & symExpr
6766
)
67+
68+
proc importDenoOrProcessAux(denoAttr, nodeAttr, def: NimNode): NimNode =
69+
importDenoOrImpl(def, "process", denoAttr, nodeAttr)
70+
71+
macro importDenoOrProcess*(denoAttr, nodeAttr; def) =
72+
importDenoOrProcessAux(denoAttr, nodeAttr, def)
73+
macro importDenoOrProcess*(attr; def) =
74+
importDenoOrProcessAux(attr, attr, def)
75+
6876
macro importNode*(module, symExpr; def) =
6977
let ssym = case symExpr.kind
7078
of nnkStrLit, nnkRStrLit, nnkTripleStrLit, nnkIdent: symExpr.strVal # also allows dotExpr

0 commit comments

Comments
 (0)