sveltejs/kit · error · Error

Failed to locate provided tsconfig or jsconfig

Error message

Failed to locate provided tsconfig or jsconfig

What it means

When the tsconfig path is explicitly provided (via options), `load_tsconfig` walks up from the filename looking for tsconfig.json/jsconfig.json and throws this error if the explicitly provided location contains no such config file.

Solutions

  1. Fix the provided path so it points at the directory (or file) containing tsconfig.json/jsconfig.json.
  2. Verify the file exists at the given path: `ls <path>/tsconfig.json`.
  3. Omit the tsconfig option to let the packager auto-discover it from the project root.

Example fix

// before
svelte-package --tsconfig ./configs

// after
svelte-package --tsconfig ./configs/tsconfig.json
Defensive patterns

Strategy: validation

Validate before calling

import fs from 'node:fs';
const p = './configs';
if (!fs.existsSync(`${p}/tsconfig.json`) && !fs.existsSync(`${p}/jsconfig.json`)) {
  throw new Error(`no tsconfig/jsconfig at ${p}`);
}

Try / catch

try {
  await run(['svelte-package', '--tsconfig', './configs']);
} catch (e) {
  if (String(e.message).includes('Failed to locate provided tsconfig')) {
    throw new Error('Point --tsconfig at the directory containing tsconfig.json');
  }
  throw e;
}

Prevention

When it happens

Trigger: Passing a `tsconfig` option/flag to svelte-package pointing at a directory or file where no tsconfig.json or jsconfig.json actually exists.

Common situations: Typo in the `--tsconfig` flag value; pointing at the tsconfig's output directory rather than its location; config moved/renamed but packaging options not updated.

Related errors


AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02). Data as JSON: /api/errors/d790c95063f195cd. Report an issue: GitHub.

Appendix: source

Thrown at packages/package/src/typescript.js:250

	}

	let config_filename;
	/** @type {string[]} */
	const traversed_dirs = [];

	if (tsconfig) {
		if (fs.existsSync(tsconfig)) {
			config_filename = tsconfig;

			const cached = cache.get(config_filename);
			if (cached) {
				return cached;
			} else {
				// This isn't really a dir, but it simplifies the caching logic
				traversed_dirs.push(config_filename);
			}
		} else {
			throw new Error('Failed to locate provided tsconfig or jsconfig');
		}
	} else {
		// ts.findConfigFile is broken (it will favour a distant tsconfig
		// over a near jsconfig, and then only when you call it twice)
		// so we implement it ourselves
		let dir = filename;
		while (dir !== (dir = path.dirname(dir))) {
			const cached = cache.get(dir);
			if (cached) {
				for (const traversed of traversed_dirs) {
					cache.set(traversed, cached);
				}
				return cached;
			}

			traversed_dirs.push(dir);

			const tsconfig = path.join(dir, 'tsconfig.json');

View on GitHub (pinned to 03f1687fe6)