| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #!/usr/bin/env node
- /*!
- * Script to create the built examples zip archive;
- * requires the `zip` command to be present!
- * Copyright 2020-2025 The Bootstrap Authors
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */
- import fs from 'node:fs/promises'
- import path from 'node:path'
- import { fileURLToPath } from 'node:url'
- import sh from 'shelljs'
- const __dirname = path.dirname(fileURLToPath(import.meta.url))
- const pkgJson = path.join(__dirname, '../package.json')
- const pkg = JSON.parse(await fs.readFile(pkgJson, 'utf8'))
- const versionShort = pkg.config.version_short
- const distFolder = `bootstrap-${pkg.version}-examples`
- const rootDocsDir = '_site'
- const docsDir = `${rootDocsDir}/docs/${versionShort}/`
- // these are the files we need in the examples
- const cssFiles = [
- 'bootstrap.min.css',
- 'bootstrap.min.css.map',
- 'bootstrap.rtl.min.css',
- 'bootstrap.rtl.min.css.map'
- ]
- const jsFiles = [
- 'bootstrap.bundle.min.js',
- 'bootstrap.bundle.min.js.map'
- ]
- const imgFiles = [
- 'bootstrap-logo.svg',
- 'bootstrap-logo-white.svg'
- ]
- const staticJsFiles = [
- 'color-modes.js'
- ]
- sh.config.fatal = true
- if (!sh.test('-d', rootDocsDir)) {
- throw new Error(`The "${rootDocsDir}" folder does not exist, did you forget building the docs?`)
- }
- // switch to the root dir
- sh.cd(path.join(__dirname, '..'))
- // remove any previously created folder/zip with the same name
- sh.rm('-rf', [distFolder, `${distFolder}.zip`])
- // create any folders so that `cp` works
- sh.mkdir('-p', [
- distFolder,
- `${distFolder}/assets/brand/`,
- `${distFolder}/assets/dist/css/`,
- `${distFolder}/assets/dist/js/`,
- `${distFolder}/assets/js/`
- ])
- sh.cp('-Rf', `${docsDir}/examples/*`, distFolder)
- for (const file of cssFiles) {
- sh.cp('-f', `${docsDir}/dist/css/${file}`, `${distFolder}/assets/dist/css/`)
- }
- for (const file of jsFiles) {
- sh.cp('-f', `${docsDir}/dist/js/${file}`, `${distFolder}/assets/dist/js/`)
- }
- for (const file of imgFiles) {
- sh.cp('-f', `${docsDir}/assets/brand/${file}`, `${distFolder}/assets/brand/`)
- }
- for (const file of staticJsFiles) {
- sh.cp('-f', `${docsDir}/assets/js/${file}`, `${distFolder}/assets/js/`)
- }
- sh.rm(`${distFolder}/index.html`)
- // get all examples' HTML files
- for (const file of sh.find(`${distFolder}/**/*.html`)) {
- const fileContents = sh.cat(file)
- .toString()
- .replace(new RegExp(`"/docs/${versionShort}/`, 'g'), '"../')
- .replace(/"..\/dist\//g, '"../assets/dist/')
- .replace(/(<link href="\.\.\/.*) integrity=".*>/g, '$1>')
- .replace(/(<script src="\.\.\/.*) integrity=".*>/g, '$1></script>')
- .replace(/( +)<!-- favicons(.|\n)+<style>/i, ' <style>')
- new sh.ShellString(fileContents).to(file)
- }
- // create the zip file
- sh.exec(`zip -qr9 "${distFolder}.zip" "${distFolder}"`)
- // remove the folder we created
- sh.rm('-rf', distFolder)
|