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%