]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Convert build scripts to ESM (#38984)
authorXhmikosR <xhmikosr@gmail.com>
Sun, 6 Aug 2023 04:37:24 +0000 (07:37 +0300)
committerGitHub <noreply@github.com>
Sun, 6 Aug 2023 04:37:24 +0000 (07:37 +0300)
.eslintrc.json
build/banner.mjs [moved from build/banner.js with 50% similarity]
build/build-plugins.mjs [moved from build/build-plugins.js with 87% similarity]
build/change-version.mjs [moved from build/change-version.js with 92% similarity]
build/generate-sri.mjs [moved from build/generate-sri.js with 78% similarity]
build/postcss.config.mjs [moved from build/postcss.config.js with 86% similarity]
build/rollup.config.mjs [moved from build/rollup.config.js with 63% similarity]
build/vnu-jar.mjs [moved from build/vnu-jar.js with 94% similarity]
build/zip-examples.mjs [moved from build/zip-examples.js with 89% similarity]
package.json

index 055acc706488b4d5fe6ef895acde6955e9917361..6c9c24d46e596630ffa0ad45163668aff46f50d9 100644 (file)
         "node": true
       },
       "parserOptions": {
-        "sourceType": "script"
+        "sourceType": "module"
       },
       "rules": {
         "no-console": "off",
similarity index 50%
rename from build/banner.js
rename to build/banner.mjs
index a022f1c4857014559e444ff841e6a9c2ad660dfd..3fea93c8f1d2290379ebd10dd2c2b28d6873b962 100644 (file)
@@ -1,6 +1,11 @@
-'use strict'
+import fs from 'node:fs/promises'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
 
-const pkg = require('../package.json')
+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 year = new Date().getFullYear()
 
@@ -12,4 +17,4 @@ function getBanner(pluginFilename) {
   */`
 }
 
-module.exports = getBanner
+export default getBanner
similarity index 87%
rename from build/build-plugins.js
rename to build/build-plugins.mjs
index b2833a3fb8ed1ac61a4b7b91baa606d0d29518b1..77e63070c55091958123e32e34ce05ff079ed4f2 100644 (file)
@@ -6,13 +6,15 @@
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
 
-'use strict'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import { babel } from '@rollup/plugin-babel'
+import globby from 'globby'
+import { rollup } from 'rollup'
+import banner from './banner.mjs'
 
-const path = require('node:path')
-const rollup = require('rollup')
-const globby = require('globby')
-const { babel } = require('@rollup/plugin-babel')
-const banner = require('./banner.js')
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = path.dirname(fileURLToPath(import.meta.url))
 
 const sourcePath = path.resolve(__dirname, '../js/src/').replace(/\\/g, '/')
 const jsFiles = globby.sync(`${sourcePath}/**/*.js`)
@@ -37,7 +39,7 @@ for (const file of jsFiles) {
 const build = async plugin => {
   const globals = {}
 
-  const bundle = await rollup.rollup({
+  const bundle = await rollup({
     input: plugin.src,
     plugins: [
       babel({
similarity index 92%
rename from build/change-version.js
rename to build/change-version.mjs
index 9685df589644ce0112c13be5477e5e9ee91fa15b..2a16f2f2108868a303007485321f2299aeb1d686 100644 (file)
@@ -6,11 +6,12 @@
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
 
-'use strict'
+import fs from 'node:fs/promises'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import globby from 'globby'
 
-const fs = require('node:fs').promises
-const path = require('node:path')
-const globby = require('globby')
+const __dirname = path.dirname(fileURLToPath(import.meta.url))
 
 const VERBOSE = process.argv.includes('--verbose')
 const DRY_RUN = process.argv.includes('--dry') || process.argv.includes('--dry-run')
similarity index 78%
rename from build/generate-sri.js
rename to build/generate-sri.mjs
index 2e2292475589621bc6a11d621919e9ccfb5c5a16..e2b1554f144eaf5f61fb8b5a895a6e2080833591 100644 (file)
@@ -9,12 +9,13 @@
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
 
-'use strict'
+import crypto from 'node:crypto'
+import fs from 'node:fs'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import sh from 'shelljs'
 
-const crypto = require('node:crypto')
-const fs = require('node:fs')
-const path = require('node:path')
-const sh = require('shelljs')
+const __dirname = path.dirname(fileURLToPath(import.meta.url))
 
 sh.config.fatal = true
 
@@ -52,9 +53,9 @@ for (const { file, configPropertyName } of files) {
       throw error
     }
 
-    const algo = 'sha384'
-    const hash = crypto.createHash(algo).update(data, 'utf8').digest('base64')
-    const integrity = `${algo}-${hash}`
+    const algorithm = 'sha384'
+    const hash = crypto.createHash(algorithm).update(data, 'utf8').digest('base64')
+    const integrity = `${algorithm}-${hash}`
 
     console.log(`${configPropertyName}: ${integrity}`)
 
similarity index 86%
rename from build/postcss.config.js
rename to build/postcss.config.mjs
index 7f8186d10314ad34710e142a30af135da81d2e3e..7717cfc3f1f6fb767cd5ab67ca4f0470c1e151cf 100644 (file)
@@ -1,12 +1,10 @@
-'use strict'
-
 const mapConfig = {
   inline: false,
   annotation: true,
   sourcesContent: true
 }
 
-module.exports = context => {
+export default context => {
   return {
     map: context.file.dirname.includes('examples') ? false : mapConfig,
     plugins: {
similarity index 63%
rename from build/rollup.config.js
rename to build/rollup.config.mjs
index f01918ebf24d4c5c6d2c53aa7821773245152460..dd6c7d13e66f862121f92cae43af81a2f4af658b 100644 (file)
@@ -1,15 +1,17 @@
-'use strict'
+import path from 'node:path'
+import process from 'node:process'
+import { fileURLToPath } from 'node:url'
+import { babel } from '@rollup/plugin-babel'
+import { nodeResolve } from '@rollup/plugin-node-resolve'
+import replace from '@rollup/plugin-replace'
+import banner from './banner.mjs'
 
-const path = require('node:path')
-const { babel } = require('@rollup/plugin-babel')
-const { nodeResolve } = require('@rollup/plugin-node-resolve')
-const replace = require('@rollup/plugin-replace')
-const banner = require('./banner.js')
+const __dirname = path.dirname(fileURLToPath(import.meta.url))
 
 const BUNDLE = process.env.BUNDLE === 'true'
 const ESM = process.env.ESM === 'true'
 
-let fileDestination = `bootstrap${ESM ? '.esm' : ''}`
+let destinationFile = `bootstrap${ESM ? '.esm' : ''}`
 const external = ['@popperjs/core']
 const plugins = [
   babel({
@@ -24,7 +26,7 @@ const globals = {
 }
 
 if (BUNDLE) {
-  fileDestination += '.bundle'
+  destinationFile += '.bundle'
   // Remove last entry in external array to bundle Popper
   external.pop()
   delete globals['@popperjs/core']
@@ -41,7 +43,7 @@ const rollupConfig = {
   input: path.resolve(__dirname, `../js/index.${ESM ? 'esm' : 'umd'}.js`),
   output: {
     banner: banner(),
-    file: path.resolve(__dirname, `../dist/js/${fileDestination}.js`),
+    file: path.resolve(__dirname, `../dist/js/${destinationFile}.js`),
     format: ESM ? 'esm' : 'umd',
     globals,
     generatedCode: 'es2015'
@@ -54,4 +56,4 @@ if (!ESM) {
   rollupConfig.output.name = 'bootstrap'
 }
 
-module.exports = rollupConfig
+export default rollupConfig
similarity index 94%
rename from build/vnu-jar.js
rename to build/vnu-jar.mjs
index 22956cb7e9a22f20ba572ca2a8dc5bb33324fc2b..b663560326180fb978c2b40e9a541a9817f2b306 100644 (file)
@@ -6,10 +6,8 @@
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
 
-'use strict'
-
-const { execFile, spawn } = require('node:child_process')
-const vnu = require('vnu-jar')
+import { execFile, spawn } from 'node:child_process'
+import vnu from 'vnu-jar'
 
 execFile('java', ['-version'], (error, stdout, stderr) => {
   if (error) {
similarity index 89%
rename from build/zip-examples.js
rename to build/zip-examples.mjs
index 7378c33c17692dd93a8eb6a7dfd4e0d0709b6195..6b44d45b1b6faeaec8c13adfe0b9231db5164e89 100644 (file)
@@ -7,12 +7,15 @@
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
 
-'use strict'
+import fs from 'node:fs/promises'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import sh from 'shelljs'
 
-const path = require('node:path')
-const sh = require('shelljs')
+const __dirname = path.dirname(fileURLToPath(import.meta.url))
 
-const pkg = require('../package.json')
+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`
index 8be4970f4556143db9883660f3c57a04ffcbba45..9eb4c60069ac6d952494152f28c81ddb75961af9 100644 (file)
@@ -43,7 +43,7 @@
     "bundlewatch": "bundlewatch --config .bundlewatch.config.json",
     "css": "npm-run-all css-compile css-prefix css-rtl css-minify",
     "css-compile": "sass --style expanded --source-map --embed-sources --no-error-css scss/:dist/css/",
-    "css-rtl": "cross-env NODE_ENV=RTL postcss --config build/postcss.config.js --dir \"dist/css\" --ext \".rtl.css\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*.rtl.css\"",
+    "css-rtl": "cross-env NODE_ENV=RTL postcss --config build/postcss.config.mjs --dir \"dist/css\" --ext \".rtl.css\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*.rtl.css\"",
     "css-lint": "npm-run-all --aggregate-output --continue-on-error --parallel css-lint-*",
     "css-lint-stylelint": "stylelint \"**/*.{css,scss}\" --cache --cache-location .cache/.stylelintcache",
     "css-lint-vars": "fusv scss/ site/assets/scss/",
     "css-minify-main": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*rtl*.css\"",
     "css-minify-rtl": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*rtl.css\" \"!dist/css/*.min.css\"",
     "css-prefix": "npm-run-all --aggregate-output --parallel css-prefix-*",
-    "css-prefix-main": "postcss --config build/postcss.config.js --replace \"dist/css/*.css\" \"!dist/css/*.rtl*.css\" \"!dist/css/*.min.css\"",
-    "css-prefix-examples": "postcss --config build/postcss.config.js --replace \"site/content/**/*.css\"",
-    "css-prefix-examples-rtl": "cross-env-shell NODE_ENV=RTL postcss --config build/postcss.config.js --dir \"site/content/docs/$npm_package_config_version_short/examples/\" --ext \".rtl.css\" --base \"site/content/docs/$npm_package_config_version_short/examples/\" \"site/content/docs/$npm_package_config_version_short/examples/{blog,carousel,dashboard,cheatsheet}/*.css\" \"!site/content/docs/$npm_package_config_version_short/examples/{blog,carousel,dashboard,cheatsheet}/*.rtl.css\"",
+    "css-prefix-main": "postcss --config build/postcss.config.mjs --replace \"dist/css/*.css\" \"!dist/css/*.rtl*.css\" \"!dist/css/*.min.css\"",
+    "css-prefix-examples": "postcss --config build/postcss.config.mjs --replace \"site/content/**/*.css\"",
+    "css-prefix-examples-rtl": "cross-env-shell NODE_ENV=RTL postcss --config build/postcss.config.mjs --dir \"site/content/docs/$npm_package_config_version_short/examples/\" --ext \".rtl.css\" --base \"site/content/docs/$npm_package_config_version_short/examples/\" \"site/content/docs/$npm_package_config_version_short/examples/{blog,carousel,dashboard,cheatsheet}/*.css\" \"!site/content/docs/$npm_package_config_version_short/examples/{blog,carousel,dashboard,cheatsheet}/*.rtl.css\"",
     "css-test": "jasmine --config=scss/tests/jasmine.js",
     "js": "npm-run-all js-compile js-minify",
     "js-compile": "npm-run-all --aggregate-output --parallel js-compile-*",
-    "js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap",
-    "js-compile-standalone-esm": "rollup --environment ESM:true,BUNDLE:false --config build/rollup.config.js --sourcemap",
-    "js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap",
-    "js-compile-plugins": "node build/build-plugins.js",
-    "js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives --ext .html,.js,.md .",
+    "js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.mjs --sourcemap",
+    "js-compile-standalone-esm": "rollup --environment ESM:true,BUNDLE:false --config build/rollup.config.mjs --sourcemap",
+    "js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.mjs --sourcemap",
+    "js-compile-plugins": "node build/build-plugins.mjs",
+    "js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives --ext .html,.js,.mjs,.md .",
     "js-minify": "npm-run-all --aggregate-output --parallel js-minify-*",
     "js-minify-standalone": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
     "js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.esm.js.map,includeSources,url=bootstrap.esm.min.js.map\" --output dist/js/bootstrap.esm.min.js dist/js/bootstrap.esm.js",
     "docs": "npm-run-all docs-build docs-lint",
     "docs-build": "hugo --cleanDestinationDir --printUnusedTemplates",
     "docs-compile": "npm run docs-build",
-    "docs-vnu": "node build/vnu-jar.js",
+    "docs-vnu": "node build/vnu-jar.mjs",
     "docs-lint": "npm run docs-vnu",
     "docs-serve": "hugo server --port 9001 --disableFastRender --printUnusedTemplates",
     "docs-serve-only": "npx sirv-cli _site --port 9001",
     "lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
     "update-deps": "ncu -u -x globby,jasmine,karma-browserstack-launcher,karma-rollup-preprocessor && echo Manually update site/assets/js/vendor",
     "release": "npm-run-all dist release-sri docs-build release-zip*",
-    "release-sri": "node build/generate-sri.js",
-    "release-version": "node build/change-version.js",
+    "release-sri": "node build/generate-sri.mjs",
+    "release-version": "node build/change-version.mjs",
     "release-zip": "cross-env-shell \"rm -rf bootstrap-$npm_package_version-dist bootstrap-$npm_package_version-dist.zip && cp -r dist/ bootstrap-$npm_package_version-dist && zip -qr9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && rm -rf bootstrap-$npm_package_version-dist\"",
-    "release-zip-examples": "node build/zip-examples.js",
+    "release-zip-examples": "node build/zip-examples.mjs",
     "dist": "npm-run-all --aggregate-output --parallel css js",
     "test": "npm-run-all lint dist js-test docs-build docs-lint",
     "netlify": "cross-env-shell HUGO_BASEURL=$DEPLOY_PRIME_URL npm-run-all dist release-sri docs-build",