/// import { spawnSync } from "node:child_process"; import { fileURLToPath } from "node:url"; import * as upstreamRoot from "@assistant-ui/generative-ui"; import * as upstreamA2ui from "@assistant-ui/generative-ui/a2ui"; import * as upstreamReact from "@assistant-ui/generative-ui/react"; import * as upstreamSlack from "@assistant-ui/generative-ui/slack"; import * as upstreamTeams from "@assistant-ui/generative-ui/teams"; import { describe, expect, it } from "vitest"; import * as a2ui from "./a2ui"; import * as index from "./index"; import * as indexServer from "./index.server"; import * as ir from "./ir"; import * as slack from "./slack"; import * as teams from "./teams"; const PACKAGE_DIR = fileURLToPath(new URL("..", import.meta.url)); describe("@assistant-ui/react-generative-ui", () => { it.each([ ["index", index, upstreamReact], ["index.server", indexServer, upstreamReact], ["ir", ir, upstreamRoot], ["a2ui", a2ui, upstreamA2ui], ["slack", slack, upstreamSlack], ["teams", teams, upstreamTeams], ])( "%s exports exactly what its @assistant-ui/generative-ui entry exports", (_, entry, upstream) => { const exported: Record = { ...entry }; const expected: Record = { ...upstream }; expect(Object.keys(exported).sort()).toEqual( Object.keys(expected).sort(), ); for (const name of Object.keys(expected)) { expect(exported[name]).toBe(expected[name]); } }, ); it.each([ [[], ["react-generative-ui/dist/index.js", "generative-ui/dist/react.js"]], [ ["react-server"], [ "react-generative-ui/dist/index.server.js", "generative-ui/dist/react.server.js", ], ], ])( "resolves the root and @assistant-ui/generative-ui/react under conditions %j", (conditions, expected) => { const result = spawnSync( process.execPath, [ ...conditions.map((condition) => `--conditions=${condition}`), "--input-type=module", "--eval", 'for (const id of ["@assistant-ui/react-generative-ui", "@assistant-ui/generative-ui/react"]) console.log(import.meta.resolve(id));', ], { cwd: PACKAGE_DIR, encoding: "utf8" }, ); expect(result.status, result.stderr).toBe(0); expect( result.stdout .trim() .split("\n") .map((url) => url.split("/").slice(-3).join("/")), ).toEqual(expected); }, ); });