UNPKG

@fastly/js-compute

Version:

JavaScript SDK and CLI for building JavaScript applications on [Fastly Compute](https://www.fastly.com/products/edge-compute/serverless).

263 lines (262 loc) 9.56 kB
import { fileURLToPath } from 'node:url'; import { dirname, join, isAbsolute } from 'node:path'; import { tooManyEngines, unknownArgument } from './printHelp.js'; import { EnvParser } from './env.js'; export async function parseInputs(cliInputs) { const __dirname = dirname(fileURLToPath(import.meta.url)); let enableHttpCache = false; let enableExperimentalHighResolutionTimeMethods = false; let enableAOT = false; let customEngineSet = false; let moduleMode = false; let bundle = true; let wasmEngine = join(__dirname, '../fastly.wasm'); let aotCache = join(__dirname, '../fastly-ics.wevalcache'); let customInputSet = false; let input = join(process.cwd(), 'bin/index.js'); let customOutputSet = false; let output = join(process.cwd(), 'bin/main.wasm'); let enableStackTraces = false; let excludeSources = false; let debugIntermediateFilesDir = undefined; let wevalBin = undefined; let cliInput; const envParser = new EnvParser(); loop: while ((cliInput = cliInputs.shift())) { switch (cliInput) { case '--': { break loop; } case '--env': { let value = cliInputs.shift(); if (!value) { console.error('Error: --env requires a KEY=VALUE pair'); process.exit(1); } // If value ends with comma, it's a continuation while (value.endsWith(',') && cliInputs.length > 0 && !cliInputs[0].startsWith('-')) { value = value + cliInputs.shift(); } envParser.parse(value); break; } case '--enable-experimental-high-resolution-time-methods': { enableExperimentalHighResolutionTimeMethods = true; break; } case '--module-mode': { moduleMode = true; bundle = false; break; } case '--enable-http-cache': { enableHttpCache = true; break; } case '--enable-experimental-top-level-await': { moduleMode = true; bundle = true; break; } case '--enable-aot': { enableAOT = true; break; } case '--enable-experimental-aot': { console.error('Warning: --enable-experimental-aot flag is now --enable-aot. The old flag continues\n' + 'to work for now, but please update your build invocation!'); enableAOT = true; break; } case '-V': case '--version': { return 'version'; } case '-h': case '--help': { return 'help'; } case '--starlingmonkey': { break; } case '--debug-build': { wasmEngine = join(__dirname, '../fastly.debug.wasm'); console.log('Building with the debug engine'); break; } case '--disable-starlingmonkey': { console.error('The legacy js-compute-runtime.wasm engine requires an older version of the JS SDK'); process.exit(1); } case '--engine-wasm': { if (customEngineSet) { tooManyEngines(); } const value = cliInputs.shift(); if (value == null) { console.error('Error: --engine-wasm requires a value'); process.exit(1); } customEngineSet = true; if (isAbsolute(value)) { wasmEngine = value; } else { wasmEngine = join(process.cwd(), value); } break; } case '--weval-bin': { const value = cliInputs.shift(); if (value == null) { console.error('Error: --weval-bin requires a value'); process.exit(1); } if (isAbsolute(value)) { wevalBin = value; } else { wevalBin = join(process.cwd(), value); } break; } case '--aot-cache': { const value = cliInputs.shift(); if (value == null) { console.error('Error: --aot-cache requires a value'); process.exit(1); } if (isAbsolute(value)) { aotCache = value; } else { aotCache = join(process.cwd(), value); } break; } case '--enable-stack-traces': { enableStackTraces = true; break; } case '--exclude-sources': { excludeSources = true; break; } case '--debug-intermediate-files': { const value = cliInputs.shift(); if (value == null) { console.error('Error: --debug-intermediate-files requires a value'); process.exit(1); } if (isAbsolute(value)) { debugIntermediateFilesDir = value; } else { debugIntermediateFilesDir = join(process.cwd(), value); } break; } default: { if (cliInput.startsWith('--engine-wasm=')) { if (customEngineSet) { tooManyEngines(); } const value = cliInput.replace(/--engine-wasm=+/, ''); customEngineSet = true; if (isAbsolute(value)) { wasmEngine = value; } else { wasmEngine = join(process.cwd(), value); } break; } else if (cliInput.startsWith('--env=')) { const value = cliInput.replace(/--env=/, ''); envParser.parse(value); break; } else if (cliInput.startsWith('--weval-bin=')) { const value = cliInput.replace(/--weval-bin=/, ''); if (isAbsolute(value)) { wevalBin = value; } else { wevalBin = join(process.cwd(), value); } break; } else if (cliInput.startsWith('--aot-cache=')) { const value = cliInput.replace(/--aot-cache=/, ''); if (isAbsolute(value)) { aotCache = value; } else { aotCache = join(process.cwd(), value); } break; } else if (cliInput.startsWith('--debug-intermediate-files=')) { const value = cliInput.replace(/--debug-intermediate-files=/, ''); if (isAbsolute(value)) { debugIntermediateFilesDir = value; } else { debugIntermediateFilesDir = join(process.cwd(), value); } break; } else if (cliInput.startsWith('-')) { unknownArgument(cliInput); } else { if (!customInputSet) { customInputSet = true; if (isAbsolute(cliInput)) { input = cliInput; } else { input = join(process.cwd(), cliInput); } } else if (!customOutputSet) { customOutputSet = true; if (isAbsolute(cliInput)) { output = cliInput; } else { output = join(process.cwd(), cliInput); } } else { unknownArgument(cliInput); } } } } } if (!customEngineSet && enableAOT) { wasmEngine = join(__dirname, '../fastly-weval.wasm'); } if (wevalBin && !enableAOT) { console.error('Warning: --weval-bin has no effect without --enable-aot, as weval is only used for AOT compilation'); } return { enableExperimentalHighResolutionTimeMethods, enableHttpCache, moduleMode, bundle, enableAOT, aotCache, enableStackTraces, excludeSources, debugIntermediateFilesDir, input, output, wasmEngine, wevalBin, env: envParser.getEnv(), }; }