62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | #!/usr/bin/env node
 | ||
|  | 
 | ||
|  | var fs = require('fs'); | ||
|  | var path = require('path'); | ||
|  | var execSync = require('child_process').execSync; | ||
|  | 
 | ||
|  | var $ = require('cheerio'); | ||
|  | var fromEntries = require('object.fromentries'); | ||
|  | 
 | ||
|  | if (process.argv.length !== 3) { | ||
|  | 	throw new RangeError('please provide a year'); | ||
|  | } | ||
|  | var year = parseInt(process.argv[2]); | ||
|  | if (year < 2016) { | ||
|  | 	throw new RangeError('ES2016+ only'); | ||
|  | } | ||
|  | var edition = year - 2009; | ||
|  | 
 | ||
|  | var specHTMLurl = new URL('https://raw.githubusercontent.com/tc39/ecma262/es' + year + '/spec.html'); | ||
|  | 
 | ||
|  | var specHTML = String(execSync('curl --silent ' + specHTMLurl)); | ||
|  | 
 | ||
|  | var root = $(specHTML); | ||
|  | 
 | ||
|  | var aOps = root.filter('[aoid]').add(root.find('[aoid]')); | ||
|  | 
 | ||
|  | var missings = []; | ||
|  | 
 | ||
|  | var entries = aOps.toArray().map(function (x) { | ||
|  |   var op = $(x); | ||
|  |   var aoid = op.attr('aoid'); | ||
|  |   var id = op.attr('id'); | ||
|  | 
 | ||
|  |   if (!id) { | ||
|  |     id = op.closest('[id]').attr('id'); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!id) { | ||
|  |     missings.push(aoid); | ||
|  |   } | ||
|  | 
 | ||
|  |   return [ | ||
|  |     aoid, | ||
|  |     'https://ecma-international.org/ecma-262/' + edition + '.0/#' + id | ||
|  |   ]; | ||
|  | }); | ||
|  | 
 | ||
|  | if (missings.length > 0) { | ||
|  |   console.error('Missing URLs:', missings); | ||
|  |   process.exit(1); | ||
|  | } | ||
|  | 
 | ||
|  | entries.sort(function (a, b) { return a[0].localeCompare(b[0]); }); | ||
|  | 
 | ||
|  | var obj = fromEntries(entries); | ||
|  | 
 | ||
|  | var outputPath = path.join('operations', year + '.js'); | ||
|  | fs.writeFileSync(outputPath, '\'use strict\';\n\nmodule.exports = ' + JSON.stringify(obj, null, '\t')+ ';\n'); | ||
|  | 
 | ||
|  | console.log('npx eslint --quiet --fix ' + outputPath); | ||
|  | execSync('npx eslint --quiet --fix ' + outputPath); |