mirror of
https://github.com/twbs/bootstrap.git
synced 2025-02-26 23:54:23 +01:00
This commit includes all the needed workarounds and most changes from the main branch for everything to work, like: * removing empty lines in raw HTML that break output * read .browserslistrc, CSS variables from disk instead of duplicating it * using Hugo mounts * using Hugo for the docs CSS/JS * move ToC Sass code to a separate file while adapting it for Hugo Thus, this patch makes our npm scripts faster since lint runs on one step and there's no separate docs assets processing.
67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/*!
|
|
* Script to generate SRI hashes for use in our docs.
|
|
* Remember to use the same vendor files as the CDN ones,
|
|
* otherwise the hashes won't match!
|
|
*
|
|
* Copyright 2017-2020 The Bootstrap Authors
|
|
* Copyright 2017-2020 Twitter, Inc.
|
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
*/
|
|
|
|
'use strict'
|
|
|
|
const crypto = require('crypto')
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
const sh = require('shelljs')
|
|
|
|
const pkg = require('../package.json')
|
|
|
|
sh.config.fatal = true
|
|
|
|
const configFile = path.join(__dirname, '../config.yml')
|
|
|
|
// Array of objects which holds the files to generate SRI hashes for.
|
|
// `file` is the path from the root folder
|
|
// `configPropertyName` is the config.yml variable's name of the file
|
|
const files = [
|
|
{
|
|
file: 'dist/css/bootstrap.min.css',
|
|
configPropertyName: 'css_hash'
|
|
},
|
|
{
|
|
file: 'dist/js/bootstrap.min.js',
|
|
configPropertyName: 'js_hash'
|
|
},
|
|
{
|
|
file: 'dist/js/bootstrap.bundle.min.js',
|
|
configPropertyName: 'js_bundle_hash'
|
|
},
|
|
{
|
|
file: `site/static/docs/${pkg.version_short}/assets/js/vendor/jquery.slim.min.js`,
|
|
configPropertyName: 'jquery_hash'
|
|
},
|
|
{
|
|
file: 'node_modules/popper.js/dist/umd/popper.min.js',
|
|
configPropertyName: 'popper_hash'
|
|
}
|
|
]
|
|
|
|
files.forEach(file => {
|
|
fs.readFile(file.file, 'utf8', (err, data) => {
|
|
if (err) {
|
|
throw err
|
|
}
|
|
|
|
const algo = 'sha384'
|
|
const hash = crypto.createHash(algo).update(data, 'utf8').digest('base64')
|
|
const integrity = `${algo}-${hash}`
|
|
|
|
console.log(`${file.configPropertyName}: ${integrity}`)
|
|
|
|
sh.sed('-i', new RegExp(`(\\s${file.configPropertyName}:\\s+"|')(\\S+)("|')`), `$1${integrity}$3`, configFile)
|
|
})
|
|
})
|