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..3d81bdfc
--- /dev/null
+++ b/bin/update-monaco.js
@@ -0,0 +1,45 @@
+import fs from 'fs';
+import path from 'path';
+import { parse } from 'node-html-parser';
+import prettier from 'prettier';
+
+// parse monaco version out of package.json
+const packageJson = JSON.parse(fs.readFileSync('package.json'));
+const monacoVersion = packageJson.dependencies['monaco-editor'].replace('^', '');
+
+// 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();
+ const htmlPath = path.join('src', 'app.html');
+ const appHtml = fs
+ .readFileSync(htmlPath, 'utf8')
+ // update monaco version of every asset in app.html
+ .replaceAll(/[0-9.]+\/min\/vs/g, `${monacoVersion}/min/vs`);
+ const root = parse(appHtml);
+ const updateIntegrity = (tag, attr) => {
+ for (const node of root
+ .getElementsByTagName(tag)
+ .filter((node) => node.getAttribute(attr)?.includes('monaco-editor'))) {
+ const file = node.getAttribute(attr).split(`${monacoVersion}/`)[1];
+ node.setAttribute('integrity', respJson.sri[file]);
+ }
+ };
+
+ updateIntegrity('script', 'src');
+ updateIntegrity('link', 'href');
+
+ fs.writeFileSync(
+ htmlPath,
+ prettier.format(root.toString(), {
+ singleQuote: false,
+ parser: 'html',
+ bracketSameLine: true,
+ useTabs: true
+ })
+ );
+} else {
+ throw Error('Unable to fetch monaco sri data from cdnjs api.');
+}
diff --git a/package.json b/package.json
index 63242307..ce7a2fff 100644
--- a/package.json
+++ b/package.json
@@ -82,7 +82,7 @@
]
},
"volta": {
- "node": "16.15.0",
+ "node": "18.5.0",
"yarn": "1.22.10"
},
"engines": {
diff --git a/src/app.html b/src/app.html
index e6054088..38b8fb45 100644
--- a/src/app.html
+++ b/src/app.html
@@ -15,30 +15,38 @@
+ 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%