Procházet zdrojové kódy

Merge pull request #6258 from overleaf/bg-improve-routes-tool

[web] format output from bin/routes using escodegen

GitOrigin-RevId: a2a3d4ffb044dfb214d167c411dd1b55fa18a3dd
June Kelly před 4 roky
rodič
revize
864d2bdeff
3 změnil soubory, kde provedl 33 přidání a 29 odebrání
  1. 18 16
      services/web/bin/routes
  2. 11 11
      services/web/package-lock.json
  3. 4 2
      services/web/package.json

+ 18 - 16
services/web/bin/routes

@@ -5,7 +5,8 @@ const acornWalk = require('acorn-walk')
 const fs = require('fs')
 const _ = require('lodash')
 const glob = require('glob')
-print = console.log
+const escodegen = require('escodegen')
+const print = console.log
 
 const Methods = new Set([
   'get',
@@ -16,7 +17,7 @@ const Methods = new Set([
   'connect',
   'options',
   'trace',
-  'patch'
+  'patch',
 ])
 
 const isMethod = str => {
@@ -32,14 +33,15 @@ const routerCall = callExpression => {
     return false
   }
   const routerName = callee.object.name
-  if ( // Match known names for the Express routers: app, webRouter, whateverRouter, etc...
+  if (
+    // Match known names for the Express routers: app, webRouter, whateverRouter, etc...
     isMethod(property.name) &&
     (routerName === 'app' || routerName.match('^.*[rR]outer$'))
   ) {
     return {
       routerName: routerName,
       method: property.name,
-      args: args
+      args: args,
     }
   } else {
     return null
@@ -47,10 +49,7 @@ const routerCall = callExpression => {
 }
 
 const formatMethodCall = expression => {
-  if (!expression.object || !expression.property) {
-    return '????'
-  }
-  return `${expression.object.name}.${expression.property.name}`
+  return escodegen.generate(expression, { format: { compact: true } })
 }
 
 const parseAndPrintRoutesSync = path => {
@@ -62,12 +61,11 @@ const parseAndPrintRoutesSync = path => {
       const call = routerCall(node)
       if (call) {
         const firstArg = _.first(call.args)
-        const lastArg = _.last(call.args)
         try {
           print(
             `  ${formatRouterName(call.routerName)}\t .${call.method} \t: ${
               firstArg.value
-            } => ${formatMethodCall(lastArg)}`
+            } => ${call.args.slice(1).map(formatMethodCall).join(' => ')}`
           )
         } catch (e) {
           print('>> Error')
@@ -76,15 +74,15 @@ const parseAndPrintRoutesSync = path => {
           process.exit(1)
         }
       }
-    }
+    },
   })
 }
 
 const routerNameMapping = {
-  'privateApiRouter': 'privateApi',
-  'publicApiRouter': 'publicApi'
+  privateApiRouter: 'privateApi',
+  publicApiRouter: 'publicApi',
 }
-const formatRouterName = (name) => {
+const formatRouterName = name => {
   return routerNameMapping[name] || name
 }
 
@@ -92,7 +90,7 @@ const main = () => {
   // Take an optional filter to apply to file names
   const filter = process.argv[2] || null
 
-  if (filter && (filter === '--help' || filter == 'help')) {
+  if (filter && (filter === '--help' || filter === 'help')) {
     print('')
     print('  Usage: bin/routes [filter]')
     print('  Examples:')
@@ -104,7 +102,11 @@ const main = () => {
 
   // Find all routers
   glob('*[rR]outer.js', { matchBase: true }, (err, files) => {
-    for (file of files) {
+    if (err) {
+      console.error(err)
+      process.exit(1)
+    }
+    for (const file of files) {
       if (file.match('^node_modules.*$') || file.match('.*/public/.*')) {
         continue
       }

+ 11 - 11
services/web/package-lock.json

@@ -18859,9 +18859,9 @@
       },
       "dependencies": {
         "estraverse": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
           "dev": true
         },
         "source-map": {
@@ -26506,7 +26506,7 @@
     "levn": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
       "dev": true,
       "requires": {
         "prelude-ls": "~1.1.2",
@@ -29917,17 +29917,17 @@
       "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA=="
     },
     "optionator": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
-      "integrity": "sha512-oCOQ8AIC2ciLy/sE2ehafRBleBgDLvzGhBRRev87sP7ovnbvQfqpc3XFI0DhHey2OfVoNV91W+GPC6B3540/5Q==",
+      "version": "0.8.3",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
       "dev": true,
       "requires": {
         "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.4",
+        "fast-levenshtein": "~2.0.6",
         "levn": "~0.3.0",
         "prelude-ls": "~1.1.2",
         "type-check": "~0.3.2",
-        "wordwrap": "~1.0.0"
+        "word-wrap": "~1.2.3"
       }
     },
     "ordered-read-streams": {
@@ -31645,7 +31645,7 @@
     "prelude-ls": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
       "dev": true
     },
     "prepend-http": {
@@ -38050,7 +38050,7 @@
     "type-check": {
       "version": "0.3.2",
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
       "dev": true,
       "requires": {
         "prelude-ls": "~1.1.2"

+ 4 - 2
services/web/package.json

@@ -34,7 +34,8 @@
     "lint:fix": "eslint --fix .",
     "extract-translations": "i18next-scanner",
     "migrations": "east",
-    "storybook": "start-storybook -p 6006 -s ./public"
+    "storybook": "start-storybook -p 6006 -s ./public",
+    "routes": "bin/routes"
   },
   "browserslist": [
     "last 1 year",
@@ -226,6 +227,7 @@
     "copy-webpack-plugin": "^5.1.1",
     "css-loader": "^3.5.2",
     "es6-promise": "^4.2.8",
+    "escodegen": "^2.0.0",
     "eslint": "^8.2.0",
     "eslint-config-prettier": "^8.3.0",
     "eslint-config-standard": "^16.0.3",
@@ -288,4 +290,4 @@
     "webpack-merge": "^4.2.2",
     "worker-loader": "^2.0.0"
   }
-}
+}