microsoft/monaco-editor · error · Error

one parameter must be defined

Error message

one parameter must be defined

What it means

Thrown by the playground Source constructor when all three parameters (version, url, sourceLanguagesStr) are undefined. A Source must identify where to load Monaco from — either an npm version, a direct URL, or at minimum a languages-source string — so an all-undefined instance is meaningless and is rejected at construction. The static factories (useLatest, useLatestDev, parse) always supply at least one field; direct `new Source(undefined, undefined, undefined)` is the trigger.

Source

Thrown at website/src/website/pages/playground/Source.ts:55

	public equals(other: Source | undefined): boolean {
		if (!other) {
			return false;
		}
		return other.toString() === this.toString();
	}

	constructor(
		public readonly version: string | undefined,
		public readonly url: string | undefined,
		public readonly sourceLanguagesStr: string | undefined
	) {
		if (
			version === undefined &&
			url === undefined &&
			sourceLanguagesStr === undefined
		) {
			throw new Error("one parameter must be defined");
		}
	}

	sourceToString(): string | undefined {
		if (this.url) {
			return this.url;
		}
		if (this.version) {
			return `v${this.version}`;
		}
		return undefined;
	}

	sourceLanguagesToString(): string | undefined {
		return this.sourceLanguagesStr;
	}

	toString() {

View on GitHub (pinned to ca1b42dc89)

Solutions

  1. Provide at least one of version, url, or sourceLanguagesStr when constructing Source directly.
  2. Prefer the static factories: `Source.useLatest()` or `Source.useLatestDev()` which always set a field.
  3. If using Source.parse, ensure the input resolves to a known form ('latest', 'latest-dev', or 'vX.Y.Z'), or supply a non-empty sourceLanguagesStr as the fallback.
  4. Validate upstream (query params/settings) so that at least one source field reaches the constructor.

Example fix

// before
const source = new Source(undefined, undefined, undefined); // throws
// after
const source = Source.useLatest(); // version = monacoEditorVersion
// or
const source = new Source('0.34.0', undefined, undefined);
Defensive patterns

Strategy: type-guard

Validate before calling

function makeSource(version?: string, url?: string, langs?: string): Source {
  if (version === undefined && url === undefined && langs === undefined) {
    // fall back to a sensible default rather than constructing an invalid Source
    return Source.useLatest();
  }
  return new Source(version, url, langs);
}

Type guard

function hasAnySourceField(version: string | undefined, url: string | undefined, langs: string | undefined): boolean {
  return version !== undefined || url !== undefined || langs !== undefined;
}

Prevention

When it happens

Trigger: Constructing `new Source(undefined, undefined, undefined)` directly; a refactor that passes three optional values that all happen to be undefined; calling Source.parse with a sourceStr that is neither 'latest', 'latest-dev', nor a 'v'-prefixed version AND sourceLanguagesStr is also undefined (parse falls through to `new Source(undefined, sourceStr, ...)` where sourceStr is undefined).

Common situations: URL/playground query params missing the source and languageSource keys; a default-settings change that leaves both npmVersion and coreUrl unset; programmatic Source creation where the caller forgot to supply a value.

Related errors


AI-assisted analysis of microsoft/monaco-editor@ca1b42dc89 (2026-08-13). Data as JSON: /api/errors/9e54fbe0ac1569fc. Report an issue: GitHub.