@@ -23,7 +23,7 @@ when defined(js):
23
23
when defined(nodejs): # fast-path when defined nodejs
24
24
nodeExpr
25
25
else :
26
- DenoDetectedJsExpr & (" ?$1:$2" % [nodeExpr, denoExpr ])
26
+ DenoDetectedJsExpr & (" ?$1:$2" % [denoExpr, nodeExpr ])
27
27
template JsPragma: NimNode = # lazy eval on `JsExpr`
28
28
nnkExprColonExpr.newTree(ident" importjs" , JsExpr)
29
29
@@ -34,19 +34,26 @@ when defined(js):
34
34
else :
35
35
def[0 ][0 ] = nnkPragmaExpr.newTree(def[0 ][0 ], nnkPragma.newTree JsPragma)
36
36
of RoutineNodes:
37
- nodeExpr.add " (@)" ; denoExpr.add " (@)" # add pattern for proc's params
37
+ func addParamsIfNotAttr(s: var string ) =
38
+ if s[^ 1 ] == '$' : s.setLen s.len- 1
39
+ else : s.add " (@)"
40
+ nodeExpr.addParamsIfNotAttr()
41
+ denoExpr.addParamsIfNotAttr()
38
42
def.addPragma JsPragma
39
43
else :
40
44
error " only var/let and procs is supported, but got " & $ def.kind, def
41
45
def
42
46
macro importByNodeOrDeno* (node, deno: static [string ]; def) =
43
47
# # pragma
44
48
importByNodeOrDenoImpl(def, nodeExpr= node, denoExpr= deno)
49
+ proc myrepr(n: NimNode): string =
50
+ if n.kind in nnkStrLit.. nnkTripleStrLit: n.strVal
51
+ else : repr n
45
52
proc importDenoOrImpl(def: NimNode; objInNode: string ;
46
53
denoAttr: NimNode, nodeAttr= denoAttr): NimNode =
47
54
let
48
- denoAttr = repr denoAttr
49
- nodeAttr = repr nodeAttr
55
+ denoAttr = myrepr denoAttr
56
+ nodeAttr = myrepr nodeAttr
50
57
importByNodeOrDenoImpl(def,
51
58
nodeExpr= objInNode& '.' & nodeAttr,
52
59
denoExpr= " Deno." & denoAttr
@@ -55,13 +62,15 @@ when defined(js):
55
62
func requireExpr(module: string ): string = " require('" & module & " ')"
56
63
macro importDenoOrNodeMod* (modInNode, attr; def) =
57
64
importDenoOrImpl(def, requireExpr $ modInNode, attr)
65
+ macro importInNodeModOrDeno* (modInNode, attrNode, attrDeno; def) =
66
+ importDenoOrImpl(def, requireExpr $ modInNode, attrDeno, attrNode)
58
67
macro importDenoOr* (objInNode, attr; def) =
59
68
importDenoOrImpl(def, $ objInNode, attr)
60
69
61
70
proc importNodeImpl(def: NimNode, module, symExpr: string ): NimNode =
62
71
importByNodeOrDenoImpl(def,
63
72
requireExpr(module) & '.' & symExpr,
64
- " (await import('" & module & " '))." & symExpr
73
+ " (await import('node: " & module & " '))." & symExpr
65
74
)
66
75
67
76
proc importDenoOrProcessAux(denoAttr, nodeAttr, def: NimNode): NimNode =
0 commit comments