Use 'node-html-parser'
This commit is contained in:
+29
-16
@@ -1,9 +1,11 @@
|
||||
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'].substring(1);
|
||||
const monacoVersion = packageJson.dependencies['monaco-editor'].replace('^', '');
|
||||
|
||||
// fetch monaco sri info from cdnjs api
|
||||
const cdnjsAPIResp = await fetch(
|
||||
@@ -11,22 +13,33 @@ const cdnjsAPIResp = await fetch(
|
||||
);
|
||||
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]);
|
||||
}
|
||||
};
|
||||
|
||||
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);
|
||||
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.');
|
||||
}
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@
|
||||
]
|
||||
},
|
||||
"volta": {
|
||||
"node": "16.15.0",
|
||||
"node": "18.5.0",
|
||||
"yarn": "1.22.10"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
+13
-6
@@ -15,29 +15,36 @@
|
||||
<link rel="manifest" href="%sveltekit.assets%/manifest.json" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
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=="
|
||||
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" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs/editor/editor.main.min.css" integrity="sha512-633RnebxsjmF57QUx9c85T6XILSAuJFzKnN5dVsUQ3nsc7c0bW649fCj1Z8ZkAbo5vAHnKZIsGqDokJRiABupA=="
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs/editor/editor.main.min.css"
|
||||
integrity="sha512-633RnebxsjmF57QUx9c85T6XILSAuJFzKnN5dVsUQ3nsc7c0bW649fCj1Z8ZkAbo5vAHnKZIsGqDokJRiABupA=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer" />
|
||||
<script>
|
||||
var require = {
|
||||
paths: { vs: 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs' }
|
||||
paths: {
|
||||
vs: "https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs",
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<script
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs/loader.min.js" integrity="sha512-O9SYDgWAM3bEzit1z6mkFd+dxKUplO/oB8UwYGAkg2Zy/WzDUQ2mYA/ysk3c0CxiXAN4u8T9JeZ0Ahk2Jj/33Q=="
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs/loader.min.js"
|
||||
integrity="sha512-O9SYDgWAM3bEzit1z6mkFd+dxKUplO/oB8UwYGAkg2Zy/WzDUQ2mYA/ysk3c0CxiXAN4u8T9JeZ0Ahk2Jj/33Q=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"></script>
|
||||
<script
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs/editor/editor.main.nls.min.js" integrity="sha512-TShm8t61Zg9dutpJGD4KMy+VO4yVW0pgvHfeFjovzp+kBcSpblO7mBGSbL2ncApu0FfiqHiygwcef65+qiLRxg=="
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs/editor/editor.main.nls.min.js"
|
||||
integrity="sha512-TShm8t61Zg9dutpJGD4KMy+VO4yVW0pgvHfeFjovzp+kBcSpblO7mBGSbL2ncApu0FfiqHiygwcef65+qiLRxg=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"></script>
|
||||
<script
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs/editor/editor.main.js" integrity="sha512-7p8WMGQI2IAHj9dn6uYYQYGsHNlpMp8Wv4Q1M0SNxM+8Rd16sHL7gXmktieLjh1iyWl41doD6NOiId7e+XCw6Q=="
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.33.0/min/vs/editor/editor.main.js"
|
||||
integrity="sha512-7p8WMGQI2IAHj9dn6uYYQYGsHNlpMp8Wv4Q1M0SNxM+8Rd16sHL7gXmktieLjh1iyWl41doD6NOiId7e+XCw6Q=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"></script>
|
||||
%sveltekit.head%
|
||||
|
||||
Reference in New Issue
Block a user