Skip to content

ts-morph mutates the defaultCompilerOptions object passed to Project constructor #1627

@gregjacobs

Description

@gregjacobs

Describe the bug

This is a subtle one, but bit me and took me a while to debug because I have a shared defaultCompilerOptions object that is used to instantiate multiple ts-morph Project instances.

Because this object is mutated when a Project is created, it ends up taking along the lib and configFilePath settings on to the next Project instance that is created. I was noticing that my second instance was "inheriting" the tsconfig settings from the first instance when the second instance doesn't configure a tsconfig.json file of its own.

Version: 25.0.1

To Reproduce

import { Project, ts } from "ts-morph";

const defaultCompilerOptions = {
    jsx: ts.JsxEmit.React,
};

new Project({
    defaultCompilerOptions,
});

console.log(defaultCompilerOptions);
// {
//     jsx: 4,
//     lib: ['lib.dom.d.ts', 'lib.es2020.d.ts'],
//     configFilePath: 'path/to/tsconfig.json'
// }

Expected behavior

Object is not mutated.

I can work around this of course by always making a copy of the defaultCompilerOptions object, but figured I'd mention and save someone else from a little debugging time :)

Best,
Greg

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions