diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-31 23:35:19 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-02-01 00:14:03 +0100 |
commit | fb83af595b803c1d2034a70437381c8550eae3bf (patch) | |
tree | f2c643b6c22b9aabf890f47ddeff6154e6086106 /src/html/script.nim | |
parent | 597d63922c5614da4f07bbddd4a5866c48cad555 (diff) | |
download | chawan-fb83af595b803c1d2034a70437381c8550eae3bf.tar.gz |
dom: basic module support
probably breaks with TLA
Diffstat (limited to 'src/html/script.nim')
-rw-r--r-- | src/html/script.nim | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/html/script.nim b/src/html/script.nim index ac2924ee..84f6c553 100644 --- a/src/html/script.nim +++ b/src/html/script.nim @@ -1,6 +1,7 @@ import monoucha/javascript import monoucha/jsopaque import monoucha/quickjs +import monoucha/tojs import types/referrer import types/url import utils/twtstr @@ -141,6 +142,29 @@ proc newJSModuleScript*(ctx: JSContext; source: string; baseURL: URL; ) ) +proc setImportMeta*(ctx: JSContext; funcVal: JSValue; isMain: bool) = + let m = cast[JSModuleDef](JS_VALUE_GET_PTR(funcVal)) + let moduleNameAtom = JS_GetModuleName(ctx, m) + let metaObj = JS_GetImportMeta(ctx, m) + definePropertyCWE(ctx, metaObj, "url", JS_AtomToValue(ctx, moduleNameAtom)) + definePropertyCWE(ctx, metaObj, "main", false) + JS_FreeValue(ctx, metaObj) + JS_FreeAtom(ctx, moduleNameAtom) + +proc normalizeModuleName*(ctx: JSContext; base_name, name: cstringConst; + opaque: pointer): cstring {.cdecl.} = + return js_strdup(ctx, cstring(name)) + +proc finishLoadModule*(ctx: JSContext; source, name: string): JSModuleDef = + let funcVal = compileModule(ctx, source, name) + if JS_IsException(funcVal): + return nil + ctx.setImportMeta(funcVal, false) + # "the module is already referenced, so we must free it" + # idk how this works, so for now let's just do what qjs does + result = cast[JSModuleDef](JS_VALUE_GET_PTR(funcVal)) + JS_FreeValue(ctx, funcVal) + proc logException*(ctx: JSContext) = ctx.errorImpl(ctx.getExceptionMsg()) |