#!/usr/bin/env node // Copyright 2018 The Emscripten Authors. All rights reserved. // Emscripten is available under two separate licenses, the MIT license and the // University of Illinois/NCSA Open Source License. Both these licenses can be // found in the LICENSE file. // // Preprocessor tool. This is a wrapper for the 'preprocess' function which // allows it to be called as a standalone tool. // // Parameters: // setting file. Can specify 'settings.js' here, alternatively create a temp // file with modified settings and supply the filename here. // input file This is the file that will be processed by the preprocessor import assert from 'node:assert'; import {parseArgs} from 'node:util'; import {readFile, loadDefaultSettings, applySettings} from '../src/utility.mjs'; const options = { 'expand-macros': {type: 'boolean'}, help: {type: 'boolean', short: 'h'}, }; const {values, positionals} = parseArgs({options, allowPositionals: true}); if (values.help) { console.log(`\ Run JS preprocessor / macro processor on an input file Usage: preprocessor.mjs [--expand-macros]`); process.exit(0); } loadDefaultSettings(); assert(positionals.length == 2, 'Script requires 2 arguments'); // Load settings from JSON passed on the command line let settingsFile = positionals[0]; assert(settingsFile, 'settings file not specified'); if (settingsFile == '-') { // Read settings json from stdin (FD 0) settingsFile = 0; } const userSettings = JSON.parse(readFile(settingsFile)); applySettings(userSettings); const inputFile = positionals[1]; // We can't use static import statements here because several of these // file depend on having the settings defined in the global scope (which // we do dynamically above. const parseTools = await import('../src/parseTools.mjs'); await import('../src/modules.mjs'); let output = parseTools.preprocess(inputFile); if (values['expand-macros']) { output = parseTools.processMacros(output, inputFile); } process.stdout.write(output);