{
  "version": {
    "category": "General",
    "description": "Prints just the compiler's version and exits.",
    "type": "b",
    "alias": "v"
  },
  "help": {
    "category": "General",
    "description": "Prints this message and exits.",
    "type": "b",
    "alias": "h"
  },
  "config": {
    "category": "General",
    "description": "Configuration file to apply. CLI arguments take precedence.",
    "type": "s",
    "cliOnly": true
  },
  "target": {
    "category": "General",
    "description": "Configuration file target to use. Defaults to 'release'.",
    "type": "s",
    "cliOnly": true
  },

  "optimize": {
    "category": "Optimization",
    "description": [
      "Optimizes the module. Typical shorthands are:",
      "",
      " Default optimizations   -O",
      " Make a release build    -O --noAssert",
      " Make a debug build      --debug",
      " Optimize for speed      -Ospeed",
      " Optimize for size       -Osize",
      ""
    ],
    "type": "b",
    "alias": "O"
  },
  "optimizeLevel": {
    "category": "Optimization",
    "description": "How much to focus on optimizing code. [0-3]",
    "type": "i"
  },
  "shrinkLevel": {
    "category": "Optimization",
    "description": "How much to focus on shrinking code size. [0-2, s=1, z=2]",
    "type": "i"
  },
  "converge": {
    "category": "Optimization",
    "description": "Re-optimizes until no further improvements can be made.",
    "type": "b",
    "default": false
  },
  "noAssert": {
    "category": "Optimization",
    "description": "Replaces assertions with just their value without trapping.",
    "type": "b",
    "default": false
  },

  "outFile": {
    "category": "Output",
    "description": "Specifies the WebAssembly output file (.wasm).",
    "type": "s",
    "alias": "o",
    "isPath": true
  },
  "textFile": {
    "category": "Output",
    "description": "Specifies the WebAssembly text output file (.wat).",
    "type": "s",
    "alias": "t",
    "isPath": true
  },
  "bindings": {
    "category": "Output",
    "description": [
      "Specifies the bindings to generate (.js + .d.ts).",
      "",
      "  esm  JavaScript bindings & typings for ESM integration.",
      "  raw  Like esm, but exports just the instantiate function.",
      "       Useful where modules are meant to be instantiated",
      "       multiple times or non-ESM imports must be provided."
    ],
    "type": "S",
    "alias": "b"
  },

  "sourceMap": {
    "category": "Debugging",
    "description": [
      "Enables source map generation. Optionally takes the URL",
      "used to reference the source map from the binary file."
    ],
    "type": "s"
  },
  "uncheckedBehavior": {
    "category": "Debugging",
    "description": [
      "Changes the behavior of unchecked() expressions.",
      "Using this option can potentially cause breakage.",
      "",
      "  default  The default behavior: unchecked operations are",
      "           only used inside of unchecked().",
      "  never    Unchecked operations are never used, even when",
      "           inside of unchecked().",
      "  always   Unchecked operations are always used if possible,",
      "           whether or not unchecked() is used."
    ],
    "type": "s",
    "default": "default"
  },
  "debug": {
    "category": "Debugging",
    "description": "Enables debug information in emitted binaries.",
    "type": "b",
    "default": false
  },

  "importMemory": {
    "category": "Features",
    "description": "Imports the memory from 'env.memory'.",
    "type": "b",
    "default": false
  },
  "noExportMemory": {
    "category": "Features",
    "description": "Does not export the memory as 'memory'.",
    "type": "b",
    "default": false
  },
  "initialMemory": {
    "category": "Features",
    "description": "Sets the initial memory size in pages.",
    "type": "i",
    "default": 0
  },
  "maximumMemory": {
    "category": "Features",
    "description": "Sets the maximum memory size in pages.",
    "type": "i",
    "default": 0
  },
  "sharedMemory": {
    "category": "Features",
    "description": "Declare memory as shared. Requires maximumMemory.",
    "type": "b",
    "default": false
  },
  "zeroFilledMemory": {
    "category": "Features",
    "description": "Assume imported memory is zeroed. Requires importMemory.",
    "type": "b",
    "default": false
  },
  "importTable": {
    "category": "Features",
    "description": "Imports the function table from 'env.table'.",
    "type": "b",
    "default": false
  },
  "exportTable": {
    "category": "Features",
    "description": "Exports the function table as 'table'.",
    "type": "b",
    "default": false
  },
  "exportStart": {
    "category": "Features",
    "description": [
      "Exports the start function using the specified name instead",
      "of calling it implicitly. Useful to obtain the exported memory",
      "before executing any code accessing it."
    ],
    "type": "s"
  },
  "runtime": {
    "category": "Features",
    "description": [
      "Specifies the runtime variant to include in the program.",
      "",
      " incremental  TLSF + incremental GC (default)",
      " minimal      TLSF + lightweight GC invoked externally",
      " stub         Minimal runtime stub (never frees)",
      " ...          Path to a custom runtime implementation",
      ""
    ],
    "type": "s",
    "default": "incremental"
  },
  "exportRuntime": {
    "category": "Features",
    "description": [
      "Always exports the runtime helpers (__new, __collect, __pin etc.).",
      "Automatically determined when generation of --bindings is enabled."
    ],
    "type": "b",
    "default": false
  },
  "stackSize": {
    "category": "Features",
    "description": [
      "Overrides the stack size. Only relevant for incremental GC",
      "or when using a custom runtime that requires stack space.",
      "Defaults to 0 without and to 32768 with incremental GC."
    ],
    "default": 0,
    "type": "i"
  },
  "enable": {
    "category": "Features",
    "description": [
      "Enables WebAssembly features being disabled by default.",
      "",
      " threads             Threading and atomic operations.",
      " simd                SIMD types and operations.",
      " reference-types     Reference types and operations.",
      " gc                  Garbage collection (WIP).",
      " stringref           String reference types.",
      " relaxed-simd        Relaxed SIMD operations.",
      ""
    ],
    "TODO_doesNothingYet": [
      " exception-handling  Exception handling.",
      " tail-calls          Tail call operations.",
      " multi-value         Multi value types.",
      " memory64            Memory64 operations.",
      " extended-const      Extended const expressions."
    ],
    "type": "S",
    "mutuallyExclusive": "disable"
  },
  "disable": {
    "category": "Features",
    "description": [
      "Disables WebAssembly features being enabled by default.",
      "",
      " mutable-globals     Mutable global imports and exports.",
      " sign-extension      Sign-extension operations",
      " nontrapping-f2i     Non-trapping float to integer ops.",
      " bulk-memory         Bulk memory operations.",
      ""
    ],
    "type": "S",
    "mutuallyExclusive": "enable"
  },
  "use": {
    "category": "Features",
    "description": [
      "Aliases a global object under another name, e.g., to switch",
      "the default 'Math' implementation used: --use Math=JSMath",
      "Can also be used to introduce an integer constant."
    ],
    "type": "S",
    "alias": "u"
  },
  "lowMemoryLimit": {
    "category": "Features",
    "description": "Enforces very low (<64k) memory constraints.",
    "default": 0,
    "type": "i"
  },

  "memoryBase": {
    "category": "Linking",
    "description": "Sets the start offset of emitted memory segments.",
    "type": "i",
    "default": 0
  },
  "tableBase": {
    "category": "Linking",
    "description": "Sets the start offset of emitted table elements.",
    "type": "i",
    "default": 0
  },

  "transform": {
    "category": "API",
    "description": "Specifies the path to a custom transform to load.",
    "type": "S",
    "isPath": true,
    "useNodeResolution": true
  },

  "trapMode": {
    "category": "Binaryen",
    "description": [
      "Sets the trap mode to use.",
      "",
      " allow  Allow trapping operations. This is the default.",
      " clamp  Replace trapping operations with clamping semantics.",
      " js     Replace trapping operations with JS semantics.",
      ""
    ],
    "type": "s",
    "default": "allow"
  },
  "runPasses": {
    "category": "Binaryen",
    "description": [
      "Specifies additional Binaryen passes to run after other",
      "optimizations, if any. See: Binaryen/src/passes/pass.cpp"
    ],
    "type": "s"
  },
  "noValidate": {
    "category": "Binaryen",
    "description": "Skips validating the module using Binaryen.",
    "type": "b",
    "default": false
  },

  "baseDir": {
    "description": "Specifies the base directory of input and output files.",
    "type": "s",
    "default": "."
  },
  "noColors": {
    "description": "Disables terminal colors.",
    "type": "b",
    "default": false
  },
  "noUnsafe": {
    "description": [
      "Disallows the use of unsafe features in user code.",
      "Does not affect library files and external modules."
    ],
    "type": "b",
    "default": false
  },
  "disableWarning": {
    "description": [
      "Disables warnings matching the given diagnostic code.",
      "If no diagnostic code is given, all warnings are disabled."
    ],
    "type": "I"
  },
  "noEmit": {
    "description": "Performs compilation as usual but does not emit code.",
    "type": "b",
    "default": false
  },
  "showConfig": {
    "description": "Print computed compiler options and exit.",
    "type": "b",
    "default": false
  },
  "stats": {
    "description": "Prints statistics on I/O and compile times.",
    "type": "b",
    "default": false
  },
  "pedantic": {
    "description": "Make yourself sad for no good reason.",
    "type": "b",
    "default": false
  },
  "lib": {
    "description": [
      "Adds one or multiple paths to custom library components and",
      "uses exports of all top-level files at this path as globals."
    ],
    "type": "S",
    "isPath": true
  },
  "path": {
    "description": [
      "Adds one or multiple paths to package resolution, similar",
      "to node_modules. Prefers an 'ascMain' entry in a package's",
      "package.json and falls back to an inner 'assembly/' folder."
    ],
    "type": "S",
    "isPath": true
  },
  "wasm": {
    "description": "Uses the specified Wasm binary of the compiler.",
    "type": "s"
  },
  " ...": {
    "description": "Specifies node.js options (CLI only). See: node --help"
  },
  "-Os": { "value": { "optimizeLevel": 0, "shrinkLevel": 1 } },
  "-Oz": { "value": { "optimizeLevel": 0, "shrinkLevel": 2 } },
  "-O0": { "value": { "optimizeLevel": 0, "shrinkLevel": 0 } },
  "-O1": { "value": { "optimizeLevel": 1, "shrinkLevel": 0 } },
  "-O2": { "value": { "optimizeLevel": 2, "shrinkLevel": 0 } },
  "-O3": { "value": { "optimizeLevel": 3, "shrinkLevel": 0 } },
  "-O0s": { "value": { "optimizeLevel": 0, "shrinkLevel": 1 } },
  "-O1s": { "value": { "optimizeLevel": 1, "shrinkLevel": 1 } },
  "-O2s": { "value": { "optimizeLevel": 2, "shrinkLevel": 1 } },
  "-O3s": { "value": { "optimizeLevel": 3, "shrinkLevel": 1 } },
  "-O0z": { "value": { "optimizeLevel": 0, "shrinkLevel": 2 } },
  "-O1z": { "value": { "optimizeLevel": 1, "shrinkLevel": 2 } },
  "-O2z": { "value": { "optimizeLevel": 2, "shrinkLevel": 2 } },
  "-O3z": { "value": { "optimizeLevel": 3, "shrinkLevel": 2 } },
  "-Ospeed": { "value": { "optimizeLevel": 3, "shrinkLevel": 0 } },
  "-Osize": { "value": { "optimizeLevel": 0, "shrinkLevel": 2, "converge": true } },
  "--measure": { "value": { "stats": true } }
}
