debugging add module support

This commit is contained in:
pengfei.zhou 2021-08-24 11:25:06 +08:00 committed by osborn
parent 0ffb14ec72
commit 20e6f5c96d
7 changed files with 65 additions and 4 deletions

View File

@ -15,6 +15,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
@ -131,6 +132,15 @@ public class DoricDev {
.toJSONObject());
} else {
final DoricContext context = contexts.get(contexts.size() - 1);
Map<String, String> bundles = DoricSingleton.getInstance().getJSBundles();
for (String key : bundles.keySet()) {
wsClient.sendToDebugger(
"LOAD_MODULE",
new JSONBuilder()
.put("name", key)
.put("content", bundles.get(key))
.toJSONObject());
}
wsClient.sendToDebugger(
"DEBUG_RES",
new JSONBuilder()

View File

@ -19,19 +19,17 @@ import pub.doric.devkit.WSClient;
public class RemoteJSExecutor implements WSClient.Interceptor {
private final Map<String, JavaFunction> globalFunctions = new HashMap<>();
private final WSClient wsClient;
private final Thread currentThread;
private final AtomicInteger callIdCounter = new AtomicInteger();
private Map<Integer, Thread> mThreads = new HashMap<>();
private Map<Integer, JSDecoder> mResults = new HashMap<>();
private final Map<Integer, Thread> mThreads = new HashMap<>();
private final Map<Integer, JSDecoder> mResults = new HashMap<>();
public volatile boolean invokingMethod = false;
public RemoteJSExecutor(WSClient wsClient) {
this.wsClient = wsClient;
this.wsClient.addInterceptor(this);
currentThread = Thread.currentThread();
}
public String loadJS(String script, String source) {

View File

@ -91,4 +91,8 @@ public class DoricSingleton {
public DoricContextManager getContextManager() {
return doricContextManager;
}
public Map<String, String> getJSBundles() {
return bundles;
}
}

View File

@ -226,6 +226,13 @@ - (void)startDebugging:(NSString *)source {
@"msg": @"Cannot find suitable alive context for debugging"
}];
} else {
[DoricSingleton.instance.bundles enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[self.wsClient sendToDebugger:@"LOAD_MODULE"
payload:@{
@"name": key,
@"content": obj,
}];
}];
DoricContext *context = contexts.lastObject;
[self.wsClient sendToDebugger:@"DEBUG_RES" payload:@{
@"contextId": context.contextId

View File

@ -4644,6 +4644,18 @@ function initNativeEnvironment(source) {
const msg = JSON.parse(data);
const payload = msg.payload;
switch (msg.cmd) {
case "":
const { name, content } = payload;
Reflect.apply(jsRegisterModule, undefined, [
name,
Reflect.apply((function (__module) {
eval(`(function (module, exports, require) {
${content}
})(__module, __module.exports, doric.__require__)`);
return __module.exports;
}), undefined, [{ exports: {} }])
]);
break;
case "DEBUG_RES":
const contextId = msg.payload.contextId;
resolve(contextId);

View File

@ -53,6 +53,24 @@ async function initNativeEnvironment(source: string) {
const msg = JSON.parse(data as string) as MSG
const payload = msg.payload
switch (msg.cmd) {
case "":
const { name, content } = payload as {
name: string,
content: string
}
Reflect.apply(
doric.jsRegisterModule,
undefined,
[
name,
Reflect.apply((function (__module: { exports: object }) {
eval(`(function (module, exports, require) {
${content}
})(__module, __module.exports, doric.__require__)`)
return __module.exports
}), undefined, [{ exports: {} }])
]);
break;
case "DEBUG_RES":
const contextId = msg.payload.contextId as string;
resolve(contextId);

View File

@ -54,6 +54,18 @@ function initNativeEnvironment(source) {
const msg = JSON.parse(data);
const payload = msg.payload;
switch (msg.cmd) {
case "":
const { name, content } = payload;
Reflect.apply(doric.jsRegisterModule, undefined, [
name,
Reflect.apply((function (__module) {
eval(`(function (module, exports, require) {
${content}
})(__module, __module.exports, doric.__require__)`);
return __module.exports;
}), undefined, [{ exports: {} }])
]);
break;
case "DEBUG_RES":
const contextId = msg.payload.contextId;
resolve(contextId);