~~ quoteProps: consistent ~~
== should add quotes when necessary ==
const objectLiteral = {
    "foo bar": true,
    "foo\nbar": true,
    "1foo": true,
    "💩": true,
    "a💩": true,
    "c\d": true,
    "1": true,
    "1foo"() {},
    get "2foo"() {},
    set "2foo"(v) {},
    async "3foo"() {},
    other: 1,
};
class Class {
    "1foo"() {}
    get "1foo"() {}
    set "1foo"() {}
    async "3foo"() {}
    "4foo": string;
    "1" = true;
    other = 1;
}
interface Interface {
    "1foo": string;
    "2foo"(): string;
    get "3foo"(): string;
    set "3foo"(v: string);
    other: number;
}
type Type = {
    "1foo": string;
    "2foo"(): string;
    get "3foo"(): string;
    set "3foo"(v: string);
    other: number;
};

[expect]
const objectLiteral = {
    "foo bar": true,
    "foo\nbar": true,
    "1foo": true,
    "💩": true,
    "a💩": true,
    "c\d": true,
    "1": true,
    "1foo"() {},
    get "2foo"() {},
    set "2foo"(v) {},
    async "3foo"() {},
    "other": 1,
};
class Class {
    "1foo"() {}
    get "1foo"() {}
    set "1foo"() {}
    async "3foo"() {}
    "4foo": string;
    "1" = true;
    other = 1;
}
interface Interface {
    "1foo": string;
    "2foo"(): string;
    get "3foo"(): string;
    set "3foo"(v: string);
    "other": number;
}
type Type = {
    "1foo": string;
    "2foo"(): string;
    get "3foo"(): string;
    set "3foo"(v: string);
    "other": number;
};

== should remove quotes when none need them ==
const objectLiteral = {
    "foo": true,
    "$": true,
    "_": true,
    "_1": true,
    'foo': true,
    '$': true,
    '_': true,
    '_1': true,
    'é': true,
    "foo"() {},
    "c\d": true,
    get "foo2"() {},
    set "foo2"(v) {},
    async "foo3"() {},
    "test": "literal",
};
class Class {
    "foo"() {}
    get "foo2"() {}
    set "foo2"() {}
    async "foo3"() {}
    "foo4": string;
    "test": "literal" = "literal";
}
interface Interface {
    "foo": string;
    "foo2"(): string;
    get "foo3"(): string;
    set "foo3"(v: string);
    "foo4": "literal";
}
type Type = {
    "foo": string;
    "foo2"(): string;
    get "foo3"(): string;
    set "foo3"(v: string);
    "foo4": "literal";
};

[expect]
const objectLiteral = {
    foo: true,
    $: true,
    _: true,
    _1: true,
    foo: true,
    $: true,
    _: true,
    _1: true,
    é: true,
    foo() {},
    cd: true,
    get foo2() {},
    set foo2(v) {},
    async foo3() {},
    test: "literal",
};
class Class {
    foo() {}
    get foo2() {}
    set foo2() {}
    async foo3() {}
    "foo4": string;
    "test": "literal" = "literal";
}
interface Interface {
    foo: string;
    foo2(): string;
    get foo3(): string;
    set foo3(v: string);
    foo4: "literal";
}
type Type = {
    foo: string;
    foo2(): string;
    get foo3(): string;
    set foo3(v: string);
    foo4: "literal";
};

== should not remove in this scenario ==
const x = {
    "/src/shared/tsconfig-base.json": JSON.stringify({
        include: ["./typings-base/"],
    }),
    "/src/shared/index.ts": `export const a: Unrestricted = 1;`,
}

[expect]
const x = {
    "/src/shared/tsconfig-base.json": JSON.stringify({
        include: ["./typings-base/"],
    }),
    "/src/shared/index.ts": `export const a: Unrestricted = 1;`,
};

== should add quotes for this ==
const objectLiteral = {
    "\uD800": true,
    test: 1,
};

[expect]
const objectLiteral = {
    "\uD800": true,
    "test": 1,
};
