quarto: apply deno 2 compatibility patch

This commit is contained in:
Theodore Ni 2024-11-08 19:17:02 -08:00
parent 69cc148de3
commit 4f03379232
No known key found for this signature in database
GPG Key ID: 48B67583BDDD4474
2 changed files with 153 additions and 0 deletions

View File

@ -26,6 +26,10 @@ stdenv.mkDerivation (final: {
hash = "sha256-0qCQswtBC8R1Q7pHLhJtqCncllqgXo1t9pG97VwCtAI=";
};
patches = [
./deno2.patch
];
nativeBuildInputs = [
makeWrapper
];

View File

@ -0,0 +1,149 @@
diff --git a/bin/quarto.js b/bin/quarto.js
index f854281..0b78f6e 100644
--- a/bin/quarto.js
+++ b/bin/quarto.js
@@ -28511,7 +28511,7 @@ function jupyterHubServicePrefix() {
return Deno.env.get("JUPYTERHUB_SERVICE_PREFIX");
}
function isInteractiveTerminal() {
- return Deno.isatty(Deno.stderr.rid);
+ return Deno.stderr.isTerminal();
}
function isInteractiveSession() {
return isRStudio() || isInteractiveTerminal() || isVSCodeOutputChannel();
@@ -83562,7 +83562,7 @@ function writeFileToStdout(file) {
});
const contents = readAllSync(df);
writeAllSync1(Deno.stdout, contents);
- Deno.close(df.rid);
+ df.close();
}
function clearLine() {
info(ansi.eraseLine.cursorLeft(), {
@@ -96154,6 +96154,7 @@ class ParserBase {
class SAXParser extends ParserBase {
_listeners = {};
_controller;
+ _encoding;
fireListeners(event) {
const [name, ...args] = event;
const list = this._listeners[name] || [];
@@ -96189,33 +96190,23 @@ class SAXParser extends ParserBase {
write(chunk, controller) {
try {
this._controller = controller;
- this.chunk = new TextDecoder().decode(chunk);
+ this.chunk = new TextDecoder(this._encoding).decode(chunk);
this.run();
} finally{
this._controller = undefined;
}
}
- getStream() {
- return new WritableStream(this);
- }
- getWriter() {
- const streamWriter = this.getStream().getWriter();
- return {
- async write (p) {
- await streamWriter.ready;
- await streamWriter.write(p);
- return p.length;
- }
- };
- }
- async parse(source) {
+ async parse(source, encoding) {
+ this._encoding = encoding;
if (typeof source === 'string') {
this.chunk = source;
this.run();
} else if (source instanceof Uint8Array) {
this.write(source);
} else {
- await Deno.copy(source, this.getWriter());
+ await source.pipeThrough(new TextDecoderStream(this._encoding)).pipeTo(new WritableStream({
+ write: (str)=>this.parse(str, encoding)
+ }));
}
}
on(event, listener) {
@@ -96326,8 +96317,7 @@ async function readSitemap(sitemapPath) {
}
});
const reader = await Deno.open(sitemapPath);
- await parser.parse(reader);
- reader.close();
+ await parser.parse(reader.readable);
return urlset;
}
function writeSitemap(sitemapPath, urlset, draftMode) {
@@ -98407,21 +98397,21 @@ async function generateFeed(feed, feedItems, path) {
feed,
escape: __VIRTUAL_FILE172
});
- await Deno.write(feedFile.rid, textEncoder.encode(preamble));
+ await feedFile.write(textEncoder.encode(preamble));
for (const feedItem of feedItems){
const item = renderEjs(resourcePath("projects/website/listing/feed/item.ejs.md"), {
item: feedItem,
escape: __VIRTUAL_FILE172
});
- await Deno.write(feedFile.rid, textEncoder.encode(item));
+ await feedFile.write(textEncoder.encode(item));
}
const postamble = renderEjs(resourcePath("projects/website/listing/feed/postamble.ejs.md"), {
feed,
escape: __VIRTUAL_FILE172
});
- await Deno.write(feedFile.rid, textEncoder.encode(postamble));
+ await feedFile.write(textEncoder.encode(postamble));
} finally{
- Deno.close(feedFile.rid);
+ feedFile.close();
}
}
function prepareItems(items, options) {
@@ -112277,7 +112267,7 @@ async function renderForPublish(render, providerName, type, title, siteUrl) {
}
function stageDocumentPublish(title, publishFiles) {
const publishDir = globalTempContext().createDir();
- const stagedFiles = window.structuredClone(publishFiles);
+ const stagedFiles = globalThis.structuredClone(publishFiles);
stagedFiles.baseDir = publishDir;
for (const file of publishFiles.files){
const src = join2(publishFiles.baseDir, file);
@@ -126377,33 +126367,6 @@ function reportPeformanceMetrics() {
console.log("Performance metrics");
console.log("Quarto:");
console.log(JSON.stringify(quartoPerformanceMetrics(), null, 2));
- console.log();
- console.log("Deno:");
- const denoMetrics = JSON.parse(JSON.stringify(Deno.metrics()));
- denoMetrics.ops = Object.fromEntries(Object.entries(denoMetrics.ops).map(([key, opMetrics])=>{
- for (const key of Object.keys(opMetrics)){
- if (opMetrics[key] === 0) {
- delete opMetrics[key];
- }
- }
- return [
- key,
- opMetrics
- ];
- }).filter(([_key, opMetrics])=>Object.keys(opMetrics).length > 0).map(([key, opMetrics])=>{
- if (opMetrics.opsDispatched === opMetrics.opsDispatchedSync && opMetrics.opsDispatched === opMetrics.opsCompleted && opMetrics.opsDispatched === opMetrics.opsCompletedSync || opMetrics.opsDispatched === opMetrics.opsDispatchedAsync && opMetrics.opsDispatched === opMetrics.opsCompleted && opMetrics.opsDispatched === opMetrics.opsCompletedAsync) {
- return [
- key,
- opMetrics.opsDispatched
- ];
- } else {
- return [
- key,
- opMetrics
- ];
- }
- }));
- console.log(JSON.stringify(denoMetrics, null, 2));
}
async function mainRunner(runner) {
try {