1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-28 16:20:57 -05:00

refactor: move definition of Deno.build from "runtime" to "core" (#18036)

We use information about build in several extension crates like
"ext/node" or "runtime/". In an effort to move "fs" APIs to a separate 
crate it is a prerequisite to have this information available outside 
of the "runtime/" crate.

This commit moves definition of "build" object to "Deno.core" that is 
later forwarded to "Deno.build".
This commit is contained in:
Bartek Iwańczuk 2023-03-05 18:18:13 -04:00 committed by Yoshiya Hinosawa
parent 38ed6d55f7
commit 4fbc51ca46
12 changed files with 56 additions and 62 deletions

View file

@ -1 +1 @@
await import("internal:runtime/01_build.js");
await import("internal:runtime/01_errors.js");

View file

@ -1,4 +1,4 @@
error: Uncaught TypeError: Cannot load internal module from external code
await import("internal:runtime/01_build.js");
await import("internal:runtime/01_errors.js");
^
at [WILDCARD]/internal_dynamic_import.ts:1:1

View file

@ -1 +1 @@
import "internal:runtime/01_build.js";
import "internal:runtime/01_errors.js";

View file

@ -1,4 +1,4 @@
error: Unsupported scheme "internal" for module "internal:runtime/01_build.js". Supported schemes: [
error: Unsupported scheme "internal" for module "internal:runtime/01_errors.js". Supported schemes: [
"data",
"blob",
"file",

View file

@ -3,33 +3,57 @@
((window) => {
const {
Array,
ArrayPrototypeFill,
ArrayPrototypeMap,
ArrayPrototypePush,
Error,
ErrorCaptureStackTrace,
Map,
MapPrototypeDelete,
MapPrototypeGet,
MapPrototypeHas,
MapPrototypeSet,
ObjectAssign,
ObjectFreeze,
ObjectFromEntries,
Promise,
PromisePrototypeThen,
RangeError,
ReferenceError,
SafePromisePrototypeFinally,
setQueueMicrotask,
StringPrototypeSlice,
StringPrototypeSplit,
SymbolFor,
SyntaxError,
TypeError,
URIError,
Array,
ArrayPrototypeFill,
ArrayPrototypePush,
ArrayPrototypeMap,
ErrorCaptureStackTrace,
Promise,
ObjectAssign,
ObjectFromEntries,
Map,
MapPrototypeGet,
MapPrototypeHas,
MapPrototypeDelete,
MapPrototypeSet,
PromisePrototypeThen,
SafePromisePrototypeFinally,
StringPrototypeSlice,
SymbolFor,
setQueueMicrotask,
} = window.__bootstrap.primordials;
const { ops } = window.Deno.core;
const build = {
target: "unknown",
arch: "unknown",
os: "unknown",
vendor: "unknown",
env: undefined,
};
function setBuildInfo(target) {
const { 0: arch, 1: vendor, 2: os, 3: env } = StringPrototypeSplit(
target,
"-",
4,
);
build.target = target;
build.arch = arch;
build.vendor = vendor;
build.os = os;
build.env = env;
ObjectFreeze(build);
}
const errorMap = {};
// Builtin v8 / JS errors
registerErrorClass("Error", Error);
@ -408,6 +432,8 @@
eventLoopHasMoreWork: () => ops.op_event_loop_has_more_work(),
setPromiseRejectCallback: (fn) => ops.op_set_promise_reject_callback(fn),
byteLength: (str) => ops.op_str_byte_length(str),
build,
setBuildInfo,
});
ObjectAssign(globalThis.__bootstrap, { core });

View file

@ -4,16 +4,16 @@
// The following are all the process APIs that don't depend on the stream module
// They have to be split this way to prevent a circular dependency
import { build } from "internal:runtime/01_build.js";
const core = globalThis.Deno.core;
import { nextTick as _nextTick } from "internal:deno_node/_next_tick.ts";
import { _exiting } from "internal:deno_node/_process/exiting.ts";
import * as fs from "internal:runtime/30_fs.js";
/** Returns the operating system CPU architecture for which the Deno binary was compiled */
export function arch(): string {
if (build.arch == "x86_64") {
if (core.build.arch == "x86_64") {
return "x64";
} else if (build.arch == "aarch64") {
} else if (core.build.arch == "aarch64") {
return "arm64";
} else {
throw Error("unreachable");

View file

@ -194,7 +194,6 @@ mod startup_snapshot {
])
.esm(include_js_files!(
dir "js",
"01_build.js",
"01_errors.js",
"01_version.ts",
"06_util.js",

View file

@ -1,28 +0,0 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
const primordials = globalThis.__bootstrap.primordials;
const { ObjectFreeze, StringPrototypeSplit } = primordials;
const build = {
target: "unknown",
arch: "unknown",
os: "unknown",
vendor: "unknown",
env: undefined,
};
function setBuildInfo(target) {
const { 0: arch, 1: vendor, 2: os, 3: env } = StringPrototypeSplit(
target,
"-",
4,
);
build.target = target;
build.arch = arch;
build.vendor = vendor;
build.os = os;
build.env = env;
ObjectFreeze(build);
}
export { build, setBuildInfo };

View file

@ -1,5 +1,6 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
const core = globalThis.Deno.core;
const internals = globalThis.__bootstrap.internals;
const primordials = globalThis.__bootstrap.primordials;
const {
@ -11,7 +12,6 @@ const {
StringPrototypeReplace,
TypeError,
} = primordials;
import { build } from "internal:runtime/01_build.js";
import { URLPrototype } from "internal:deno_url/00_url.js";
let logDebug = false;
let logSource = "JS";
@ -94,7 +94,7 @@ function pathFromURL(pathOrUrl) {
throw new TypeError("Must be a file URL.");
}
return build.os == "windows"
return core.build.os == "windows"
? pathFromURLWin32(pathOrUrl)
: pathFromURLPosix(pathOrUrl);
}

View file

@ -25,7 +25,6 @@ import {
writableStreamForRid,
} from "internal:deno_web/06_streams.js";
import { pathFromURL } from "internal:runtime/06_util.js";
import { build } from "internal:runtime/01_build.js";
function chmodSync(path, mode) {
ops.op_chmod_sync(pathFromURL(path), mode);
@ -272,7 +271,7 @@ const { 0: statStruct, 1: statBuf } = createByteStruct({
});
function parseFileInfo(response) {
const unix = build.os === "darwin" || build.os === "linux";
const unix = core.build.os === "darwin" || core.build.os === "linux";
return {
isFile: response.isFile,
isDirectory: response.isDirectory,

View file

@ -10,7 +10,6 @@ import * as net from "internal:deno_net/01_net.js";
import * as tls from "internal:deno_net/02_tls.js";
import * as http from "internal:deno_http/01_http.js";
import * as flash from "internal:deno_flash/01_http.js";
import * as build from "internal:runtime/01_build.js";
import * as errors from "internal:runtime/01_errors.js";
import * as version from "internal:runtime/01_version.ts";
import * as permissions from "internal:runtime/10_permissions.js";
@ -65,7 +64,7 @@ const denoNs = {
renameSync: fs.renameSync,
rename: fs.rename,
version: version.version,
build: build.build,
build: core.build,
statSync: fs.statSync,
lstatSync: fs.lstatSync,
stat: fs.stat,

View file

@ -42,7 +42,6 @@ const {
import * as util from "internal:runtime/06_util.js";
import * as event from "internal:deno_web/02_event.js";
import * as location from "internal:deno_web/12_location.js";
import * as build from "internal:runtime/01_build.js";
import * as version from "internal:runtime/01_version.ts";
import * as os from "internal:runtime/30_os.js";
import * as timers from "internal:deno_web/02_timers.js";
@ -305,7 +304,7 @@ function runtimeStart(runtimeOptions, source) {
runtimeOptions.v8Version,
runtimeOptions.tsVersion,
);
build.setBuildInfo(runtimeOptions.target);
core.setBuildInfo(runtimeOptions.target);
util.setLogDebug(runtimeOptions.debugFlag, source);
colors.setNoColor(runtimeOptions.noColor || !runtimeOptions.isTty);
// deno-lint-ignore prefer-primordials