Skip to content

Commit ed362bc

Browse files
committed
get typescript trace generation working
1 parent 0d838fa commit ed362bc

File tree

6 files changed

+313
-20
lines changed

6 files changed

+313
-20
lines changed

cli/tsc/00_typescript.js

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,25 @@ See the Apache Version 2.0 License for specific language governing permissions
1313
and limitations under the License.
1414
***************************************************************************** */
1515

16+
import * as fs from "node:fs";
17+
import * as path from "node:path";
18+
import * as os from "node:os";
19+
import * as perf_hooks from "node:perf_hooks";
20+
var __filename = "sys.js";
21+
var __dirname = "/tmp";
22+
var require = (m) => {
23+
if (m === "fs") {
24+
return fs;
25+
} else if (m === "path") {
26+
return path;
27+
} else if (m === "os") {
28+
return os;
29+
} else if (m === "perf_hooks") {
30+
return perf_hooks;
31+
}
32+
throw new Error("not handled " + m);
33+
};
34+
1635
var ts = {}; ((module) => {
1736
"use strict";
1837
var __defProp = Object.defineProperty;
@@ -393,6 +412,8 @@ __export(typescript_exports, {
393412
createExpressionForObjectLiteralElementLike: () => createExpressionForObjectLiteralElementLike,
394413
createExpressionForPropertyName: () => createExpressionForPropertyName,
395414
createExpressionFromEntityName: () => createExpressionFromEntityName,
415+
enableStatisticsAndTracing: () => enableStatisticsAndTracing,
416+
reportStatistics: () => reportStatistics,
396417
createExternalHelpersImportDeclarationIfNeeded: () => createExternalHelpersImportDeclarationIfNeeded,
397418
createFileDiagnostic: () => createFileDiagnostic,
398419
createFileDiagnosticFromMessageChain: () => createFileDiagnosticFromMessageChain,
@@ -137651,7 +137672,9 @@ function canReportDiagnostics(system, compilerOptions) {
137651137672
return system === sys && (compilerOptions.diagnostics || compilerOptions.extendedDiagnostics);
137652137673
}
137653137674
function canTrace(system, compilerOptions) {
137654-
return system === sys && compilerOptions.generateTrace;
137675+
const ret = system === sys && compilerOptions.generateTrace;
137676+
console.log("canTrace", ret);
137677+
return ret;
137655137678
}
137656137679
function enableStatisticsAndTracing(system, compilerOptions, isBuildMode) {
137657137680
if (canReportDiagnostics(system, compilerOptions)) {
@@ -185814,3 +185837,7 @@ if (typeof console !== "undefined") {
185814185837
});
185815185838
})({ get exports() { return ts; }, set exports(v) { ts = v; if (typeof module !== "undefined" && module.exports) { module.exports = v; } } })
185816185839
//# sourceMappingURL=typescript.js.map
185840+
export {
185841+
ts
185842+
};
185843+
globalThis.ts = ts;

cli/tsc/97_ts_host.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
/** @type {DenoCore} */
88
const core = globalThis.Deno.core;
99
const ops = core.ops;
10+
import { ts } from "ext:deno_cli_tsc/00_typescript.js";
1011

1112
let logDebug = false;
1213
let logSource = "JS";

cli/tsc/99_main_compiler.js

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,17 +100,28 @@ function exec({ config, debug: debugFlag, rootNames, localOnly }) {
100100
performanceStart();
101101

102102
config = normalizeConfig(config);
103+
104+
const tracePath = Deno.cwd();
105+
106+
Object.assign(config, { generateTrace: tracePath });
107+
if (config.compilerOptions) {
108+
Object.assign(config.compilerOptions, { generateTrace: tracePath });
109+
} else {
110+
// config.compilerOptions = { generateTrace: tracePath };
111+
}
112+
103113

104-
debug(">>> exec start", { rootNames });
105-
debug(config);
106-
114+
console.log(">>> exec start", { rootNames });
115+
console.log(config);
116+
107117
const { options, errors: configFileParsingDiagnostics } = ts
108-
.convertCompilerOptionsFromJson(config, "");
118+
.convertCompilerOptionsFromJson(config, "");
109119
// The `allowNonTsExtensions` is a "hidden" compiler option used in VSCode
110120
// which is not allowed to be passed in JSON, we need it to allow special
111121
// URLs which Deno supports. So we need to either ignore the diagnostic, or
112122
// inject it ourselves.
113-
Object.assign(options, { allowNonTsExtensions: true });
123+
Object.assign(options, { allowNonTsExtensions: true, generateTrace: tracePath });
124+
ts.enableStatisticsAndTracing(ts.sys, options, false);
114125
const program = ts.createIncrementalProgram({
115126
rootNames,
116127
options,
@@ -180,6 +191,8 @@ function exec({ config, debug: debugFlag, rootNames, localOnly }) {
180191
ambientModules: checker.getAmbientModules().map((symbol) => symbol.name),
181192
stats: performanceEnd(),
182193
});
194+
195+
ts.reportStatistics(ts.sys, program, null);
183196
debug("<<< exec stop");
184197
}
185198

cli/tsc/js.rs

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,19 @@ use deno_graph::ModuleGraph;
2323
use deno_lib::util::hash::FastInsecureHasher;
2424
use deno_lib::worker::create_isolate_create_params;
2525
use deno_path_util::resolve_url_or_path;
26+
use deno_resolver::npm::DenoInNpmPackageChecker;
27+
use deno_runtime::deno_permissions::PermissionsContainer;
28+
use deno_runtime::permissions::RuntimePermissionDescriptorParser;
29+
use deno_runtime::worker::WorkerOptions;
30+
use deno_runtime::worker::WorkerServiceOptions;
2631
use node_resolver::ResolutionMode;
2732

2833
use super::LAZILY_LOADED_STATIC_ASSETS;
2934
use super::ResolveArgs;
3035
use super::ResolveError;
3136
use crate::args::TypeCheckMode;
37+
use crate::npm::CliNpmResolver;
38+
use crate::sys::CliSys;
3239
use crate::tsc::Diagnostics;
3340
use crate::tsc::ExecError;
3441
use crate::tsc::LoadError;
@@ -175,7 +182,7 @@ deno_core::extension!(deno_cli_tsc,
175182
ext.esm_files.to_mut().push(ExtensionFileSource::new_computed("ext:deno_cli_tsc/99_main_compiler.js", crate::tsc::MAIN_COMPILER_SOURCE.as_str().into()));
176183
ext.esm_files.to_mut().push(ExtensionFileSource::new_computed("ext:deno_cli_tsc/97_ts_host.js", crate::tsc::TS_HOST_SOURCE.as_str().into()));
177184
ext.esm_files.to_mut().push(ExtensionFileSource::new_computed("ext:deno_cli_tsc/98_lsp.js", crate::tsc::LSP_SOURCE.as_str().into()));
178-
ext.js_files.to_mut().push(ExtensionFileSource::new_computed("ext:deno_cli_tsc/00_typescript.js", crate::tsc::TYPESCRIPT_SOURCE.as_str().into()));
185+
ext.esm_files.to_mut().push(ExtensionFileSource::new_computed("ext:deno_cli_tsc/00_typescript.js", crate::tsc::TYPESCRIPT_SOURCE.as_str().into()));
179186
ext.esm_entry_point = Some("ext:deno_cli_tsc/99_main_compiler.js");
180187
}
181188
);
@@ -338,23 +345,64 @@ pub fn exec_request(
338345
});
339346
let exec_source = format!("globalThis.exec({request_value})");
340347

341-
let mut extensions =
342-
deno_runtime::snapshot_info::get_extensions_in_snapshot();
348+
let mut extensions = vec![];
343349
extensions.push(deno_cli_tsc::init(request, root_map, remapped_specifiers));
344350
let extension_code_cache = code_cache.map(|cache| {
345351
Rc::new(TscExtCodeCache::new(cache)) as Rc<dyn deno_core::ExtCodeCache>
346352
});
347-
let mut runtime = JsRuntime::new(RuntimeOptions {
353+
let mut main_worker =
354+
deno_runtime::worker::MainWorker::bootstrap_from_options(
355+
&ModuleSpecifier::parse("file:///main.ts").unwrap(),
356+
WorkerServiceOptions::<DenoInNpmPackageChecker, CliNpmResolver, CliSys> {
357+
blob_store: Default::default(),
358+
broadcast_channel: Default::default(),
359+
deno_rt_native_addon_loader: None,
360+
feature_checker: Default::default(),
361+
fs: Arc::new(deno_runtime::deno_fs::RealFs),
362+
module_loader: Rc::new(deno_core::NoopModuleLoader),
363+
node_services: None,
364+
npm_process_state_provider: None,
365+
permissions: PermissionsContainer::allow_all(Arc::new(
366+
RuntimePermissionDescriptorParser::new(crate::sys::CliSys::default()),
367+
)),
368+
root_cert_store_provider: None,
369+
fetch_dns_resolver: Default::default(),
370+
shared_array_buffer_store: None,
371+
compiled_wasm_module_store: None,
372+
v8_code_cache: None,
373+
bundle_provider: None,
374+
},
375+
WorkerOptions {
376+
startup_snapshot: deno_snapshots::CLI_SNAPSHOT,
377+
extensions,
378+
..Default::default()
379+
},
380+
);
381+
eprintln!("HERE");
382+
/* let mut runtime = JsRuntime::new(RuntimeOptions {
348383
extensions,
349384
create_params: create_isolate_create_params(&crate::sys::CliSys::default()),
350385
startup_snapshot: deno_snapshots::CLI_SNAPSHOT,
351386
extension_code_cache,
352387
..Default::default()
353-
});
388+
}); */
389+
let runtime = &mut main_worker.js_runtime;
390+
391+
eprintln!("HERE2");
392+
runtime
393+
.op_state()
394+
.borrow_mut()
395+
.put(deno_runtime::snapshot_info::AllowAll);
396+
runtime
397+
.op_state()
398+
.borrow_mut()
399+
.put(crate::sys::CliSys::default());
354400

401+
eprintln!("HERE3");
355402
runtime
356403
.execute_script(located_script_name!(), exec_source)
357404
.map_err(ExecError::Js)?;
405+
eprintln!("HERE4");
358406

359407
let op_state = runtime.op_state();
360408
let mut op_state = op_state.borrow_mut();

runtime/js/99_main.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,16 @@ const NOT_IMPORTED_OPS = [
543543
"op_deploy_token_get",
544544
"op_deploy_token_set",
545545
"op_deploy_token_delete",
546+
547+
"op_load",
548+
"op_is_node_file",
549+
"op_emit",
550+
"op_respond",
551+
"op_libs",
552+
"op_create_hash",
553+
"op_remap_specifier",
554+
"op_resolve",
555+
"op_tsc_constants",
546556
];
547557

548558
function removeImportedOps() {

0 commit comments

Comments
 (0)