Skip to content

Commit d7e44b6

Browse files
fonsppankgeorg
andauthored
Frontend bundler update nov 2024 (#3091)
Co-authored-by: Panagiotis Georgakopoulos <panagiotis.georgakopoulos@juliacomputing.com>
1 parent f5499e3 commit d7e44b6

File tree

17 files changed

+2510
-10872
lines changed

17 files changed

+2510
-10872
lines changed

.github/workflows/Bundle.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
# Do the actual bundling
5050
- uses: actions/setup-node@v4
5151
with:
52-
node-version: 17.x
52+
node-version: 22.x
5353
cache: "npm"
5454
cache-dependency-path: frontend-bundler/package-lock.json
5555

@@ -60,7 +60,12 @@ jobs:
6060
working-directory: frontend-bundler
6161
run: |
6262
(npm run build) || (npm run build) || (npm run build)
63-
63+
64+
- name: List generated files
65+
working-directory: frontend-dist
66+
run: |
67+
ls -lha
68+
6469
- name: Check for corrupt files
6570
working-directory: frontend-dist
6671
run: |

frontend-bundler/.parcelrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"..."
66
],
77
"reporters": [
8-
"...",
8+
"...",
99
"parcel-reporter-bundle-manifest"
1010
]
1111
}

frontend-bundler/package-lock.json

Lines changed: 2421 additions & 10831 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend-bundler/package.json

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,22 @@
1313
"author": "",
1414
"license": "ISC",
1515
"dependencies": {
16-
"@parcel/config-default": "^2.0.0",
17-
"mkdirp": "^1.0.4",
18-
"parcel": "^2.0.0",
16+
"@parcel/config-default": "^2.11.0",
17+
"mkdirp": "^3.0.1",
18+
"parcel": "^2.11.0",
1919
"parcel-reporter-bundle-manifest": "^1.0.0",
2020
"parcel-resolver-like-a-browser": "file:../frontend-bundler/parcel-resolver-like-a-browser"
2121
},
22+
"engines": {
23+
"node": ">=22 <23",
24+
"npm": ">=10 <11"
25+
},
2226
"devDependencies": {
23-
"@parcel/optimizer-data-url": "^2.0.0",
24-
"@parcel/transformer-inline-string": "^2.0.0",
27+
"@parcel/optimizer-blob-url": "^2.11.0",
28+
"@parcel/optimizer-data-url": "^2.11.0",
2529
"@plutojl/posthtml-crossorigin": "^1.0.0",
26-
"@types/node": "^16.11.6",
30+
"@types/node": "^22",
2731
"posthtml": "^0.16.6",
28-
"posthtml-sri": "^1.2.0"
32+
"posthtml-sri": "^2.0.0"
2933
}
3034
}

frontend-bundler/parcel-resolver-like-a-browser/https-resolver.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
let { Resolver } = require("@parcel/plugin")
22
let path = require("path")
3-
let fetch = require("node-fetch")
43
let fs = require("fs/promises")
5-
let mkdirp = require("mkdirp")
4+
let { mkdirp } = require("mkdirp")
65
let { URL } = require("url")
76
let crypto = require("crypto")
87

@@ -86,16 +85,16 @@ module.exports = new Resolver({
8685
}
8786
// Can't directly use the value from the request, as parcel really wants a string,
8887
// and converting binary assets into strings and then passing them doesn't work 🤷‍♀️.
89-
let buffer = await response.buffer()
88+
let buffer = await response.arrayBuffer()
9089

91-
const response_length = buffer.length
90+
const response_length = buffer.byteLength
9291

9392
if (response_length === 0) {
9493
throw new Error(`${specifier} returned an empty reponse.`)
9594
}
9695

9796
await mkdirp(folder)
98-
const write_result = await fs.writeFile(fullpath, buffer)
97+
const write_result = await fs.writeFile(fullpath, Buffer.from(buffer))
9998

10099
// Verify that the file was written correctly:
101100
if (write_result !== undefined || (await fs.readFile(fullpath)).length !== response_length) {

frontend-bundler/parcel-resolver-like-a-browser/package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
"author": "",
1313
"license": "ISC",
1414
"dependencies": {
15-
"@parcel/node-resolver-core": "^2.0.0",
16-
"@parcel/plugin": "^2.0.0",
17-
"node-fetch": "^2.6.5"
15+
"@parcel/node-resolver-core": "^3.3.0",
16+
"@parcel/plugin": "^2.0.0"
1817
}
1918
}

frontend/common/AudioRecording.js

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
// @ts-ignore
2-
import vmsg from "https://cdn.jsdelivr.net/npm/vmsg@0.4.0/vmsg.js"
2+
import vmsg from "https://cdn.jsdelivr.net/npm/vmsg@0.4.0/vmsg.js" // when modifying, also modify the version number in all other files.
3+
import { get_included_external_source } from "./external_source.js"
34

4-
export const create_recorder = async () => {
5-
const recorder = new vmsg.Recorder({
6-
wasmURL: new URL("https://unpkg.com/vmsg@0.4.0/vmsg.wasm", import.meta.url),
7-
})
5+
const create_recorder_mp3 = async () => {
6+
const wasmURL = get_included_external_source("vmsg-wasm")?.href
7+
8+
if (!wasmURL) throw new Error("wasmURL not found")
9+
10+
const recorder = new vmsg.Recorder({ wasmURL })
811

912
return {
1013
start: async () => {
@@ -20,8 +23,18 @@ export const create_recorder = async () => {
2023
}
2124
}
2225

26+
export const create_recorder = () => {
27+
try {
28+
return create_recorder_mp3()
29+
} catch (e) {
30+
console.error("Failed to create mp3 recorder", e)
31+
}
32+
33+
return create_recorder_native()
34+
}
35+
2336
// really nice but it can only record to audio/ogg or sometihng, nothing that works across all browsers
24-
export const create_recorder_native = async () => {
37+
const create_recorder_native = async () => {
2538
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
2639

2740
let chunks = []

frontend/common/SetupMathJax.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import "https://cdn.jsdelivr.net/npm/requestidlecallback-polyfill@1.0.2/index.js"
2+
import { get_included_external_source } from "./external_source.js"
23

34
let setup_done = false
45

@@ -75,14 +76,20 @@ export const setup_mathjax = () => {
7576
requestIdleCallback(
7677
() => {
7778
console.log("Loading mathjax!!")
78-
const script = document.head.querySelector("#MathJax-script")
79-
script?.addEventListener("load", () => {
79+
const src = get_included_external_source("MathJax-script")
80+
if (!src) throw new Error("Could not find mathjax source")
81+
82+
const script = document.createElement("script")
83+
script.addEventListener("load", () => {
8084
console.log("MathJax loaded!")
8185
if (window["MathJax"]?.version !== "3.2.2") {
8286
twowasloaded()
8387
}
8488
})
85-
script.setAttribute("src", script.getAttribute("not-the-src-yet"))
89+
script.crossOrigin = src.crossOrigin
90+
script.integrity = src.integrity
91+
script.src = src.href
92+
document.head.append(script)
8693
},
8794
{ timeout: 2000 }
8895
)

frontend/common/external_source.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/**
2+
* Get a `<link rel="pluto-external-source">` element from editor.html.
3+
* @param {String} id
4+
* @returns {HTMLLinkElement?}
5+
*/
6+
export const get_included_external_source = (id) => document.head.querySelector(`link[rel='pluto-external-source'][id='${id}']`)

frontend/components/Editor.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import { get_environment } from "../common/Environment.js"
4545
import { ProcessStatus } from "../common/ProcessStatus.js"
4646
import { SafePreviewUI } from "./SafePreviewUI.js"
4747
import { open_pluto_popup } from "../common/open_pluto_popup.js"
48+
import { get_included_external_source } from "../common/external_source.js"
4849

4950
// This is imported asynchronously - uncomment for development
5051
// import environment from "../common/Environment.js"
@@ -257,8 +258,8 @@ const first_true_key = (obj) => {
257258
* }}
258259
*/
259260

260-
const url_logo_big = document.head.querySelector("link[rel='pluto-logo-big']")?.getAttribute("href") ?? ""
261-
export const url_logo_small = document.head.querySelector("link[rel='pluto-logo-small']")?.getAttribute("href") ?? ""
261+
const url_logo_big = get_included_external_source("pluto-logo-big")?.href
262+
export const url_logo_small = get_included_external_source("pluto-logo-small")?.href
262263

263264
/**
264265
* @typedef EditorProps

0 commit comments

Comments
 (0)