import { code, namekey, Output } from "@alloy-js/core"; import { expect, it } from "vitest"; import * as ts from "../src/index.js"; import { decl, declMember, declType } from "../src/symbols/index.js"; it("declares variables", () => { const hi = namekey("hi"); expect( {code` const ${decl(hi)} = 12; console.log(${hi}); `} {hi}; , ).toRenderTo({ "test1.ts": ` const hi = 12; console.log(hi); `, "test2.ts": ` import { hi } from "./test1.js"; hi; `, }); }); it("declares types", () => { const hi = namekey("hi"); expect( {code` interface ${declType(hi)} { value: number; } `} , ).toRenderTo({ "test1.ts": ` interface hi { value: number; } `, "test2.ts": ` import type { hi } from "./test1.js"; const test: hi `, }); }); it("declares variables", () => { const hi = namekey("hi"); expect( {code` interface ${declType(hi)} { value: number; } `} , ).toRenderTo({ "test1.ts": ` interface hi { value: number; } `, "test2.ts": ` import type { hi } from "./test1.js"; const test: hi `, }); }); it("declares members", () => { const publicMember = namekey("publicMember"); const privateMember = namekey("privateMember"); const staticMethod = namekey("staticMethod"); expect( {code` public ${declMember(publicMember)} = 12; #${declMember(privateMember, { jsPrivate: true })} = 34; constructor() { ${publicMember} = 24; ${privateMember} = 10; } `} static ${declMember(staticMethod, { static: true })}() {"{}"}; {staticMethod}(); , ).toRenderTo(` class Foo { public publicMember = 12; #privateMember = 34; constructor() { this.publicMember = 24; this.#privateMember = 10; } static $staticMethod() {}; } Foo.staticMethod(); `); });