ソースを参照

tools: remove use of `promisify` where possible (#3010)

* tools: remove use of `promisify` where possible

Remove use of `promisify` when a native promise API is available.

* website: fix minify build

It seems that `tinyify` doesn't support some modern ES features,
replacing it with `terser`.

* website: fix highlight script

`Prism` needs to be a global variable now it seems...
Antoine du Hamel 3 年 前
コミット
c1859e528a

+ 1 - 5
bin/after-version-bump.js

@@ -15,13 +15,9 @@
 
 const lastCommitMessage = require('last-commit-message')
 const { spawn } = require('child_process')
-const { promisify } = require('util')
+const { readFile, writeFile } = require('fs/promises')
 const once = require('events.once')
 const globby = require('globby')
-const fs = require('fs')
-
-const readFile = promisify(fs.readFile)
-const writeFile = promisify(fs.writeFile)
 
 async function replaceInFile (filename, replacements) {
   let content = await readFile(filename, 'utf8')

+ 2 - 4
bin/upload-to-cdn.js

@@ -22,16 +22,14 @@
 //  - Kevin van Zonneveld <kevin@transloadit.com>
 
 const path = require('path')
-const { pipeline } = require('stream/promises')
+const { pipeline, finished } = require('stream/promises')
+const { readFile } = require('fs/promises')
 const AWS = require('aws-sdk')
 const packlist = require('npm-packlist')
 const tar = require('tar')
 const pacote = require('pacote')
 const concat = require('concat-stream')
 const mime = require('mime-types')
-const { promisify } = require('util')
-const readFile = promisify(require('fs').readFile)
-const finished = promisify(require('stream').finished)
 const AdmZip = require('adm-zip')
 
 function delay (ms) {

+ 8 - 62
package-lock.json

@@ -1280,18 +1280,6 @@
         "@xtuc/long": "4.2.2"
       }
     },
-    "node_modules/@angular-devkit/build-angular/node_modules/acorn": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
-      "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/@angular-devkit/build-angular/node_modules/commander": {
       "version": "2.20.3",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -15208,18 +15196,6 @@
         "@xtuc/long": "4.2.2"
       }
     },
-    "node_modules/@types/webpack/node_modules/acorn": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
-      "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/@types/webpack/node_modules/enhanced-resolve": {
       "version": "5.8.2",
       "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz",
@@ -19971,9 +19947,9 @@
       }
     },
     "node_modules/acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "version": "8.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
+      "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -42805,18 +42781,6 @@
         }
       }
     },
-    "node_modules/jsdom/node_modules/acorn": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
-      "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/jsesc": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -78010,6 +77974,7 @@
         "postcss-inline-svg": "^3.1.1",
         "prismjs": "^1.17.1",
         "sass": "^1.29.0",
+        "terser": "^5.7.0",
         "touch": "3.1.0",
         "watchify": "^4.0.0"
       }
@@ -79162,12 +79127,6 @@
             "@xtuc/long": "4.2.2"
           }
         },
-        "acorn": {
-          "version": "8.4.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
-          "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
-          "dev": true
-        },
         "commander": {
           "version": "2.20.3",
           "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -89863,12 +89822,6 @@
             "@xtuc/long": "4.2.2"
           }
         },
-        "acorn": {
-          "version": "8.4.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
-          "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
-          "dev": true
-        },
         "enhanced-resolve": {
           "version": "5.8.2",
           "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz",
@@ -95076,9 +95029,9 @@
       }
     },
     "acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+      "version": "8.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
+      "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA=="
     },
     "acorn-globals": {
       "version": "6.0.0",
@@ -113648,14 +113601,6 @@
         "whatwg-url": "^8.5.0",
         "ws": "^7.4.5",
         "xml-name-validator": "^3.0.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "8.4.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
-          "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
-          "dev": true
-        }
       }
     },
     "jsesc": {
@@ -137364,6 +137309,7 @@
         "postcss-inline-svg": "^3.1.1",
         "prismjs": "^1.17.1",
         "sass": "^1.29.0",
+        "terser": "^5.7.0",
         "touch": "3.1.0",
         "watchify": "^4.0.0"
       },

+ 34 - 25
website/inject.js

@@ -1,7 +1,8 @@
 const fs = require('fs')
 const path = require('path')
 const chalk = require('chalk')
-const { exec } = require('child_process')
+const { spawn } = require('child_process')
+const readline = require('readline')
 const YAML = require('js-yaml')
 const { promisify } = require('util')
 const gzipSize = require('gzip-size')
@@ -9,6 +10,7 @@ const prettierBytes = require('@transloadit/prettier-bytes')
 const browserify = require('browserify')
 const touch = require('touch')
 const glob = require('glob')
+const { minify } = require('terser')
 
 const webRoot = __dirname
 const uppyRoot = path.join(__dirname, '../packages/uppy')
@@ -80,7 +82,7 @@ async function getMinifiedSize (pkg, name) {
   const b = browserify(pkg)
 
   const packageJSON = fs.readFileSync(path.join(pkg, 'package.json'))
-  const version = JSON.parse(packageJSON).version
+  const { version } = JSON.parse(packageJSON)
 
   if (name !== '@uppy/core' && name !== 'uppy') {
     b.exclude('@uppy/core')
@@ -90,9 +92,8 @@ async function getMinifiedSize (pkg, name) {
   if (excludes[name]) {
     b.exclude(excludes[name])
   }
-  b.plugin('tinyify')
 
-  const bundle = await promisify(b.bundle).call(b)
+  const { code:bundle } = await promisify(b.bundle).call(b).then(buf => minify(buf.toString(), { toplevel: true }))
   const gzipped = await gzipSize(bundle)
 
   return {
@@ -104,7 +105,7 @@ async function getMinifiedSize (pkg, name) {
 
 async function injectSizes (config) {
   console.info(chalk.grey('Generating bundle sizes…'))
-  const padTarget = packages.reduce((max, cur) => Math.max(max, cur.length), 0) + 2
+  const padTarget = Math.max(...packages.map((cur) => cur.length)) + 2
 
   const sizesPromise = Promise.all(
     packages.map(async (pkg) => {
@@ -115,35 +116,43 @@ async function injectSizes (config) {
           `${prettierBytes(result.minified)} min`.padEnd(10)
         } / ${prettierBytes(result.gzipped)} gz`
       ))
-      return Object.assign(result, {
+      return [pkg, {
+        ...result,
         prettyMinified: prettierBytes(result.minified),
         prettyGzipped: prettierBytes(result.gzipped),
-      })
-    })
-  ).then((list) => {
-    const map = {}
-    list.forEach((size, i) => {
-      map[packages[i]] = size
+      }]
     })
-    return map
-  })
+  ).then(Object.fromEntries)
 
   config.uppy_bundle_kb_sizes = await sizesPromise
 }
 
+const sourceUppy = path.join(webRoot, '/themes/uppy/source/uppy/')
+const sourceUppyLocales = path.join(sourceUppy, 'locales')
 async function injectBundles () {
+  await Promise.all([
+    fs.promises.mkdir(sourceUppy, { recursive:true }),
+    fs.promises.mkdir(sourceUppyLocales, { recursive:true }),
+  ])
   const cmds = [
-    `mkdir -p ${path.join(webRoot, '/themes/uppy/source/uppy')}`,
-    `mkdir -p ${path.join(webRoot, '/themes/uppy/source/uppy/locales')}`,
-    `cp -vfR ${path.join(uppyRoot, '/dist/*')} ${path.join(webRoot, '/themes/uppy/source/uppy/')}`,
-    `cp -vfR ${path.join(robodogRoot, '/dist/*')} ${path.join(webRoot, '/themes/uppy/source/uppy/')}`,
-    `cp -vfR ${path.join(localesRoot, '/dist/*')} ${path.join(webRoot, '/themes/uppy/source/uppy/locales')}`,
+    `cp -vfR ${path.join(uppyRoot, '/dist/*')} ${sourceUppy}`,
+    `cp -vfR ${path.join(robodogRoot, '/dist/*')} ${sourceUppy}`,
+    `cp -vfR ${path.join(localesRoot, '/dist/*')} ${sourceUppyLocales}`,
   ].join(' && ')
 
-  const { stdout } = await promisify(exec)(cmds)
-  stdout.trim().split('\n').forEach((line) => {
-    console.info(chalk.green('✓ injected: '), chalk.grey(line))
-  })
+  const cp = spawn(cmds, { stdio:['ignore', 'pipe', 'inherit'], shell: true })
+  await Promise.race([
+    new Promise((resolve, reject) => cp.on('error', reject)),
+    (async () => {
+      const stdout = readline.createInterface({
+        input: cp.stdout,
+      })
+
+      for await (const line of stdout) {
+        console.info(chalk.green('✓ injected: '), chalk.grey(line))
+      }
+    })(),
+  ])
 }
 
 // re-enable after rate limiter issue is fixed
@@ -233,7 +242,7 @@ function injectLocaleList () {
 
 async function readConfig () {
   try {
-    const buf = await promisify(fs.readFile)(configPath, 'utf8')
+    const buf = await fs.promises.readFile(configPath, 'utf8')
     return YAML.safeLoad(buf)
   } catch (err) {
     return {}
@@ -254,7 +263,7 @@ async function inject () {
   await injectSizes(config)
 
   const saveConfig = { ...defaultConfig, ...config }
-  await promisify(fs.writeFile)(configPath, YAML.safeDump(saveConfig), 'utf-8')
+  await fs.promises.writeFile(configPath, YAML.safeDump(saveConfig), 'utf-8')
   console.info(chalk.green('✓ rewritten: '), chalk.grey(configPath))
 
   try {

+ 1 - 0
website/package.json

@@ -44,6 +44,7 @@
     "postcss-inline-svg": "^3.1.1",
     "prismjs": "^1.17.1",
     "sass": "^1.29.0",
+    "terser": "^5.7.0",
     "touch": "3.1.0",
     "watchify": "^4.0.0"
   },

+ 1 - 4
website/scripts/highlight.js

@@ -1,8 +1,7 @@
 /* global hexo */
 const Prism = require('prismjs')
 const entities = require('he')
-const { promisify } = require('util')
-const readFile = promisify(require('fs').readFile)
+const { readFile } = require('fs/promises')
 const path = require('path')
 
 // oof
@@ -12,8 +11,6 @@ global.Prism = Prism
 // the / is needed to force it to resolve to the directory
 require('prismjs/components/')()
 
-delete global.Prism
-
 const unhighlightedCodeRx = /<pre><code class="([^"]*)?">([\s\S]*?)<\/code><\/pre>/igm
 
 function highlight (lang, code) {