@salve-software/react-native-nitro-jsdom 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NitroJsdom.podspec +63 -0
- package/README.md +95 -0
- package/android/CMakeLists.txt +86 -0
- package/android/build.gradle +148 -0
- package/android/fix-prefab.gradle +51 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +9 -0
- package/android/src/main/java/com/nitrojsdom/NitroJsdomPackage.kt +20 -0
- package/cpp/HybridHtmlSandbox.cpp +171 -0
- package/cpp/HybridHtmlSandbox.hpp +47 -0
- package/cpp/lexbor/LexborDocument.cpp +365 -0
- package/cpp/lexbor/LexborDocument.hpp +71 -0
- package/cpp/quickjs/DOMBindings.cpp +57 -0
- package/cpp/quickjs/DOMBindings.hpp +21 -0
- package/cpp/quickjs/DOMBindingsInternal.cpp +157 -0
- package/cpp/quickjs/DOMBindingsInternal.hpp +83 -0
- package/cpp/quickjs/MutationObservers.cpp +546 -0
- package/cpp/quickjs/MutationObservers.hpp +127 -0
- package/cpp/quickjs/QuickJSRuntime.cpp +475 -0
- package/cpp/quickjs/QuickJSRuntime.hpp +110 -0
- package/cpp/quickjs/Storage.cpp +130 -0
- package/cpp/quickjs/Storage.hpp +40 -0
- package/cpp/quickjs/bindings/ClassListBindings.cpp +241 -0
- package/cpp/quickjs/bindings/ClassListBindings.hpp +29 -0
- package/cpp/quickjs/bindings/DatasetBindings.cpp +120 -0
- package/cpp/quickjs/bindings/DatasetBindings.hpp +20 -0
- package/cpp/quickjs/bindings/DocumentBindings.cpp +155 -0
- package/cpp/quickjs/bindings/DocumentBindings.hpp +19 -0
- package/cpp/quickjs/bindings/ElementBindings.cpp +1106 -0
- package/cpp/quickjs/bindings/ElementBindings.hpp +19 -0
- package/cpp/quickjs/bindings/EventBindings.cpp +352 -0
- package/cpp/quickjs/bindings/EventBindings.hpp +21 -0
- package/cpp/quickjs/bindings/FetchBindings.cpp +347 -0
- package/cpp/quickjs/bindings/FetchBindings.hpp +16 -0
- package/cpp/quickjs/bindings/StyleBindings.cpp +245 -0
- package/cpp/quickjs/bindings/StyleBindings.hpp +22 -0
- package/cpp/quickjs/bindings/TimerBindings.cpp +94 -0
- package/cpp/quickjs/bindings/TimerBindings.hpp +16 -0
- package/cpp/quickjs/bindings/WindowBindings.cpp +211 -0
- package/cpp/quickjs/bindings/WindowBindings.hpp +16 -0
- package/ios/Bridge.h +8 -0
- package/lib/commonjs/classes/JSDOM/JSDOM.class.js +138 -0
- package/lib/commonjs/classes/JSDOM/JSDOM.class.js.map +1 -0
- package/lib/commonjs/classes/JSDOM/index.js +17 -0
- package/lib/commonjs/classes/JSDOM/index.js.map +1 -0
- package/lib/commonjs/classes/JSDOM/types/IFetchOptions.js +2 -0
- package/lib/commonjs/classes/JSDOM/types/IFetchOptions.js.map +1 -0
- package/lib/commonjs/classes/JSDOM/types/IJSDOMOptions.js +6 -0
- package/lib/commonjs/classes/JSDOM/types/IJSDOMOptions.js.map +1 -0
- package/lib/commonjs/classes/JSDOM/types/index.js +2 -0
- package/lib/commonjs/classes/JSDOM/types/index.js.map +1 -0
- package/lib/commonjs/classes/index.js +17 -0
- package/lib/commonjs/classes/index.js.map +1 -0
- package/lib/commonjs/index.js +17 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/HtmlSandbox.nitro.js +6 -0
- package/lib/commonjs/specs/HtmlSandbox.nitro.js.map +1 -0
- package/lib/module/classes/JSDOM/JSDOM.class.js +133 -0
- package/lib/module/classes/JSDOM/JSDOM.class.js.map +1 -0
- package/lib/module/classes/JSDOM/index.js +4 -0
- package/lib/module/classes/JSDOM/index.js.map +1 -0
- package/lib/module/classes/JSDOM/types/IFetchOptions.js +2 -0
- package/lib/module/classes/JSDOM/types/IFetchOptions.js.map +1 -0
- package/lib/module/classes/JSDOM/types/IJSDOMOptions.js +4 -0
- package/lib/module/classes/JSDOM/types/IJSDOMOptions.js.map +1 -0
- package/lib/module/classes/JSDOM/types/index.js +2 -0
- package/lib/module/classes/JSDOM/types/index.js.map +1 -0
- package/lib/module/classes/index.js +4 -0
- package/lib/module/classes/index.js.map +1 -0
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/specs/HtmlSandbox.nitro.js +4 -0
- package/lib/module/specs/HtmlSandbox.nitro.js.map +1 -0
- package/lib/typescript/src/classes/JSDOM/JSDOM.class.d.ts +74 -0
- package/lib/typescript/src/classes/JSDOM/JSDOM.class.d.ts.map +1 -0
- package/lib/typescript/src/classes/JSDOM/index.d.ts +3 -0
- package/lib/typescript/src/classes/JSDOM/index.d.ts.map +1 -0
- package/lib/typescript/src/classes/JSDOM/types/IFetchOptions.d.ts +14 -0
- package/lib/typescript/src/classes/JSDOM/types/IFetchOptions.d.ts.map +1 -0
- package/lib/typescript/src/classes/JSDOM/types/IJSDOMOptions.d.ts +57 -0
- package/lib/typescript/src/classes/JSDOM/types/IJSDOMOptions.d.ts.map +1 -0
- package/lib/typescript/src/classes/JSDOM/types/index.d.ts +3 -0
- package/lib/typescript/src/classes/JSDOM/types/index.d.ts.map +1 -0
- package/lib/typescript/src/classes/index.d.ts +2 -0
- package/lib/typescript/src/classes/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/specs/HtmlSandbox.nitro.d.ts +13 -0
- package/lib/typescript/src/specs/HtmlSandbox.nitro.d.ts.map +1 -0
- package/nitro.json +26 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/NitroJsdom+autolinking.cmake +81 -0
- package/nitrogen/generated/android/NitroJsdom+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NitroJsdomOnLoad.cpp +49 -0
- package/nitrogen/generated/android/NitroJsdomOnLoad.hpp +34 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrojsdom/NitroJsdomOnLoad.kt +35 -0
- package/nitrogen/generated/ios/NitroJsdom+autolinking.rb +62 -0
- package/nitrogen/generated/ios/NitroJsdom-Swift-Cxx-Bridge.cpp +17 -0
- package/nitrogen/generated/ios/NitroJsdom-Swift-Cxx-Bridge.hpp +27 -0
- package/nitrogen/generated/ios/NitroJsdom-Swift-Cxx-Umbrella.hpp +38 -0
- package/nitrogen/generated/ios/NitroJsdomAutolinking.mm +35 -0
- package/nitrogen/generated/ios/NitroJsdomAutolinking.swift +16 -0
- package/nitrogen/generated/shared/c++/HybridHtmlSandboxSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridHtmlSandboxSpec.hpp +73 -0
- package/package.json +131 -0
- package/src/classes/JSDOM/JSDOM.class.ts +145 -0
- package/src/classes/JSDOM/index.ts +2 -0
- package/src/classes/JSDOM/types/IFetchOptions.ts +14 -0
- package/src/classes/JSDOM/types/IJSDOMOptions.ts +57 -0
- package/src/classes/JSDOM/types/index.ts +2 -0
- package/src/classes/index.ts +1 -0
- package/src/index.ts +1 -0
- package/src/specs/HtmlSandbox.nitro.ts +33 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NitroModules } from "react-native-nitro-modules";
|
|
4
|
+
function safeParseHeaders(headersJson) {
|
|
5
|
+
try {
|
|
6
|
+
const parsed = JSON.parse(headersJson);
|
|
7
|
+
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
8
|
+
} catch {
|
|
9
|
+
return {};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class JSDOM {
|
|
13
|
+
_disposed = false;
|
|
14
|
+
constructor(sandbox) {
|
|
15
|
+
this.sandbox = sandbox;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new sandboxed DOM environment.
|
|
20
|
+
*
|
|
21
|
+
* @param html - The initial HTML document string.
|
|
22
|
+
* @param options.runScripts - Execute `<script>` tags found in the HTML. Default: `true`.
|
|
23
|
+
* @param options.url - Value of `window.location.href` inside the sandbox. Default: `'about:blank'`.
|
|
24
|
+
* @param options.pretendToBeVisual - Sets `document.hidden = false`, allowing scripts that
|
|
25
|
+
* gate on page visibility (e.g. `requestAnimationFrame`) to run. Default: `false`.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const dom = JSDOM.create('<html><body><div id="result">0</div></body></html>')
|
|
30
|
+
* await dom.evaluate(`document.getElementById('result').textContent = String(2 + 2)`)
|
|
31
|
+
* const value = await dom.evaluate(`document.getElementById('result').textContent`)
|
|
32
|
+
* // value → "4"
|
|
33
|
+
* dom.dispose()
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
static create(html, options) {
|
|
37
|
+
const sandbox = NitroModules.createHybridObject('HtmlSandbox');
|
|
38
|
+
sandbox.initialize(html, options?.runScripts ?? true, options?.url ?? 'about:blank');
|
|
39
|
+
if (options?.onConsole) {
|
|
40
|
+
const cb = options.onConsole;
|
|
41
|
+
sandbox.setConsoleCallback((level, args) => cb(level, args));
|
|
42
|
+
} else {
|
|
43
|
+
sandbox.setConsoleCallback(null);
|
|
44
|
+
}
|
|
45
|
+
if (options?.onAlert || options?.onConfirm || options?.onPrompt) {
|
|
46
|
+
sandbox.setDialogCallbacks(options.onAlert ?? null, options.onConfirm ?? null, options.onPrompt ?? null);
|
|
47
|
+
}
|
|
48
|
+
if (options?.onFetch) {
|
|
49
|
+
const onFetch = options.onFetch;
|
|
50
|
+
sandbox.setFetchCallback(async (url, method, headersJson, body) => {
|
|
51
|
+
const headers = safeParseHeaders(headersJson);
|
|
52
|
+
return onFetch(url, {
|
|
53
|
+
method,
|
|
54
|
+
headers,
|
|
55
|
+
body
|
|
56
|
+
}).then(res => JSON.stringify({
|
|
57
|
+
ok: (res.status ?? 200) >= 200 && (res.status ?? 200) < 300,
|
|
58
|
+
status: res.status ?? 200,
|
|
59
|
+
statusText: res.statusText ?? '',
|
|
60
|
+
headersJson: JSON.stringify(res.headers ?? {}),
|
|
61
|
+
body: res.body ?? ''
|
|
62
|
+
})).catch(err => JSON.stringify({
|
|
63
|
+
error: err instanceof Error ? err.message : String(err)
|
|
64
|
+
}));
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return new JSDOM(sandbox);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Runs arbitrary JavaScript inside the isolated QuickJS sandbox.
|
|
72
|
+
* The return value is coerced to a string (same behaviour as `String(expr)` in JS).
|
|
73
|
+
*
|
|
74
|
+
* This is the **only** door into the sandbox — all DOM queries and mutations must
|
|
75
|
+
* be expressed as JS strings passed to `evaluate()`.
|
|
76
|
+
*
|
|
77
|
+
* @param script - Any valid JS expression or block of statements.
|
|
78
|
+
* @returns The stringified result of the last evaluated expression.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* // Mutate the DOM
|
|
83
|
+
* await dom.evaluate(`document.getElementById('price').textContent = (qty * unitPrice).toFixed(2)`)
|
|
84
|
+
*
|
|
85
|
+
* // Read from the DOM
|
|
86
|
+
* const text = await dom.evaluate(`document.getElementById('price').textContent`)
|
|
87
|
+
* // text → "42.00"
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
evaluate(script) {
|
|
91
|
+
if (this._disposed) {
|
|
92
|
+
return Promise.reject(new Error("JSDOM instance has been disposed"));
|
|
93
|
+
}
|
|
94
|
+
return this.sandbox.evaluate(script);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Serializes the current state of the document back to an HTML string.
|
|
99
|
+
* Reflects any DOM mutations made via `evaluate()`.
|
|
100
|
+
*
|
|
101
|
+
* Returns an empty string if called after `dispose()`.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* await dom.evaluate(`document.title = 'Hello'`)
|
|
106
|
+
* dom.serialize() // "<html><head><title>Hello</title></head>...</html>"
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
serialize() {
|
|
110
|
+
if (this._disposed) return "";
|
|
111
|
+
return this.sandbox.serialize();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Frees all native memory held by this sandbox (Lexbor document + QuickJS runtime).
|
|
116
|
+
* After calling `dispose()`, any further `evaluate()` calls will reject with an error.
|
|
117
|
+
* Calling `dispose()` multiple times is safe (idempotent).
|
|
118
|
+
* Always call this when you are done with the sandbox to avoid memory leaks.
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* const dom = JSDOM.create(html)
|
|
123
|
+
* const value = await dom.evaluate(`window.__result`)
|
|
124
|
+
* dom.dispose() // ← always pair with create()
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
dispose() {
|
|
128
|
+
if (this._disposed) return;
|
|
129
|
+
this._disposed = true;
|
|
130
|
+
this.sandbox = null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=JSDOM.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NitroModules","safeParseHeaders","headersJson","parsed","JSON","parse","JSDOM","_disposed","constructor","sandbox","create","html","options","createHybridObject","initialize","runScripts","url","onConsole","cb","setConsoleCallback","level","args","onAlert","onConfirm","onPrompt","setDialogCallbacks","onFetch","setFetchCallback","method","body","headers","then","res","stringify","ok","status","statusText","catch","err","error","Error","message","String","evaluate","script","Promise","reject","serialize","dispose"],"sourceRoot":"../../../../src","sources":["classes/JSDOM/JSDOM.class.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["classes/JSDOM/index.ts"],"mappings":";;AACA,cAAc,eAAe","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["classes/JSDOM/types/IFetchOptions.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["classes/JSDOM/types/IJSDOMOptions.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["classes/JSDOM/types/index.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["classes/index.ts"],"mappings":";;AAAA,cAAc,SAAS","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,WAAW","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/HtmlSandbox.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { IJSDOMOptions } from "./types";
|
|
2
|
+
export declare class JSDOM {
|
|
3
|
+
private sandbox;
|
|
4
|
+
private _disposed;
|
|
5
|
+
private constructor();
|
|
6
|
+
/**
|
|
7
|
+
* Creates a new sandboxed DOM environment.
|
|
8
|
+
*
|
|
9
|
+
* @param html - The initial HTML document string.
|
|
10
|
+
* @param options.runScripts - Execute `<script>` tags found in the HTML. Default: `true`.
|
|
11
|
+
* @param options.url - Value of `window.location.href` inside the sandbox. Default: `'about:blank'`.
|
|
12
|
+
* @param options.pretendToBeVisual - Sets `document.hidden = false`, allowing scripts that
|
|
13
|
+
* gate on page visibility (e.g. `requestAnimationFrame`) to run. Default: `false`.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* const dom = JSDOM.create('<html><body><div id="result">0</div></body></html>')
|
|
18
|
+
* await dom.evaluate(`document.getElementById('result').textContent = String(2 + 2)`)
|
|
19
|
+
* const value = await dom.evaluate(`document.getElementById('result').textContent`)
|
|
20
|
+
* // value → "4"
|
|
21
|
+
* dom.dispose()
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
static create(html: string, options?: IJSDOMOptions): JSDOM;
|
|
25
|
+
/**
|
|
26
|
+
* Runs arbitrary JavaScript inside the isolated QuickJS sandbox.
|
|
27
|
+
* The return value is coerced to a string (same behaviour as `String(expr)` in JS).
|
|
28
|
+
*
|
|
29
|
+
* This is the **only** door into the sandbox — all DOM queries and mutations must
|
|
30
|
+
* be expressed as JS strings passed to `evaluate()`.
|
|
31
|
+
*
|
|
32
|
+
* @param script - Any valid JS expression or block of statements.
|
|
33
|
+
* @returns The stringified result of the last evaluated expression.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* // Mutate the DOM
|
|
38
|
+
* await dom.evaluate(`document.getElementById('price').textContent = (qty * unitPrice).toFixed(2)`)
|
|
39
|
+
*
|
|
40
|
+
* // Read from the DOM
|
|
41
|
+
* const text = await dom.evaluate(`document.getElementById('price').textContent`)
|
|
42
|
+
* // text → "42.00"
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
evaluate(script: string): Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Serializes the current state of the document back to an HTML string.
|
|
48
|
+
* Reflects any DOM mutations made via `evaluate()`.
|
|
49
|
+
*
|
|
50
|
+
* Returns an empty string if called after `dispose()`.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts
|
|
54
|
+
* await dom.evaluate(`document.title = 'Hello'`)
|
|
55
|
+
* dom.serialize() // "<html><head><title>Hello</title></head>...</html>"
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
serialize(): string;
|
|
59
|
+
/**
|
|
60
|
+
* Frees all native memory held by this sandbox (Lexbor document + QuickJS runtime).
|
|
61
|
+
* After calling `dispose()`, any further `evaluate()` calls will reject with an error.
|
|
62
|
+
* Calling `dispose()` multiple times is safe (idempotent).
|
|
63
|
+
* Always call this when you are done with the sandbox to avoid memory leaks.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const dom = JSDOM.create(html)
|
|
68
|
+
* const value = await dom.evaluate(`window.__result`)
|
|
69
|
+
* dom.dispose() // ← always pair with create()
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
dispose(): void;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=JSDOM.class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JSDOM.class.d.ts","sourceRoot":"","sources":["../../../../../src/classes/JSDOM/JSDOM.class.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAY7C,qBAAa,KAAK;IAChB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,SAAS,CAAkB;IAEnC,OAAO;IAIP;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK;IA2C3D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOzC;;;;;;;;;;;OAWG;IACH,SAAS,IAAI,MAAM;IAKnB;;;;;;;;;;;;OAYG;IACH,OAAO,IAAI,IAAI;CAKhB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/classes/JSDOM/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,SAAS,CAAC;AAC7B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** The request passed to `onFetch` when `fetch(url, init)` is called inside the sandbox. */
|
|
2
|
+
export interface IFetchRequestInit {
|
|
3
|
+
method: string;
|
|
4
|
+
headers: Record<string, string>;
|
|
5
|
+
body?: string;
|
|
6
|
+
}
|
|
7
|
+
/** The response `onFetch` must resolve with. */
|
|
8
|
+
export interface IFetchResponseInit {
|
|
9
|
+
status: number;
|
|
10
|
+
statusText?: string;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
body?: string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=IFetchOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IFetchOptions.d.ts","sourceRoot":"","sources":["../../../../../../src/classes/JSDOM/types/IFetchOptions.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { IFetchRequestInit, IFetchResponseInit } from './IFetchOptions';
|
|
2
|
+
export interface IJSDOMOptions {
|
|
3
|
+
/** Execute <script> tags found in the initial HTML. Default: true */
|
|
4
|
+
runScripts?: boolean;
|
|
5
|
+
/** Value of window.location.href inside the sandbox. Default: 'about:blank' */
|
|
6
|
+
url?: string;
|
|
7
|
+
/** Sets document.hidden = false. Default: false */
|
|
8
|
+
pretendToBeVisual?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Callback invoked whenever console.log / warn / error / info / debug is called
|
|
11
|
+
* inside the sandbox. If not provided, console output is silently discarded.
|
|
12
|
+
*/
|
|
13
|
+
onConsole?: (level: 'log' | 'warn' | 'error' | 'info' | 'debug', args: string[]) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Callback invoked when `window.alert(message)` is called inside the sandbox.
|
|
16
|
+
* If not provided, alert() is a silent no-op (browser default when no UI is available).
|
|
17
|
+
*
|
|
18
|
+
* WARNING: The callback is synchronous. Do NOT call back into the same sandbox
|
|
19
|
+
* from inside the callback — QuickJS is not re-entrant.
|
|
20
|
+
*/
|
|
21
|
+
onAlert?: (message: string) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Callback invoked when `window.confirm(message)` is called inside the sandbox.
|
|
24
|
+
* Must return a boolean. If not provided, confirm() returns false (browser default).
|
|
25
|
+
*
|
|
26
|
+
* WARNING: The callback is synchronous. Do NOT call back into the same sandbox
|
|
27
|
+
* from inside the callback — QuickJS is not re-entrant.
|
|
28
|
+
*/
|
|
29
|
+
onConfirm?: (message: string) => boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Callback invoked when `window.prompt(message, defaultValue?)` is called inside
|
|
32
|
+
* the sandbox. Return a string for the user input, or null for a dismissed prompt.
|
|
33
|
+
* If not provided, prompt() returns null (browser default for dismissed prompts).
|
|
34
|
+
*
|
|
35
|
+
* WARNING: The callback is synchronous. Do NOT call back into the same sandbox
|
|
36
|
+
* from inside the callback — QuickJS is not re-entrant.
|
|
37
|
+
*/
|
|
38
|
+
onPrompt?: (message: string, defaultValue?: string) => string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Callback invoked when `fetch(url, init)` is called inside the sandbox.
|
|
41
|
+
* Receives the request and must resolve with the response. If not provided,
|
|
42
|
+
* `fetch()` inside the sandbox rejects with "fetch is not available".
|
|
43
|
+
*
|
|
44
|
+
* Typically wired to React Native's real `fetch()`:
|
|
45
|
+
* ```ts
|
|
46
|
+
* onFetch: async (url, init) => {
|
|
47
|
+
* const res = await fetch(url, init)
|
|
48
|
+
* return { status: res.status, statusText: res.statusText, headers: Object.fromEntries(res.headers), body: await res.text() }
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* WARNING: Do NOT call back into the same sandbox (`dom.evaluate()`) from inside
|
|
53
|
+
* this callback — QuickJS is not re-entrant.
|
|
54
|
+
*/
|
|
55
|
+
onFetch?: (url: string, init: IFetchRequestInit) => Promise<IFetchResponseInit>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=IJSDOMOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IJSDOMOptions.d.ts","sourceRoot":"","sources":["../../../../../../src/classes/JSDOM/types/IJSDOMOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACzF;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrE;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACjF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/classes/JSDOM/types/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/classes/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export interface HtmlSandbox extends HybridObject<{
|
|
3
|
+
ios: 'c++';
|
|
4
|
+
android: 'c++';
|
|
5
|
+
}> {
|
|
6
|
+
initialize(html: string, runScripts: boolean, url: string): void;
|
|
7
|
+
evaluate(script: string): Promise<string>;
|
|
8
|
+
serialize(): string;
|
|
9
|
+
setConsoleCallback(callback: ((level: string, args: string[]) => void) | null): void;
|
|
10
|
+
setDialogCallbacks(onAlert: ((message: string) => void) | null, onConfirm: ((message: string) => boolean) | null, onPrompt: ((message: string, defaultValue?: string) => string | null) | null): void;
|
|
11
|
+
setFetchCallback(callback: ((url: string, method: string, headersJson: string, body?: string) => Promise<string>) | null): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=HtmlSandbox.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlSandbox.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/HtmlSandbox.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,WAAY,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IAE/E,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAG1C,SAAS,IAAI,MAAM,CAAC;IAGpB,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAIrF,kBAAkB,CAChB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,EAC3C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,EAChD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,GAC3E,IAAI,CAAC;IAQR,gBAAgB,CACd,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GACtG,IAAI,CAAC;CACT"}
|
package/nitro.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://nitro.margelo.com/nitro.schema.json",
|
|
3
|
+
"cxxNamespace": [
|
|
4
|
+
"nitrojsdom"
|
|
5
|
+
],
|
|
6
|
+
"ios": {
|
|
7
|
+
"iosModuleName": "NitroJsdom"
|
|
8
|
+
},
|
|
9
|
+
"android": {
|
|
10
|
+
"androidNamespace": [
|
|
11
|
+
"nitrojsdom"
|
|
12
|
+
],
|
|
13
|
+
"androidCxxLibName": "NitroJsdom"
|
|
14
|
+
},
|
|
15
|
+
"autolinking": {
|
|
16
|
+
"HtmlSandbox": {
|
|
17
|
+
"all": {
|
|
18
|
+
"language": "c++",
|
|
19
|
+
"implementationClassName": "HybridHtmlSandbox"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"ignorePaths": [
|
|
24
|
+
"**/node_modules"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
** linguist-generated=true
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#
|
|
2
|
+
# NitroJsdom+autolinking.cmake
|
|
3
|
+
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
# https://github.com/mrousavy/nitro
|
|
5
|
+
# Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
# This is a CMake file that adds all files generated by Nitrogen
|
|
9
|
+
# to the current CMake project.
|
|
10
|
+
#
|
|
11
|
+
# To use it, add this to your CMakeLists.txt:
|
|
12
|
+
# ```cmake
|
|
13
|
+
# include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/NitroJsdom+autolinking.cmake)
|
|
14
|
+
# ```
|
|
15
|
+
|
|
16
|
+
# Define a flag to check if we are building properly
|
|
17
|
+
add_definitions(-DBUILDING_NITROJSDOM_WITH_GENERATED_CMAKE_PROJECT)
|
|
18
|
+
|
|
19
|
+
# Enable Raw Props parsing in react-native (for Nitro Views)
|
|
20
|
+
add_definitions(-DRN_SERIALIZABLE_STATE)
|
|
21
|
+
|
|
22
|
+
# Add all headers that were generated by Nitrogen
|
|
23
|
+
include_directories(
|
|
24
|
+
"../nitrogen/generated/shared/c++"
|
|
25
|
+
"../nitrogen/generated/android/c++"
|
|
26
|
+
"../nitrogen/generated/android/"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Add all .cpp sources that were generated by Nitrogen
|
|
30
|
+
target_sources(
|
|
31
|
+
# CMake project name (Android C++ library name)
|
|
32
|
+
NitroJsdom PRIVATE
|
|
33
|
+
# Autolinking Setup
|
|
34
|
+
../nitrogen/generated/android/NitroJsdomOnLoad.cpp
|
|
35
|
+
# Shared Nitrogen C++ sources
|
|
36
|
+
../nitrogen/generated/shared/c++/HybridHtmlSandboxSpec.cpp
|
|
37
|
+
# Android-specific Nitrogen C++ sources
|
|
38
|
+
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
|
|
42
|
+
# Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
|
|
43
|
+
target_compile_definitions(
|
|
44
|
+
NitroJsdom PRIVATE
|
|
45
|
+
-DFOLLY_NO_CONFIG=1
|
|
46
|
+
-DFOLLY_HAVE_CLOCK_GETTIME=1
|
|
47
|
+
-DFOLLY_USE_LIBCPP=1
|
|
48
|
+
-DFOLLY_CFG_NO_COROUTINES=1
|
|
49
|
+
-DFOLLY_MOBILE=1
|
|
50
|
+
-DFOLLY_HAVE_RECVMMSG=1
|
|
51
|
+
-DFOLLY_HAVE_PTHREAD=1
|
|
52
|
+
# Once we target android-23 above, we can comment
|
|
53
|
+
# the following line. NDK uses GNU style stderror_r() after API 23.
|
|
54
|
+
-DFOLLY_HAVE_XSI_STRERROR_R=1
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Add all libraries required by the generated specs
|
|
58
|
+
find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
|
|
59
|
+
find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
|
|
60
|
+
find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
|
|
61
|
+
|
|
62
|
+
# Link all libraries together
|
|
63
|
+
target_link_libraries(
|
|
64
|
+
NitroJsdom
|
|
65
|
+
fbjni::fbjni # <-- Facebook C++ JNI helpers
|
|
66
|
+
ReactAndroid::jsi # <-- RN: JSI
|
|
67
|
+
react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# Link react-native (different prefab between RN 0.75 and RN 0.76)
|
|
71
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
72
|
+
target_link_libraries(
|
|
73
|
+
NitroJsdom
|
|
74
|
+
ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
|
|
75
|
+
)
|
|
76
|
+
else()
|
|
77
|
+
target_link_libraries(
|
|
78
|
+
NitroJsdom
|
|
79
|
+
ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
|
|
80
|
+
)
|
|
81
|
+
endif()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// NitroJsdom+autolinking.gradle
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
/// This is a Gradle file that adds all files generated by Nitrogen
|
|
9
|
+
/// to the current Gradle project.
|
|
10
|
+
///
|
|
11
|
+
/// To use it, add this to your build.gradle:
|
|
12
|
+
/// ```gradle
|
|
13
|
+
/// apply from: '../nitrogen/generated/android/NitroJsdom+autolinking.gradle'
|
|
14
|
+
/// ```
|
|
15
|
+
|
|
16
|
+
logger.warn("[NitroModules] 🔥 NitroJsdom is boosted by nitro!")
|
|
17
|
+
|
|
18
|
+
android {
|
|
19
|
+
sourceSets {
|
|
20
|
+
main {
|
|
21
|
+
java.srcDirs += [
|
|
22
|
+
// Nitrogen files
|
|
23
|
+
"${project.projectDir}/../nitrogen/generated/android/kotlin"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// NitroJsdomOnLoad.cpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#ifndef BUILDING_NITROJSDOM_WITH_GENERATED_CMAKE_PROJECT
|
|
9
|
+
#error NitroJsdomOnLoad.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#include "NitroJsdomOnLoad.hpp"
|
|
13
|
+
|
|
14
|
+
#include <jni.h>
|
|
15
|
+
#include <fbjni/fbjni.h>
|
|
16
|
+
#include <NitroModules/HybridObjectRegistry.hpp>
|
|
17
|
+
|
|
18
|
+
#include "HybridHtmlSandbox.hpp"
|
|
19
|
+
|
|
20
|
+
namespace margelo::nitro::nitrojsdom {
|
|
21
|
+
|
|
22
|
+
int initialize(JavaVM* vm) {
|
|
23
|
+
return facebook::jni::initialize(vm, []() {
|
|
24
|
+
::margelo::nitro::nitrojsdom::registerAllNatives();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
void registerAllNatives() {
|
|
31
|
+
using namespace margelo::nitro;
|
|
32
|
+
using namespace margelo::nitro::nitrojsdom;
|
|
33
|
+
|
|
34
|
+
// Register native JNI methods
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
// Register Nitro Hybrid Objects
|
|
38
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
39
|
+
"HtmlSandbox",
|
|
40
|
+
[]() -> std::shared_ptr<HybridObject> {
|
|
41
|
+
static_assert(std::is_default_constructible_v<HybridHtmlSandbox>,
|
|
42
|
+
"The HybridObject \"HybridHtmlSandbox\" is not default-constructible! "
|
|
43
|
+
"Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
|
|
44
|
+
return std::make_shared<HybridHtmlSandbox>();
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
} // namespace margelo::nitro::nitrojsdom
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// NitroJsdomOnLoad.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#include <jni.h>
|
|
9
|
+
#include <functional>
|
|
10
|
+
#include <NitroModules/NitroDefines.hpp>
|
|
11
|
+
|
|
12
|
+
namespace margelo::nitro::nitrojsdom {
|
|
13
|
+
|
|
14
|
+
[[deprecated("Use registerNatives() instead.")]]
|
|
15
|
+
int initialize(JavaVM* vm);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Register the native (C++) part of NitroJsdom, and autolinks all Hybrid Objects.
|
|
19
|
+
* Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`),
|
|
20
|
+
* inside a `facebook::jni::initialize(vm, ...)` call.
|
|
21
|
+
* Example:
|
|
22
|
+
* ```cpp (cpp-adapter.cpp)
|
|
23
|
+
* JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
|
|
24
|
+
* return facebook::jni::initialize(vm, []() {
|
|
25
|
+
* // register all NitroJsdom HybridObjects
|
|
26
|
+
* margelo::nitro::nitrojsdom::registerNatives();
|
|
27
|
+
* // any other custom registrations go here.
|
|
28
|
+
* });
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
void registerAllNatives();
|
|
33
|
+
|
|
34
|
+
} // namespace margelo::nitro::nitrojsdom
|