Skip to content

Commit d23f363

Browse files
build: add ts support in core modules
1 parent d080801 commit d23f363

File tree

8 files changed

+670
-33
lines changed

8 files changed

+670
-33
lines changed

configure.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1765,7 +1765,8 @@ def gcc_version_ge(version_checked):
17651765
return True
17661766

17671767
def configure_node_lib_files(o):
1768-
o['variables']['node_library_files'] = SearchFiles('lib', 'js')
1768+
o['variables']['node_library_files'] = SearchFiles('lib', 'js') + \
1769+
SearchFiles('lib', 'ts')
17691770

17701771
def configure_node_cctest_sources(o):
17711772
o['variables']['node_cctest_sources'] = [ 'src/node_snapshot_stub.cc' ] + \

node.gyp

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,11 +462,59 @@
462462
],
463463
'node_mksnapshot_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)node_mksnapshot<(EXECUTABLE_SUFFIX)',
464464
'node_js2c_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)node_js2c<(EXECUTABLE_SUFFIX)',
465+
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.host/mksnapshot/deps/v8/src/snapshot/snapshot-empty.o',
466+
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/embedded-empty.o',
465467
'conditions': [
466468
['GENERATOR == "ninja"', {
467-
'node_text_start_object_path': 'src/large_pages/node_text_start.node_text_start.o'
469+
'node_text_start_object_path': 'src/large_pages/node_text_start.node_text_start.o',
470+
'conditions': [
471+
['want_separate_host_toolset', {
472+
'conditions': [
473+
['OS=="win"', {
474+
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.host/deps/v8/src/snapshot/mksnapshot.snapshot-empty.obj',
475+
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.host/deps/v8/src/snapshot/embedded/mksnapshot.embedded-empty.obj',
476+
}, {
477+
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.host/deps/v8/src/snapshot/mksnapshot.snapshot-empty.o',
478+
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.host/deps/v8/src/snapshot/embedded/mksnapshot.embedded-empty.o',
479+
}],
480+
],
481+
}, {
482+
'conditions': [
483+
['OS=="win"', {
484+
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj/deps/v8/src/snapshot/mksnapshot.snapshot-empty.obj',
485+
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj/deps/v8/src/snapshot/embedded/mksnapshot.embedded-empty.obj',
486+
}, {
487+
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj/deps/v8/src/snapshot/mksnapshot.snapshot-empty.o',
488+
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj/deps/v8/src/snapshot/embedded/mksnapshot.embedded-empty.o',
489+
}],
490+
],
491+
}],
492+
],
468493
}, {
469-
'node_text_start_object_path': 'node_text_start/src/large_pages/node_text_start.o'
494+
'node_text_start_object_path': 'node_text_start/src/large_pages/node_text_start.o',
495+
'conditions': [
496+
['GENERATOR == "msvs"', {
497+
'conditions': [
498+
['want_separate_host_toolset', {
499+
'node_js2c_snapshot_empty_object_path': '$(OutDir)obj\\mksnapshot_host\\deps\\v8\\src\\snapshot\\snapshot-empty.obj',
500+
'node_js2c_embedded_empty_object_path': '$(OutDir)obj\\mksnapshot_host\\deps\\v8\\src\\snapshot\\embedded\\embedded-empty.obj',
501+
}, {
502+
'node_js2c_snapshot_empty_object_path': '$(OutDir)obj\\mksnapshot\\deps\\v8\\src\\snapshot\\snapshot-empty.obj',
503+
'node_js2c_embedded_empty_object_path': '$(OutDir)obj\\mksnapshot\\deps\\v8\\src\\snapshot\\embedded\\embedded-empty.obj',
504+
}],
505+
],
506+
}, {
507+
'conditions': [
508+
['want_separate_host_toolset', {
509+
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.host/mksnapshot/deps/v8/src/snapshot/snapshot-empty.o',
510+
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/embedded-empty.o',
511+
}, {
512+
'node_js2c_snapshot_empty_object_path': '<(PRODUCT_DIR)/obj.target/mksnapshot/deps/v8/src/snapshot/snapshot-empty.o',
513+
'node_js2c_embedded_empty_object_path': '<(PRODUCT_DIR)/obj.target/mksnapshot/deps/v8/src/snapshot/embedded/embedded-empty.o',
514+
}],
515+
],
516+
}],
517+
],
470518
}],
471519
[ 'node_shared=="true"', {
472520
'node_target_type%': 'shared_library',
@@ -1557,19 +1605,54 @@
15571605
'target_name': 'node_js2c',
15581606
'type': 'executable',
15591607
'toolsets': ['host'],
1608+
'dependencies': [
1609+
'tools/v8_gypfiles/v8.gyp:v8_base_without_compiler',
1610+
'tools/v8_gypfiles/v8.gyp:v8_compiler_for_mksnapshot',
1611+
'tools/v8_gypfiles/v8.gyp:v8_init',
1612+
'tools/v8_gypfiles/v8.gyp:v8_libbase',
1613+
'tools/v8_gypfiles/v8.gyp:v8_libplatform',
1614+
'tools/v8_gypfiles/v8.gyp:v8_maybe_icu',
1615+
'tools/v8_gypfiles/v8.gyp:v8_pch',
1616+
'tools/v8_gypfiles/v8.gyp:fp16',
1617+
'tools/v8_gypfiles/abseil.gyp:abseil',
1618+
],
15601619
'include_dirs': [
1620+
'deps/v8',
1621+
'deps/v8/include',
15611622
'tools',
15621623
'src',
15631624
],
15641625
'sources': [
15651626
'tools/js2c.cc',
1627+
'tools/typescript_transpiler.cc',
1628+
'tools/typescript_transpiler.h',
15661629
'tools/executable_wrapper.h',
15671630
'src/embedded_data.h',
15681631
'src/embedded_data.cc',
15691632
'src/builtin_info.h',
15701633
'src/builtin_info.cc',
15711634
],
15721635
'conditions': [
1636+
[ 'want_separate_host_toolset', {
1637+
'dependencies': [ 'tools/v8_gypfiles/v8.gyp:mksnapshot#host' ],
1638+
}, {
1639+
'dependencies': [ 'tools/v8_gypfiles/v8.gyp:mksnapshot' ],
1640+
}],
1641+
[ 'GENERATOR=="msvs"', {
1642+
'msvs_settings': {
1643+
'VCLinkerTool': {
1644+
'AdditionalDependencies': [
1645+
'<(node_js2c_snapshot_empty_object_path)',
1646+
'<(node_js2c_embedded_empty_object_path)',
1647+
],
1648+
},
1649+
},
1650+
}, {
1651+
'libraries': [
1652+
'<(node_js2c_snapshot_empty_object_path)',
1653+
'<(node_js2c_embedded_empty_object_path)',
1654+
],
1655+
}],
15731656
[ 'OS=="mac"', {
15741657
'libraries': [ '-framework CoreFoundation -framework Security' ],
15751658
}],

node.gypi

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,15 @@
9595
}],
9696
[ 'node_use_bundled_v8=="true"', {
9797
'dependencies': [
98-
'tools/v8_gypfiles/v8.gyp:v8_snapshot',
9998
'tools/v8_gypfiles/v8.gyp:v8_libplatform',
10099
],
100+
'conditions': [
101+
[ '_target_name!="node_js2c"', {
102+
'dependencies': [
103+
'tools/v8_gypfiles/v8.gyp:v8_snapshot',
104+
],
105+
}],
106+
],
101107
}],
102108
[ 'node_use_v8_platform=="true"', {
103109
'defines': [

src/node_builtins.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,12 @@ BuiltinLoader::BuiltinCategories BuiltinLoader::GetBuiltinCategories() const {
178178
}
179179

180180
#ifdef NODE_BUILTIN_MODULES_PATH
181-
static std::string OnDiskFileName(const char* id) {
181+
std::string BuiltinLoader::OnDiskFileName(const char* id) const {
182182
std::string filename = NODE_BUILTIN_MODULES_PATH;
183183
filename += "/";
184184

185+
// Save the original id for source map lookup before any pointer arithmetic.
186+
const char* original_id = id;
185187
if (strncmp(id, "internal/deps", strlen("internal/deps")) == 0) {
186188
id += strlen("internal/");
187189
} else {
@@ -192,7 +194,15 @@ static std::string OnDiskFileName(const char* id) {
192194
// V8 tools scripts are .mjs files.
193195
filename += ".mjs";
194196
} else {
195-
filename += ".js";
197+
// Use the pre-built source map to determine the file extension.
198+
// This avoids a filesystem probe on every module load in dev mode.
199+
auto source = source_.read();
200+
auto it = source->find(original_id);
201+
if (it != source->end() && it->second.is_typescript) {
202+
filename += ".ts";
203+
} else {
204+
filename += ".js";
205+
}
196206
}
197207

198208
return filename;

src/node_builtins.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ struct BuiltinSource {
7373
std::string id;
7474
UnionBytes source;
7575
BuiltinSourceType type;
76+
bool is_typescript = false;
7677
};
7778

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

207+
#ifdef NODE_BUILTIN_MODULES_PATH
208+
// Returns the on-disk path for a builtin module id.
209+
// Uses the pre-built source map to determine the file extension rather
210+
// than probing the filesystem.
211+
std::string OnDiskFileName(const char* id) const;
212+
#endif
213+
206214
ThreadsafeCopyOnWrite<BuiltinSourceMap> source_;
207215

208216
const UnionBytes config_;

0 commit comments

Comments
 (0)