mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 15:49:44 -05:00
fix: base64 encoding of source maps with emojis (#14607)
This commit fixes source maps for files that contain emojis. This is done by updating "deno_ast" to "0.14.1" for the case of "--no-check" flag (ie using SWC emit) and by overriding TSC's default base64 encoder (which turned out to be buggy) for the type checking case.
This commit is contained in:
parent
b2ba0c54af
commit
d76acfdc17
7 changed files with 56 additions and 6 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -811,9 +811,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "deno_ast"
|
||||
version = "0.14.0"
|
||||
version = "0.14.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc8868538999df5fae866dfe9841750fb57b45be49b948e173ad6a7023c0428c"
|
||||
checksum = "f0691d08faa4f1fd9898ecfbe82c32623f89969e92e7b97b5119a18399609d25"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base64 0.13.0",
|
||||
|
|
|
@ -709,6 +709,7 @@ pub fn bundle(
|
|||
let emit_options: deno_ast::EmitOptions = options.ts_config.into();
|
||||
let source_map_config = deno_ast::SourceMapConfig {
|
||||
inline_sources: emit_options.inline_sources,
|
||||
maybe_base: None,
|
||||
};
|
||||
|
||||
let cm = Rc::new(swc::common::SourceMap::new(
|
||||
|
|
3
cli/tests/testdata/coverage/complex.ts
vendored
3
cli/tests/testdata/coverage/complex.ts
vendored
|
@ -69,3 +69,6 @@ export function ƒ(): number {
|
|||
|
||||
// This arrow function should also show up as uncovered.
|
||||
console.log("%s", () => 1);
|
||||
|
||||
// Make sure emojis work properly
|
||||
console.log("📣❓");
|
||||
|
|
|
@ -48,6 +48,7 @@ DA:66,0
|
|||
DA:67,0
|
||||
DA:68,1
|
||||
DA:71,0
|
||||
LH:22
|
||||
LF:37
|
||||
DA:74,1
|
||||
LH:23
|
||||
LF:38
|
||||
end_of_record
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
cover [WILDCARD]/coverage/complex.ts ... 59.459% (22/37)
|
||||
cover [WILDCARD]/coverage/complex.ts ... 60.526% (23/38)
|
||||
46 | export function unused(
|
||||
47 | foo: string,
|
||||
48 | bar: string,
|
||||
|
|
|
@ -72,6 +72,43 @@ delete Object.prototype.__proto__;
|
|||
}
|
||||
}
|
||||
|
||||
// deno-fmt-ignore
|
||||
const base64abc = [
|
||||
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
|
||||
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d",
|
||||
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
|
||||
"t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7",
|
||||
"8", "9", "+", "/",
|
||||
];
|
||||
|
||||
/** Taken from https://deno.land/std/encoding/base64.ts */
|
||||
function convertToBase64(data) {
|
||||
const uint8 = core.encode(data);
|
||||
let result = "",
|
||||
i;
|
||||
const l = uint8.length;
|
||||
for (i = 2; i < l; i += 3) {
|
||||
result += base64abc[uint8[i - 2] >> 2];
|
||||
result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)];
|
||||
result += base64abc[((uint8[i - 1] & 0x0f) << 2) | (uint8[i] >> 6)];
|
||||
result += base64abc[uint8[i] & 0x3f];
|
||||
}
|
||||
if (i === l + 1) {
|
||||
// 1 octet yet to write
|
||||
result += base64abc[uint8[i - 2] >> 2];
|
||||
result += base64abc[(uint8[i - 2] & 0x03) << 4];
|
||||
result += "==";
|
||||
}
|
||||
if (i === l) {
|
||||
// 2 octets yet to write
|
||||
result += base64abc[uint8[i - 2] >> 2];
|
||||
result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)];
|
||||
result += base64abc[(uint8[i - 1] & 0x0f) << 2];
|
||||
result += "=";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// In the case of the LSP, this is initialized with the assets
|
||||
// when snapshotting and never added to or removed after that.
|
||||
/** @type {Map<string, ts.SourceFile>} */
|
||||
|
@ -485,6 +522,14 @@ delete Object.prototype.__proto__;
|
|||
* @param {Request} request
|
||||
*/
|
||||
function exec({ config, debug: debugFlag, rootNames }) {
|
||||
// https://github.com/microsoft/TypeScript/issues/49150
|
||||
ts.base64encode = function (host, input) {
|
||||
if (host && host.base64encode) {
|
||||
return host.base64encode(input);
|
||||
}
|
||||
return convertToBase64(input);
|
||||
};
|
||||
|
||||
setLogDebug(debugFlag, "TS");
|
||||
performanceStart();
|
||||
debug(">>> exec start", { rootNames });
|
||||
|
|
2
cli/tsc/compiler.d.ts
vendored
2
cli/tsc/compiler.d.ts
vendored
|
@ -8,7 +8,7 @@ declare global {
|
|||
namespace ts {
|
||||
var libs: string[];
|
||||
var libMap: Map<string, string>;
|
||||
|
||||
var base64encode: (host: ts.CompilerHost, input: string) => string;
|
||||
interface SourceFile {
|
||||
version?: string;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue