summaryrefslogtreecommitdiff
path: root/cli/tests/unit_node/vm_test.ts
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-12-11 12:38:45 +0530
committerGitHub <noreply@github.com>2023-12-11 07:08:45 +0000
commit02e138dca9c9fd79f47d352114b45b21dbb2b2ba (patch)
tree396fce46b544635ecec93a0c7592d570e48474cb /cli/tests/unit_node/vm_test.ts
parent0bee37a5e24048cbf92c1b56efd0c65deaea1418 (diff)
fix(ext/node): basic vm.runInNewContext implementation (#21527)
Simple implementation to support webpack (& Next.js): https://github.com/webpack/webpack/blob/87660921808566ef3b8796f8df61bd79fc026108/lib/javascript/JavascriptParser.js#L4329
Diffstat (limited to 'cli/tests/unit_node/vm_test.ts')
-rw-r--r--cli/tests/unit_node/vm_test.ts57
1 files changed, 57 insertions, 0 deletions
diff --git a/cli/tests/unit_node/vm_test.ts b/cli/tests/unit_node/vm_test.ts
new file mode 100644
index 000000000..c43495e1d
--- /dev/null
+++ b/cli/tests/unit_node/vm_test.ts
@@ -0,0 +1,57 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+import { runInNewContext } from "node:vm";
+import {
+ assertEquals,
+ assertThrows,
+} from "../../../test_util/std/assert/mod.ts";
+
+Deno.test({
+ name: "vm runInNewContext",
+ fn() {
+ const two = runInNewContext("1 + 1");
+ assertEquals(two, 2);
+ },
+});
+
+Deno.test({
+ name: "vm runInNewContext sandbox",
+ fn() {
+ assertThrows(() => runInNewContext("Deno"));
+ // deno-lint-ignore no-var
+ var a = 1;
+ assertThrows(() => runInNewContext("a + 1"));
+
+ runInNewContext("a = 2");
+ assertEquals(a, 1);
+ },
+});
+
+// https://github.com/webpack/webpack/blob/87660921808566ef3b8796f8df61bd79fc026108/lib/javascript/JavascriptParser.js#L4329
+Deno.test({
+ name: "vm runInNewContext webpack magic comments",
+ fn() {
+ const webpackCommentRegExp = new RegExp(
+ /(^|\W)webpack[A-Z]{1,}[A-Za-z]{1,}:/,
+ );
+ const comments = [
+ 'webpackChunkName: "test"',
+ 'webpackMode: "lazy"',
+ "webpackPrefetch: true",
+ "webpackPreload: true",
+ "webpackProvidedExports: true",
+ 'webpackChunkLoading: "require"',
+ 'webpackExports: ["default", "named"]',
+ ];
+
+ for (const comment of comments) {
+ const result = webpackCommentRegExp.test(comment);
+ assertEquals(result, true);
+
+ const [[key, _value]]: [string, string][] = Object.entries(
+ runInNewContext(`(function(){return {${comment}};})()`),
+ );
+ const expectedKey = comment.split(":")[0].trim();
+ assertEquals(key, expectedKey);
+ }
+ },
+});