Skip to content
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
3 changes: 2 additions & 1 deletion configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -1765,7 +1765,8 @@ def gcc_version_ge(version_checked):
return True

def configure_node_lib_files(o):
o['variables']['node_library_files'] = SearchFiles('lib', 'js')
o['variables']['node_library_files'] = SearchFiles('lib', 'js') + \
SearchFiles('lib', 'ts')

def configure_node_cctest_sources(o):
o['variables']['node_cctest_sources'] = [ 'src/node_snapshot_stub.cc' ] + \
Expand Down
File renamed without changes.
87 changes: 85 additions & 2 deletions node.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -462,11 +462,59 @@
],
'node_mksnapshot_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)node_mksnapshot<(EXECUTABLE_SUFFIX)',
'node_js2c_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)node_js2c<(EXECUTABLE_SUFFIX)',
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.host/mksnapshot/deps/v8/src/snapshot/snapshot-empty.o',
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/embedded-empty.o',
'conditions': [
['GENERATOR == "ninja"', {
'node_text_start_object_path': 'src/large_pages/node_text_start.node_text_start.o'
'node_text_start_object_path': 'src/large_pages/node_text_start.node_text_start.o',
'conditions': [
['want_separate_host_toolset', {
'conditions': [
['OS=="win"', {
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.host/deps/v8/src/snapshot/mksnapshot.snapshot-empty.obj',
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.host/deps/v8/src/snapshot/embedded/mksnapshot.embedded-empty.obj',
}, {
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.host/deps/v8/src/snapshot/mksnapshot.snapshot-empty.o',
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.host/deps/v8/src/snapshot/embedded/mksnapshot.embedded-empty.o',
}],
],
}, {
'conditions': [
['OS=="win"', {
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj/deps/v8/src/snapshot/mksnapshot.snapshot-empty.obj',
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj/deps/v8/src/snapshot/embedded/mksnapshot.embedded-empty.obj',
}, {
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj/deps/v8/src/snapshot/mksnapshot.snapshot-empty.o',
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj/deps/v8/src/snapshot/embedded/mksnapshot.embedded-empty.o',
}],
],
}],
],
}, {
'node_text_start_object_path': 'node_text_start/src/large_pages/node_text_start.o'
'node_text_start_object_path': 'node_text_start/src/large_pages/node_text_start.o',
'conditions': [
['GENERATOR == "msvs"', {
'conditions': [
['want_separate_host_toolset', {
'node_js2c_snapshot_empty_object_path': '$(OutDir)obj\\mksnapshot_host\\deps\\v8\\src\\snapshot\\snapshot-empty.obj',
'node_js2c_embedded_empty_object_path': '$(OutDir)obj\\mksnapshot_host\\deps\\v8\\src\\snapshot\\embedded\\embedded-empty.obj',
}, {
'node_js2c_snapshot_empty_object_path': '$(OutDir)obj\\mksnapshot\\deps\\v8\\src\\snapshot\\snapshot-empty.obj',
'node_js2c_embedded_empty_object_path': '$(OutDir)obj\\mksnapshot\\deps\\v8\\src\\snapshot\\embedded\\embedded-empty.obj',
}],
],
}, {
'conditions': [
['want_separate_host_toolset', {
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.host/mksnapshot/deps/v8/src/snapshot/snapshot-empty.o',
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/embedded-empty.o',
}, {
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.target/mksnapshot/deps/v8/src/snapshot/snapshot-empty.o',
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.target/mksnapshot/deps/v8/src/snapshot/embedded/embedded-empty.o',
}],
],
}],
],
}],
[ 'node_shared=="true"', {
'node_target_type%': 'shared_library',
Expand Down Expand Up @@ -1557,19 +1605,54 @@
'target_name': 'node_js2c',
'type': 'executable',
'toolsets': ['host'],
'dependencies': [
'tools/v8_gypfiles/v8.gyp:v8_base_without_compiler',
'tools/v8_gypfiles/v8.gyp:v8_compiler_for_mksnapshot',
'tools/v8_gypfiles/v8.gyp:v8_init',
'tools/v8_gypfiles/v8.gyp:v8_libbase',
'tools/v8_gypfiles/v8.gyp:v8_libplatform',
'tools/v8_gypfiles/v8.gyp:v8_maybe_icu',
'tools/v8_gypfiles/v8.gyp:v8_pch',
'tools/v8_gypfiles/v8.gyp:fp16',
'tools/v8_gypfiles/abseil.gyp:abseil',
],
'include_dirs': [
'deps/v8',
'deps/v8/include',
'tools',
'src',
],
'sources': [
'tools/js2c.cc',
'tools/typescript_transpiler.cc',
'tools/typescript_transpiler.h',
'tools/executable_wrapper.h',
'src/embedded_data.h',
'src/embedded_data.cc',
'src/builtin_info.h',
'src/builtin_info.cc',
],
'conditions': [
[ 'want_separate_host_toolset', {
'dependencies': [ 'tools/v8_gypfiles/v8.gyp:mksnapshot#host' ],
}, {
'dependencies': [ 'tools/v8_gypfiles/v8.gyp:mksnapshot' ],
}],
[ 'GENERATOR=="msvs"', {
'msvs_settings': {
'VCLinkerTool': {
'AdditionalDependencies': [
'<(node_js2c_snapshot_empty_object_path)',
'<(node_js2c_embedded_empty_object_path)',
],
},
},
}, {
'libraries': [
'<(node_js2c_snapshot_empty_object_path)',
'<(node_js2c_embedded_empty_object_path)',
],
}],
[ 'OS=="mac"', {
'libraries': [ '-framework CoreFoundation -framework Security' ],
}],
Expand Down
8 changes: 7 additions & 1 deletion node.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,15 @@
}],
[ 'node_use_bundled_v8=="true"', {
'dependencies': [
'tools/v8_gypfiles/v8.gyp:v8_snapshot',
'tools/v8_gypfiles/v8.gyp:v8_libplatform',
],
'conditions': [
[ '_target_name!="node_js2c"', {
'dependencies': [
'tools/v8_gypfiles/v8.gyp:v8_snapshot',
],
}],
],
}],
[ 'node_use_v8_platform=="true"', {
'defines': [
Expand Down
14 changes: 12 additions & 2 deletions src/node_builtins.cc
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,12 @@ BuiltinLoader::BuiltinCategories BuiltinLoader::GetBuiltinCategories() const {
}

#ifdef NODE_BUILTIN_MODULES_PATH
static std::string OnDiskFileName(const char* id) {
std::string BuiltinLoader::OnDiskFileName(const char* id) const {
std::string filename = NODE_BUILTIN_MODULES_PATH;
filename += "/";

// Save the original id for source map lookup before any pointer arithmetic.
const char* original_id = id;
if (strncmp(id, "internal/deps", strlen("internal/deps")) == 0) {
id += strlen("internal/");
} else {
Expand All @@ -192,7 +194,15 @@ static std::string OnDiskFileName(const char* id) {
// V8 tools scripts are .mjs files.
filename += ".mjs";
} else {
filename += ".js";
// Use the pre-built source map to determine the file extension.
// This avoids a filesystem probe on every module load in dev mode.
auto source = source_.read();
auto it = source->find(original_id);
if (it != source->end() && it->second.is_typescript) {
filename += ".ts";
} else {
filename += ".js";
}
}

return filename;
Expand Down
8 changes: 8 additions & 0 deletions src/node_builtins.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ struct BuiltinSource {
std::string id;
UnionBytes source;
BuiltinSourceType type;
bool is_typescript = false;
};

using BuiltinSourceMap = std::map<std::string, BuiltinSource>;
Expand Down Expand Up @@ -203,6 +204,13 @@ class NODE_EXTERN_PRIVATE BuiltinLoader {
const BuiltinSource* AddExternalizedBuiltin(const char* id,
const char* filename);

#ifdef NODE_BUILTIN_MODULES_PATH
// Returns the on-disk path for a builtin module id.
// Uses the pre-built source map to determine the file extension rather
// than probing the filesystem.
std::string OnDiskFileName(const char* id) const;
#endif

ThreadsafeCopyOnWrite<BuiltinSourceMap> source_;

const UnionBytes config_;
Expand Down
Loading
Loading