{"record":{"id":"08a734d23724ad3c","repo":"parcel-bundler/parcel","slug":"invalidarg","errorCode":"InvalidArg","errorMessage":"Invalid mode","messagePattern":"Invalid mode","errorType":"exception","errorClass":"napi::Error","httpStatus":null,"severity":"error","filePath":"crates/node-bindings/src/resolver.rs","lineNumber":205,"sourceCode":"    };\n    #[cfg(target_arch = \"wasm32\")]\n    let fs = {\n      let fsjs = options.fs.unwrap();\n      Arc::new(JsFileSystem {\n        read: FunctionRef::new(env, fsjs.read)?,\n        kind: FunctionRef::new(env, fsjs.kind)?,\n        read_link: FunctionRef::new(env, fsjs.read_link)?,\n      })\n    };\n\n    let mut resolver = match options.mode {\n      1 => {\n        parcel_resolver::Resolver::parcel(Path::new(&project_root), parcel_resolver::Cache::new(fs))\n      }\n      2 => {\n        parcel_resolver::Resolver::node(Path::new(&project_root), parcel_resolver::Cache::new(fs))\n      }\n      _ => return Err(napi::Error::new(napi::Status::InvalidArg, \"Invalid mode\")),\n    };\n\n    if let Some(include_node_modules) = options.include_node_modules {\n      resolver.include_node_modules = Cow::Owned(match include_node_modules {\n        Either3::A(b) => IncludeNodeModules::Bool(b),\n        Either3::B(v) => IncludeNodeModules::Array(v),\n        Either3::C(v) => IncludeNodeModules::Map(v),\n      });\n    }\n\n    if let Some(conditions) = options.conditions {\n      resolver.conditions = ExportsCondition::from_bits_truncate(conditions);\n    }\n\n    if let Some(entries) = options.entries {\n      resolver.entries = Fields::from_bits_truncate(entries);\n    }\n","sourceCodeStart":187,"sourceCodeEnd":223,"githubUrl":"https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/crates/node-bindings/src/resolver.rs#L187-L223","documentation":"Thrown by the Resolver constructor when options.mode is not 1 or 2. Mode 1 creates a Parcel-style resolver (resolve::parcel), mode 2 a Node-style resolver (resolve::node). Any other value — including the default 0, null, undefined, or a string — is rejected before any resolution work begins. The error is sharp and immediate, so it is one of the easiest to diagnose.","triggerScenarios":"Constructing new Resolver(root, { mode }) where mode is 0, 3, a string '1', undefined, or omitted entirely. Also fires if the option is misnamed (e.g. resolverMode instead of mode) so mode stays at its default of 0.","commonSituations":"Migrating from an older Resolver API where mode defaulted differently; passing a string instead of a number from JSON config; typo in the option key; spreading a config object that does not include mode.","solutions":["Set mode to 1 for Parcel resolution semantics or 2 for Node resolution semantics.","Use a named constant to avoid magic numbers: const MODE = { PARCEL: 1, NODE: 2 }.","If loading options from JSON, coerce mode with Number(mode) and validate it is 1 or 2 before constructing.","Check for option-name typos against the JsResolverOptions struct (mode, not resolverMode)."],"exampleFix":"// before\nnew Resolver(root, { mode: 0 }); // throws InvalidArg: Invalid mode\n// or\nnew Resolver(root, {}); // mode defaults to 0 → throws\n\n// after\nconst RESOLVER_MODE = Object.freeze({ PARCEL: 1, NODE: 2 });\nnew Resolver(root, { mode: RESOLVER_MODE.PARCEL });","handlingStrategy":"validation","validationCode":"const VALID_MODES = new Set([1, 2]);\nfunction validateResolverMode(mode) {\n  const n = Number(mode);\n  if (!VALID_MODES.has(n)) {\n    throw new Error(`Resolver mode must be 1 (parcel) or 2 (node), got: ${mode}`);\n  }\n  return n;\n}\nconst safeMode = validateResolverMode(options.mode);\nnew Resolver(root, { ...options, mode: safeMode });","typeGuard":"function isValidResolverMode(mode) {\n  return mode === 1 || mode === 2;\n}","tryCatchPattern":null,"preventionTips":["Use a named constant (PARCEL=1, NODE=2) instead of magic numbers.","Validate mode immediately after loading config from JSON, where it may arrive as a string.","Keep the JsResolverOptions field name 'mode' in mind — typos like 'resolverMode' silently leave mode at 0.","Assert the Resolver construction in a unit test to catch config drift."],"tags":["resolver","configuration","invalid-arg","constructor"],"backgroundTag":null,"analyzedSha":"59484858a1a0bcbb71f74088956bb437a2db6505","analyzedAt":"2026-08-13T04:06:35.925Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}