// Path: nkscripting/src/main/java/io/nodekit/nkscripting/util/NKLogging.java
// public class NKLogging {
// 
//     public static class Entry {
//         String message = null;
//         Level severity = null;
//         Map<String, String> labels = null;
// 
// 
//         Entry(String message, Level severity, Map<String, String> labels){
//             this.severity = severity;
//             this.message = message;
//             this.labels = labels;
//         }
// 
//         public String getMessage() {
//             return message;
//         }
// 
//         public String getSeverity() {
//             return severity.toString();
//         }
// 
//         public Level getSeverityLevel() {
//             return severity;
//         }
// 
//         public Map<String, String> getLabels() {
//             return labels;
//         }
//     }
// 
//     public enum Level
//     {
//         Emergency,
//         Alert ,
//         Critical,
//         Error ,
//         Warning ,
//         Notice,
//         Info ,
//         Debug
//     }
// 
//     private static final String TAG = "NodeKit";
// 
//     public static void log(String message)
//     {
//        log(message, Level.Debug, new HashMap<String, String>() );
//     }
// 
//     public static void log(String message, Level severity)
//     {
//         log(message, severity, new HashMap<String, String>());
//     }
// 
//     public static void log(String message, String severity, Map<String, String> labels)
//     {
//         log(message, Level.valueOf(severity), labels);
//     }
// 
//     public static void log(String message, Level severity, Map<String, String> labels)
//     {
//         Log.v(TAG, message);
//         NKEventEmitter.global.emit("log", new Entry(message, severity, labels));
//     }
// 
//     public static void log(Exception e)
//     {
//         log("ERROR " + e.toString() + " in " +  Arrays.toString(e.getStackTrace()), Level.Error, new HashMap<String, String>() );
//     }
// 
// }


import io.nodekit.nkscripting.util.NKLogging;
        {
            this.source = source + "\n//# sourceURL=" + this.filename + "\n";
        }
    }

    public NKScriptSource(String source, String asFilename, String ns)  {
        this(source, asFilename, ns, null);
    }

    public NKScriptSource(String source, String asFilename)  {
        this(source, asFilename, null, null);
    }

    public void inject(NKScriptContext context) throws Exception {
        this.injected = true;
        this._context = context;
        context.evaluateJavaScript(source, null);
        NKLogging.log(String.format("+E%s Injected %s ", context.id(), filename));
    }

    public void eject() {
        if (!injected)
            return ;
         
        if (_context == null)
            return ;

        try {
            _context.evaluateJavaScript(cleanup,  null);
        } catch (Exception e) {
// Path: nkscripting/src/main/java/io/nodekit/nkscripting/util/NKLogging.java
// public class NKLogging {
// 
//     public static class Entry {
//         String message = null;
//         Level severity = null;
//         Map<String, String> labels = null;
// 
// 
//         Entry(String message, Level severity, Map<String, String> labels){
//             this.severity = severity;
//             this.message = message;
//             this.labels = labels;
//         }
// 
//         public String getMessage() {
//             return message;
//         }
// 
//         public String getSeverity() {
//             return severity.toString();
//         }
// 
//         public Level getSeverityLevel() {
//             return severity;
//         }
// 
//         public Map<String, String> getLabels() {
//             return labels;
//         }
//     }
// 
//     public enum Level
//     {
//         Emergency,
//         Alert ,
//         Critical,
//         Error ,
//         Warning ,
//         Notice,
//         Info ,
//         Debug
//     }
// 
//     private static final String TAG = "NodeKit";
// 
//     public static void log(String message)
//     {
//        log(message, Level.Debug, new HashMap<String, String>() );
//     }
// 
//     public static void log(String message, Level severity)
//     {
//         log(message, severity, new HashMap<String, String>());
//     }
// 
//     public static void log(String message, String severity, Map<String, String> labels)
//     {
//         log(message, Level.valueOf(severity), labels);
//     }
// 
//     public static void log(String message, Level severity, Map<String, String> labels)
//     {
//         Log.v(TAG, message);
//         NKEventEmitter.global.emit("log", new Entry(message, severity, labels));
//     }
// 
//     public static void log(Exception e)
//     {
//         log("ERROR " + e.toString() + " in " +  Arrays.toString(e.getStackTrace()), Level.Error, new HashMap<String, String>() );
//     }
// 
// }


// Path: nkscripting/src/main/java/io/nodekit/nkscripting/NKScriptSource.java
import io.nodekit.nkscripting.util.NKLogging;

        {
            this.source = source + "\n//# sourceURL=" + this.filename + "\n";
        }
    }

    public NKScriptSource(String source, String asFilename, String ns)  {
        this(source, asFilename, ns, null);
    }

    public NKScriptSource(String source, String asFilename)  {
        this(source, asFilename, null, null);
    }

    public void inject(NKScriptContext context) throws Exception {
        this.injected = true;
        this._context = context;
        context.evaluateJavaScript(source, null);
        NKLogging.log(String.format("+E%s Injected %s ", context.id(), filename));
    }

    public void eject() {
        if (!injected)
            return ;
         
        if (_context == null)
            return ;

        try {
            _context.evaluateJavaScript(cleanup,  null);
        } catch (Exception e) {
            NKLogging.log(e);