diff --git a/.github/workflows/update-monaco-editor.yml b/.github/workflows/update-monaco-editor.yml
index 646aa98f..6d36aa63 100644
--- a/.github/workflows/update-monaco-editor.yml
+++ b/.github/workflows/update-monaco-editor.yml
@@ -10,7 +10,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- - run: ./bin/update-monaco
+ - uses: actions/setup-node@v2
+ with:
+ node-version: 18
+ - run: node ./bin/update-monaco.js
- name: Commit changes
uses: EndBug/add-and-commit@v9
with:
diff --git a/bin/update-monaco b/bin/update-monaco
deleted file mode 100755
index dbddd571..00000000
--- a/bin/update-monaco
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-monacoVersion="$(jq -r '.dependencies."monaco-editor"' package.json)"
-monacoVersion="${monacoVersion:1}"
-
-if [[ $(uname) == "Darwin" ]];
-then
- sed -i '' -E "s/monaco-editor\/[^/]*/monaco-editor\/$monacoVersion/g" ./src/app.html
-else
- sed -i'' -E "s/monaco-editor\/[^/]*/monaco-editor\/$monacoVersion/g" ./src/app.html
-fi
-
diff --git a/bin/update-monaco.js b/bin/update-monaco.js
new file mode 100755
index 00000000..867bcf75
--- /dev/null
+++ b/bin/update-monaco.js
@@ -0,0 +1,32 @@
+import fs from 'fs';
+import path from 'path';
+
+// parse monaco version out of package.json
+const packageJson = JSON.parse(fs.readFileSync('package.json'));
+const monacoVersion = packageJson.dependencies['monaco-editor'].substring(1);
+
+// fetch monaco sri info from cdnjs api
+const cdnjsAPIResp = await fetch(
+ `https://api.cdnjs.com/libraries/monaco-editor/${monacoVersion}?fields=sri`
+);
+if (cdnjsAPIResp.ok) {
+ const respJson = await cdnjsAPIResp.json();
+
+ let appHtml = fs.readFileSync(path.join('src', 'app.html'), 'utf8');
+ // update monaco version of every asset in app.html
+ appHtml = appHtml.replaceAll(/[0-9.]+\/min\/vs/g, `${monacoVersion}/min/vs`);
+ // update sri integrity value for each asset
+ for (let monacoAssetMatch of appHtml.matchAll(/min\/vs\/[^"]+/g)) {
+ let monacoAsset = monacoAssetMatch[0];
+ appHtml = appHtml.replace(
+ new RegExp(
+ monacoAsset.replaceAll('/', '\\/').replaceAll('.', '\\.') + '" integrity=".+"',
+ 'g'
+ ),
+ `${monacoAsset}" integrity="${respJson.sri[monacoAsset]}"`
+ );
+ }
+ fs.writeFileSync(path.join('src', 'app.html'), appHtml);
+} else {
+ throw Error('Unable to fetch monaco sri data from cdnjs api.');
+}
diff --git a/src/app.html b/src/app.html
index e6054088..60805ef4 100644
--- a/src/app.html
+++ b/src/app.html
@@ -15,10 +15,12 @@
+ href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css" integrity="sha512-HK5fgLBL+xu6dm/Ii3z4xhlSUyZgTT9tuc/hSrtw6uzJOvgRr2a9jyxxT1ely+B+xFAmJKVSTbpM/CuL7qxO8w=="
+ crossorigin="anonymous"
+ referrerpolicy="no-referrer" />
-
%sveltekit.head%