mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 07:44:48 -05:00
feat(cli): add --unstable-node-globals
flag (#26617)
This PR adds a new `--unstable-node-globals` flag to expose Node globals by default. Fixes https://github.com/denoland/deno/issues/26611 --------- Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
This commit is contained in:
parent
4e899d48cf
commit
de34c7ed29
13 changed files with 75 additions and 21 deletions
|
@ -534,6 +534,7 @@
|
|||
"http",
|
||||
"kv",
|
||||
"net",
|
||||
"node-globals",
|
||||
"sloppy-imports",
|
||||
"temporal",
|
||||
"unsafe-proto",
|
||||
|
|
|
@ -339,28 +339,40 @@ fn get_suggestions_for_terminal_errors(e: &JsError) -> Vec<FixSuggestion> {
|
|||
FixSuggestion::info(cstr!(
|
||||
"<u>Buffer</> is not available in the global scope in Deno."
|
||||
)),
|
||||
FixSuggestion::hint(cstr!("Import it explicitly with <u>import { Buffer } from \"node:buffer\";</>.")),
|
||||
FixSuggestion::hint_multiline(&[
|
||||
cstr!("Import it explicitly with <u>import { Buffer } from \"node:buffer\";</>,"),
|
||||
cstr!("or run again with <u>--unstable-node-globals</> flag to add this global."),
|
||||
]),
|
||||
];
|
||||
} else if msg.contains("clearImmediate is not defined") {
|
||||
return vec![
|
||||
FixSuggestion::info(cstr!(
|
||||
"<u>clearImmediate</> is not available in the global scope in Deno."
|
||||
)),
|
||||
FixSuggestion::hint(cstr!("Import it explicitly with <u>import { clearImmediate } from \"node:timers\";</>.")),
|
||||
FixSuggestion::hint_multiline(&[
|
||||
cstr!("Import it explicitly with <u>import { clearImmediate } from \"node:timers\";</>,"),
|
||||
cstr!("or run again with <u>--unstable-node-globals</> flag to add this global."),
|
||||
]),
|
||||
];
|
||||
} else if msg.contains("setImmediate is not defined") {
|
||||
return vec![
|
||||
FixSuggestion::info(cstr!(
|
||||
"<u>setImmediate</> is not available in the global scope in Deno."
|
||||
)),
|
||||
FixSuggestion::hint(cstr!("Import it explicitly with <u>import { setImmediate } from \"node:timers\";</>.")),
|
||||
FixSuggestion::hint_multiline(
|
||||
&[cstr!("Import it explicitly with <u>import { setImmediate } from \"node:timers\";</>,"),
|
||||
cstr!("or run again with <u>--unstable-node-globals</> flag to add this global."),
|
||||
]),
|
||||
];
|
||||
} else if msg.contains("global is not defined") {
|
||||
return vec![
|
||||
FixSuggestion::info(cstr!(
|
||||
"<u>global</> is not available in the global scope in Deno."
|
||||
)),
|
||||
FixSuggestion::hint(cstr!("Use <u>globalThis</> instead, or assign <u>globalThis.global = globalThis</>.")),
|
||||
FixSuggestion::hint_multiline(&[
|
||||
cstr!("Use <u>globalThis</> instead, or assign <u>globalThis.global = globalThis</>,"),
|
||||
cstr!("or run again with <u>--unstable-node-globals</> flag to add this global."),
|
||||
]),
|
||||
];
|
||||
} else if msg.contains("openKv is not a function") {
|
||||
return vec![
|
||||
|
|
|
@ -144,12 +144,13 @@ const unstableIds = {
|
|||
http: 5,
|
||||
kv: 6,
|
||||
net: 7,
|
||||
otel: 8,
|
||||
process: 9,
|
||||
temporal: 10,
|
||||
unsafeProto: 11,
|
||||
webgpu: 12,
|
||||
workerOptions: 13,
|
||||
nodeGlobals: 8,
|
||||
otel: 9,
|
||||
process: 10,
|
||||
temporal: 11,
|
||||
unsafeProto: 12,
|
||||
webgpu: 13,
|
||||
workerOptions: 14,
|
||||
};
|
||||
|
||||
const denoNsUnstableById = { __proto__: null };
|
||||
|
|
|
@ -32,6 +32,8 @@ import { DOMException } from "ext:deno_web/01_dom_exception.js";
|
|||
import * as abortSignal from "ext:deno_web/03_abort_signal.js";
|
||||
import * as imageData from "ext:deno_web/16_image_data.js";
|
||||
import process from "node:process";
|
||||
import Buffer from "node:buffer";
|
||||
import { clearImmediate, setImmediate } from "node:timers";
|
||||
import { loadWebGPU } from "ext:deno_webgpu/00_init.js";
|
||||
import * as webgpuSurface from "ext:deno_webgpu/02_surface.js";
|
||||
import { unstableIds } from "ext:runtime/90_deno_ns.js";
|
||||
|
@ -300,4 +302,15 @@ unstableForWindowOrWorkerGlobalScope[unstableIds.net] = {
|
|||
|
||||
unstableForWindowOrWorkerGlobalScope[unstableIds.webgpu] = {};
|
||||
|
||||
unstableForWindowOrWorkerGlobalScope[unstableIds.nodeGlobals] = {
|
||||
Buffer: core.propWritable(Buffer),
|
||||
setImmediate: core.propWritable(setImmediate),
|
||||
clearImmediate: core.propWritable(clearImmediate),
|
||||
global: {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
get: () => globalThis,
|
||||
},
|
||||
};
|
||||
|
||||
export { unstableForWindowOrWorkerGlobalScope, windowOrWorkerGlobalScope };
|
||||
|
|
|
@ -99,24 +99,30 @@ pub static UNSTABLE_GRANULAR_FLAGS: &[UnstableGranularFlag] = &[
|
|||
show_in_help: true,
|
||||
id: 7,
|
||||
},
|
||||
UnstableGranularFlag {
|
||||
name: "node-globals",
|
||||
help_text: "Expose Node globals everywhere",
|
||||
show_in_help: true,
|
||||
id: 8,
|
||||
},
|
||||
UnstableGranularFlag {
|
||||
name: "otel",
|
||||
help_text: "Enable unstable OpenTelemetry features",
|
||||
show_in_help: false,
|
||||
id: 8,
|
||||
id: 9,
|
||||
},
|
||||
// TODO(bartlomieju): consider removing it
|
||||
UnstableGranularFlag {
|
||||
name: ops::process::UNSTABLE_FEATURE_NAME,
|
||||
help_text: "Enable unstable process APIs",
|
||||
show_in_help: false,
|
||||
id: 9,
|
||||
id: 10,
|
||||
},
|
||||
UnstableGranularFlag {
|
||||
name: "temporal",
|
||||
help_text: "Enable unstable Temporal API",
|
||||
show_in_help: true,
|
||||
id: 10,
|
||||
id: 11,
|
||||
},
|
||||
UnstableGranularFlag {
|
||||
name: "unsafe-proto",
|
||||
|
@ -124,19 +130,19 @@ pub static UNSTABLE_GRANULAR_FLAGS: &[UnstableGranularFlag] = &[
|
|||
show_in_help: true,
|
||||
// This number is used directly in the JS code. Search
|
||||
// for "unstableIds" to see where it's used.
|
||||
id: 11,
|
||||
id: 12,
|
||||
},
|
||||
UnstableGranularFlag {
|
||||
name: deno_webgpu::UNSTABLE_FEATURE_NAME,
|
||||
help_text: "Enable unstable `WebGPU` APIs",
|
||||
show_in_help: true,
|
||||
id: 12,
|
||||
id: 13,
|
||||
},
|
||||
UnstableGranularFlag {
|
||||
name: ops::worker_host::UNSTABLE_FEATURE_NAME,
|
||||
help_text: "Enable unstable Web Worker APIs",
|
||||
show_in_help: true,
|
||||
id: 13,
|
||||
id: 14,
|
||||
},
|
||||
];
|
||||
|
||||
|
|
|
@ -4,4 +4,5 @@ const _foo = setImmediate;
|
|||
at [WILDCARD]main.ts:3:14
|
||||
|
||||
info: setImmediate is not available in the global scope in Deno.
|
||||
hint: Import it explicitly with import { setImmediate } from "node:timers";.
|
||||
hint: Import it explicitly with import { setImmediate } from "node:timers";,
|
||||
or run again with --unstable-node-globals flag to add this global.
|
||||
|
|
|
@ -4,4 +4,5 @@ Buffer;
|
|||
at [WILDCARD]buffer.js:1:1
|
||||
|
||||
info: Buffer is not available in the global scope in Deno.
|
||||
hint: Import it explicitly with import { Buffer } from "node:buffer";.
|
||||
hint: Import it explicitly with import { Buffer } from "node:buffer";,
|
||||
or run again with --unstable-node-globals flag to add this global.
|
||||
|
|
|
@ -4,4 +4,5 @@ clearImmediate;
|
|||
at [WILDCARD]clear_immediate.js:1:1
|
||||
|
||||
info: clearImmediate is not available in the global scope in Deno.
|
||||
hint: Import it explicitly with import { clearImmediate } from "node:timers";.
|
||||
hint: Import it explicitly with import { clearImmediate } from "node:timers";,
|
||||
or run again with --unstable-node-globals flag to add this global.
|
||||
|
|
|
@ -4,4 +4,5 @@ global;
|
|||
at [WILDCARD]global.js:1:1
|
||||
|
||||
info: global is not available in the global scope in Deno.
|
||||
hint: Use globalThis instead, or assign globalThis.global = globalThis.
|
||||
hint: Use globalThis instead, or assign globalThis.global = globalThis,
|
||||
or run again with --unstable-node-globals flag to add this global.
|
||||
|
|
|
@ -4,4 +4,5 @@ setImmediate;
|
|||
at [WILDCARD]set_immediate.js:1:1
|
||||
|
||||
info: setImmediate is not available in the global scope in Deno.
|
||||
hint: Import it explicitly with import { setImmediate } from "node:timers";.
|
||||
hint: Import it explicitly with import { setImmediate } from "node:timers";,
|
||||
or run again with --unstable-node-globals flag to add this global.
|
||||
|
|
|
@ -20,6 +20,11 @@
|
|||
"exitCode": 1,
|
||||
"output": "kv.out"
|
||||
},
|
||||
"node_globals": {
|
||||
"args": "run --unstable-node-globals node_globals.ts",
|
||||
"exitCode": 0,
|
||||
"output": "node_globals.out"
|
||||
},
|
||||
"temporal": {
|
||||
"args": "run temporal.ts",
|
||||
"exitCode": 1,
|
||||
|
|
4
tests/specs/run/unstable/node_globals.out
Normal file
4
tests/specs/run/unstable/node_globals.out
Normal file
|
@ -0,0 +1,4 @@
|
|||
global: true
|
||||
Buffer: true
|
||||
setImmediate: true
|
||||
clearImmediate: true
|
7
tests/specs/run/unstable/node_globals.ts
Normal file
7
tests/specs/run/unstable/node_globals.ts
Normal file
|
@ -0,0 +1,7 @@
|
|||
import * as nodeBuffer from "node:buffer";
|
||||
import * as nodeTimers from "node:timers";
|
||||
|
||||
console.log(`global: ${globalThis === global}`);
|
||||
console.log(`Buffer: ${Buffer === nodeBuffer.default}`);
|
||||
console.log(`setImmediate: ${setImmediate === nodeTimers.setImmediate}`);
|
||||
console.log(`clearImmediate: ${clearImmediate === nodeTimers.clearImmediate}`);
|
Loading…
Reference in a new issue