mirror of
https://github.com/denoland/deno.git
synced 2025-02-22 21:23:32 -05:00

Deno v1.39 introduces `vm.runInNewContext`. This may cause problems when using `Object.prototype.isPrototypeOf` to check built-in types. ```js import vm from "node:vm"; const err = new Error(); const crossErr = vm.runInNewContext(`new Error()`); console.assert( !(crossErr instanceof Error) ); console.assert( Object.getPrototypeOf(err) !== Object.getPrototypeOf(crossErr) ); ``` This PR changes to check using internal slots solves them. --- current: ``` > import vm from "node:vm"; undefined > vm.runInNewContext(`new Error("message")`) Error {} > vm.runInNewContext(`new Date("2018-12-10T02:26:59.002Z")`) Date {} ``` this PR: ``` > import vm from "node:vm"; undefined > vm.runInNewContext(`new Error("message")`) Error: message at <anonymous>:1:1 > vm.runInNewContext(`new Date("2018-12-10T02:26:59.002Z")`) 2018-12-10T02:26:59.002Z ``` --------- Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
28 lines
814 B
TypeScript
28 lines
814 B
TypeScript
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
|
|
|
import vm from "node:vm";
|
|
import { stripColor } from "../../../test_util/std/fmt/colors.ts";
|
|
import { assertStringIncludes } from "../../../test_util/std/assert/mod.ts";
|
|
|
|
Deno.test(function inspectCrossRealmObjects() {
|
|
assertStringIncludes(
|
|
stripColor(
|
|
Deno.inspect(vm.runInNewContext(`new Error("This is an error")`)),
|
|
),
|
|
"Error: This is an error",
|
|
);
|
|
assertStringIncludes(
|
|
stripColor(
|
|
Deno.inspect(
|
|
vm.runInNewContext(`new AggregateError([], "This is an error")`),
|
|
),
|
|
),
|
|
"AggregateError: This is an error",
|
|
);
|
|
assertStringIncludes(
|
|
stripColor(
|
|
Deno.inspect(vm.runInNewContext(`new Date("2018-12-10T02:26:59.002Z")`)),
|
|
),
|
|
"2018-12-10T02:26:59.002Z",
|
|
);
|
|
});
|