1. 'use strict';
    
  2. 
    
  3. const fs = require('fs');
    
  4. const path = require('path');
    
  5. const {execSync} = require('child_process');
    
  6. 
    
  7. async function main() {
    
  8.   const originalJSON = JSON.parse(
    
  9.     fs.readFileSync(path.resolve(__dirname, '../error-codes/codes.json'))
    
  10.   );
    
  11.   const existingMessages = new Set();
    
  12.   const codes = Object.keys(originalJSON);
    
  13.   let nextCode = 0;
    
  14.   for (let i = 0; i < codes.length; i++) {
    
  15.     const codeStr = codes[i];
    
  16.     const message = originalJSON[codeStr];
    
  17.     const code = parseInt(codeStr, 10);
    
  18.     existingMessages.add(message);
    
  19.     if (code >= nextCode) {
    
  20.       nextCode = code + 1;
    
  21.     }
    
  22.   }
    
  23. 
    
  24.   console.log('Searching `build` directory for unminified errors...\n');
    
  25. 
    
  26.   let out;
    
  27.   try {
    
  28.     out = execSync(
    
  29.       "git --no-pager grep -n --untracked --no-exclude-standard '/*! <expected-error-format>' -- build"
    
  30.     ).toString();
    
  31.   } catch (e) {
    
  32.     if (e.status === 1 && e.stdout.toString() === '') {
    
  33.       // No unminified errors found.
    
  34.       return;
    
  35.     }
    
  36.     throw e;
    
  37.   }
    
  38. 
    
  39.   let newJSON = null;
    
  40.   const regex = /\<expected-error-format\>"(.+?)"\<\/expected-error-format\>/g;
    
  41.   do {
    
  42.     const match = regex.exec(out);
    
  43.     if (match === null) {
    
  44.       break;
    
  45.     } else {
    
  46.       const message = match[1].trim();
    
  47.       if (existingMessages.has(message)) {
    
  48.         // This probably means you ran the script twice.
    
  49.         continue;
    
  50.       }
    
  51.       existingMessages.add(message);
    
  52. 
    
  53.       // Add to json map
    
  54.       if (newJSON === null) {
    
  55.         newJSON = Object.assign({}, originalJSON);
    
  56.       }
    
  57.       console.log(`"${nextCode}": "${message}"`);
    
  58.       newJSON[nextCode] = message;
    
  59.       nextCode += 1;
    
  60.     }
    
  61.   } while (true);
    
  62. 
    
  63.   if (newJSON) {
    
  64.     fs.writeFileSync(
    
  65.       path.resolve(__dirname, '../error-codes/codes.json'),
    
  66.       JSON.stringify(newJSON, null, 2)
    
  67.     );
    
  68.   }
    
  69. }
    
  70. 
    
  71. main().catch(error => {
    
  72.   console.error(error);
    
  73.   process.exit(1);
    
  74. });