Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] feat: Add ModuleVisibility enum #507

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion core/modules/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ use super::module_map_data::ModuleMapData;
use super::module_map_data::ModuleMapSnapshottedData;
use super::CustomModuleEvaluationKind;
use super::LazyEsmModuleLoader;
use super::ModuleVisibility;
use super::RequestedModuleType;

type PrepareLoadFuture =
Expand Down Expand Up @@ -302,6 +303,8 @@ impl ModuleMap {
self.new_module_from_js_source(
scope,
main,
// FIXME(bartlomieju):
ModuleVisibility::User,
ModuleType::JavaScript,
module_url_found,
code,
Expand Down Expand Up @@ -347,6 +350,8 @@ impl ModuleMap {
self.new_synthetic_module(
scope,
module_url_found,
// FIXME(bartlomieju):
ModuleVisibility::User,
ModuleType::Other(module_type.clone()),
exports,
)?
Expand All @@ -365,12 +370,16 @@ impl ModuleMap {
let _synthetic_mod_id = self.new_synthetic_module(
scope,
url1,
// FIXME(bartlomieju):
ModuleVisibility::User,
synthetic_module_type,
exports,
)?;
self.new_module_from_js_source(
scope,
main,
// FIXME(bartlomieju):
ModuleVisibility::User,
ModuleType::Other(module_type.clone()),
url2,
computed_src,
Expand All @@ -389,6 +398,7 @@ impl ModuleMap {
&self,
scope: &mut v8::HandleScope,
name: ModuleName,
visibility: ModuleVisibility,
module_type: ModuleType,
exports: Vec<(FastString, v8::Local<v8::Value>)>,
) -> Result<ModuleId, ModuleError> {
Expand Down Expand Up @@ -431,6 +441,7 @@ impl ModuleMap {

let id = self.data.borrow_mut().create_module_info(
name,
visibility,
module_type,
handle,
false,
Expand All @@ -453,6 +464,8 @@ impl ModuleMap {
self.new_module_from_js_source(
scope,
main,
// FIXME(bartlomieju):
ModuleVisibility::User,
ModuleType::JavaScript,
name,
source,
Expand All @@ -472,10 +485,12 @@ impl ModuleMap {
/// and attached to associated [`ModuleInfo`].
///
/// Returns an ID of newly created module.
#[allow(clippy::too_many_arguments)]
pub(crate) fn new_module_from_js_source(
&self,
scope: &mut v8::HandleScope,
main: bool,
visibility: ModuleVisibility,
module_type: ModuleType,
name: ModuleName,
source: ModuleCodeString,
Expand Down Expand Up @@ -575,6 +590,7 @@ impl ModuleMap {
let handle = v8::Global::<v8::Module>::new(tc_scope, module);
let id = self.data.borrow_mut().create_module_info(
name,
visibility,
module_type,
handle,
main,
Expand Down Expand Up @@ -608,7 +624,13 @@ impl ModuleMap {
}
};
let exports = vec![(FastString::StaticAscii("default"), parsed_json)];
self.new_synthetic_module(tc_scope, name, ModuleType::Json, exports)
self.new_synthetic_module(
tc_scope,
name,
ModuleVisibility::User,
ModuleType::Json,
exports,
)
}

pub(crate) fn instantiate_module(
Expand Down
19 changes: 19 additions & 0 deletions core/modules/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -479,10 +479,29 @@ pub(crate) struct ModuleRequest {
pub requested_module_type: RequestedModuleType,
}

#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ModuleVisibility {
/// Module provided by `deno_core` crate.
///
/// Visibile to `Extension` modules.
Internal,

/// Module provided by an extension.
///
/// Visibile to native code and other `Extension` modules.
Extension,

/// Module executed by user.
///
/// Visibile to native code. Can't access `Internal` or `Extension` modules.
User,
}

#[derive(Debug, PartialEq)]
pub(crate) struct ModuleInfo {
#[allow(unused)]
pub id: ModuleId,
pub visibility: ModuleVisibility,
pub main: bool,
pub name: ModuleName,
pub requests: Vec<ModuleRequest>,
Expand Down
13 changes: 12 additions & 1 deletion core/modules/module_map_data.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
use super::ModuleVisibility;
use super::RequestedModuleType;
use crate::fast_string::FastString;
use crate::modules::ModuleId;
Expand Down Expand Up @@ -159,6 +160,7 @@ impl ModuleMapData {
pub fn create_module_info(
&mut self,
name: FastString,
visibility: ModuleVisibility,
module_type: ModuleType,
handle: v8::Global<v8::Module>,
main: bool,
Expand All @@ -179,6 +181,7 @@ impl ModuleMapData {
data.info.push(ModuleInfo {
id,
main,
visibility,
name: name2,
requests,
module_type,
Expand Down Expand Up @@ -413,11 +416,18 @@ impl ModuleMapData {
.unwrap()
.value() as ModuleId;

let name = module_info_arr
let name: FastString = module_info_arr
.get_index(scope, 1)
.unwrap()
.to_rust_string_lossy(scope)
.into();
// TODO(bartlomieju): this is brittle - we should store visibility in the
// snapshot.
let visibility = if name.as_str().starts_with("ext:core/") {
ModuleVisibility::Internal
} else {
ModuleVisibility::Extension
};

let requests_arr: v8::Local<v8::Array> = module_info_arr
.get_index(scope, 2)
Expand Down Expand Up @@ -449,6 +459,7 @@ impl ModuleMapData {
let module_info = ModuleInfo {
id,
main,
visibility,
name,
requests,
module_type,
Expand Down
3 changes: 3 additions & 0 deletions core/modules/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ use crate::modules::ModuleError;
use crate::modules::ModuleInfo;
use crate::modules::ModuleRequest;
use crate::modules::ModuleSourceCode;
use crate::modules::ModuleVisibility;
use crate::modules::RequestedModuleType;
use crate::resolve_import;
use crate::resolve_url;
Expand Down Expand Up @@ -908,6 +909,7 @@ export const foo = bytes;
info,
&ModuleInfo {
id: mod_id,
visibility: ModuleVisibility::User,
main: true,
name: ascii_str!("file:///b.png"),
requests: vec![ModuleRequest {
Expand All @@ -924,6 +926,7 @@ export const foo = bytes;
info,
&ModuleInfo {
id: mod_id - 1,
visibility: ModuleVisibility::User,
main: false,
name: ascii_str!("file:///b.png"),
requests: vec![],
Expand Down
2 changes: 2 additions & 0 deletions core/runtime/jsruntime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ use crate::modules::ModuleId;
use crate::modules::ModuleLoader;
use crate::modules::ModuleMap;
use crate::modules::ModuleMapSnapshottedData;
use crate::modules::ModuleVisibility;
use crate::modules::RequestedModuleType;
use crate::modules::ValidateImportAttributesCb;
use crate::ops::*;
Expand Down Expand Up @@ -1068,6 +1069,7 @@ impl JsRuntime {
.new_synthetic_module(
scope,
FastString::StaticAscii("ext:core/ops"),
ModuleVisibility::Internal,
crate::ModuleType::JavaScript,
synthetic_module_exports,
)
Expand Down
3 changes: 3 additions & 0 deletions core/runtime/tests/snapshot.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
use crate::extensions::Op;
use crate::modules::ModuleInfo;
use crate::modules::ModuleVisibility;
use crate::modules::RequestedModuleType;
use crate::runtime::NO_OF_BUILTIN_MODULES;
use crate::*;
Expand Down Expand Up @@ -155,6 +156,7 @@ fn es_snapshot() {
ModuleInfo {
id,
main,
visibility: ModuleVisibility::User,
name: specifier.into(),
requests: vec![crate::modules::ModuleRequest {
specifier: format!("file:///{prev}.js"),
Expand Down Expand Up @@ -196,6 +198,7 @@ fn es_snapshot() {
modules.push(ModuleInfo {
id,
main: false,
visibility: ModuleVisibility::User,
name: specifier.into(),
requests: vec![],
module_type: RequestedModuleType::None,
Expand Down
Loading