mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
[quickjs] Added pollyfilled fetch, but tests fail
This commit is contained in:
parent
f847c253f9
commit
2f6360ac49
@ -66,6 +66,8 @@
|
|||||||
#include "viewer/text/view.h"
|
#include "viewer/text/view.h"
|
||||||
#include "viewer/text/vs.h"
|
#include "viewer/text/vs.h"
|
||||||
|
|
||||||
|
#include "ecmascript/fetch.h"
|
||||||
|
|
||||||
/*** Global methods */
|
/*** Global methods */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -132,6 +134,88 @@ quickjs_done(struct module *xxx)
|
|||||||
// spidermonkey_runtime_release();
|
// spidermonkey_runtime_release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
el_js_module_set_import_meta(JSContext *ctx, JSValueConst func_val, JS_BOOL use_realpath, JS_BOOL is_main)
|
||||||
|
{
|
||||||
|
JSModuleDef *m;
|
||||||
|
//char buf[PATH_MAX + 16];
|
||||||
|
JSValue meta_obj;
|
||||||
|
//JSAtom module_name_atom;
|
||||||
|
//const char *module_name;
|
||||||
|
|
||||||
|
assert(JS_VALUE_GET_TAG(func_val) == JS_TAG_MODULE);
|
||||||
|
m = JS_VALUE_GET_PTR(func_val);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
module_name_atom = JS_GetModuleName(ctx, m);
|
||||||
|
module_name = JS_AtomToCString(ctx, module_name_atom);
|
||||||
|
JS_FreeAtom(ctx, module_name_atom);
|
||||||
|
|
||||||
|
if (!module_name) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strchr(module_name, ':')) {
|
||||||
|
strcpy(buf, "file://");
|
||||||
|
#if !defined(_WIN32)
|
||||||
|
/* realpath() cannot be used with modules compiled with qjsc
|
||||||
|
because the corresponding module source code is not
|
||||||
|
necessarily present */
|
||||||
|
|
||||||
|
if (use_realpath) {
|
||||||
|
char *res = realpath(module_name, buf + strlen(buf));
|
||||||
|
|
||||||
|
if (!res) {
|
||||||
|
JS_ThrowTypeError(ctx, "realpath failure");
|
||||||
|
JS_FreeCString(ctx, module_name);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
pstrcat(buf, sizeof(buf), module_name);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pstrcpy(buf, sizeof(buf), module_name);
|
||||||
|
}
|
||||||
|
JS_FreeCString(ctx, module_name);
|
||||||
|
#endif // 0
|
||||||
|
|
||||||
|
meta_obj = JS_GetImportMeta(ctx, m);
|
||||||
|
|
||||||
|
if (JS_IsException(meta_obj)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
JS_DefinePropertyValueStr(ctx, meta_obj, "url", JS_NewString(ctx, buf), JS_PROP_C_W_E);
|
||||||
|
JS_DefinePropertyValueStr(ctx, meta_obj, "main", JS_NewBool(ctx, is_main), JS_PROP_C_W_E);
|
||||||
|
#endif
|
||||||
|
JS_FreeValue(ctx, meta_obj);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
JSModuleDef *
|
||||||
|
el_js_module_loader(JSContext *ctx, const char *module_name, void *opaque)
|
||||||
|
{
|
||||||
|
JSModuleDef *m = NULL;
|
||||||
|
|
||||||
|
if (!strcmp(module_name, "a")) {
|
||||||
|
/* compile the module */
|
||||||
|
JSValue func_val = JS_Eval(ctx, (char *)fetch_js, fetch_js_len, module_name, JS_EVAL_TYPE_MODULE);
|
||||||
|
|
||||||
|
if (JS_IsException(func_val)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* XXX: could propagate the exception */
|
||||||
|
el_js_module_set_import_meta(ctx, func_val, 1, 0);
|
||||||
|
/* the module is already referenced, so we must free it */
|
||||||
|
m = JS_VALUE_GET_PTR(func_val);
|
||||||
|
JS_FreeValue(ctx, func_val);
|
||||||
|
}
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
quickjs_get_interpreter(struct ecmascript_interpreter *interpreter)
|
quickjs_get_interpreter(struct ecmascript_interpreter *interpreter)
|
||||||
{
|
{
|
||||||
@ -196,6 +280,14 @@ quickjs_get_interpreter(struct ecmascript_interpreter *interpreter)
|
|||||||
|
|
||||||
interpreter->document_obj = getDocument(ctx, document->dom);
|
interpreter->document_obj = getDocument(ctx, document->dom);
|
||||||
|
|
||||||
|
JS_SetModuleLoaderFunc(interpreter->rt, NULL, el_js_module_loader, NULL);
|
||||||
|
JSModuleDef *m = el_js_module_loader(ctx, "a", NULL);
|
||||||
|
|
||||||
|
JSValue r = JS_Eval(ctx, "import {fetch,Headers,Request,Response} from 'a';", sizeof("import {fetch,Headers,Request,Response} from 'a';") - 1,
|
||||||
|
"top", 0);
|
||||||
|
|
||||||
|
JS_FreeValue(ctx, r);
|
||||||
|
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -409,6 +409,8 @@ x_loading_callback(struct download *download, struct Xhr *x)
|
|||||||
}
|
}
|
||||||
if (cached->head) {
|
if (cached->head) {
|
||||||
process_xhr_headers(cached->head, x);
|
process_xhr_headers(cached->head, x);
|
||||||
|
} else {
|
||||||
|
x->status = 200;
|
||||||
}
|
}
|
||||||
mem_free_set(&x->response_text, memacpy(fragment->data, fragment->length));
|
mem_free_set(&x->response_text, memacpy(fragment->data, fragment->length));
|
||||||
if (x->ready_state != XHR_RSTATE_DONE) {
|
if (x->ready_state != XHR_RSTATE_DONE) {
|
||||||
|
Loading…
Reference in New Issue
Block a user