| 1 | import { Discovery } from "@effect/api-diff/Discovery" |
| 2 | import * as NodeServices from "@effect/platform-node/NodeServices" |
| 3 | import { assert, describe, it } from "@effect/vitest" |
| 4 | import * as Effect from "effect/Effect" |
| 5 | import * as FileSystem from "effect/FileSystem" |
| 6 | import * as Layer from "effect/Layer" |
| 7 | import { writeFixturePackage } from "./utils.ts" |
| 8 | |
| 9 | const MainLayer = Discovery.layer.pipe( |
| 10 | Layer.provideMerge(NodeServices.layer) |
| 11 | ) |
| 12 | |
| 13 | describe("entrypoint discovery", () => { |
| 14 | it.effect("expands wildcards and respects null exclusions", () => |
| 15 | Effect.gen(function*() { |
| 16 | const fs = yield* FileSystem.FileSystem |
| 17 | const discovery = yield* Discovery |
| 18 | const root = yield* fs.makeTempDirectoryScoped({ prefix: "api-diff-discovery-" }) |
| 19 | yield* writeFixturePackage(root, { |
| 20 | "index.d.ts": `export * as Foo from "./Foo.js"\n`, |
| 21 | "Foo.d.ts": `export declare const value: string\n`, |
| 22 | "internal/Secret.d.ts": `export declare const secret: string\n` |
| 23 | }) |
| 24 | |
| 25 | const result = yield* discovery.discoverEntrypoints(root, [ |
| 26 | "@fixture/sample", |
| 27 | "@fixture/sample/Foo", |
| 28 | "@fixture/sample/internal/Secret" |
| 29 | ]) |
| 30 | assert.deepStrictEqual(result.entrypoints.map((entrypoint) => entrypoint.module), [ |
| 31 | "@fixture/sample", |
| 32 | "@fixture/sample/Foo" |
| 33 | ]) |
| 34 | assert.deepStrictEqual(result.missing, ["@fixture/sample/internal/Secret"]) |
| 35 | |
| 36 | const all = yield* discovery.discoverEntrypoints(root) |
| 37 | assert.deepStrictEqual(all.entrypoints.map((entrypoint) => entrypoint.module), [ |
| 38 | "@fixture/sample", |
| 39 | "@fixture/sample/Foo", |
| 40 | "@fixture/sample/index" |
| 41 | ]) |
| 42 | assert.deepStrictEqual(all.missing, []) |
| 43 | }).pipe(Effect.provide(MainLayer))) |
| 44 | |
| 45 | it.effect("supports conditional export targets", () => |
| 46 | Effect.gen(function*() { |
| 47 | const fs = yield* FileSystem.FileSystem |
| 48 | const discovery = yield* Discovery |
| 49 | const root = yield* fs.makeTempDirectoryScoped({ prefix: "api-diff-discovery-" }) |
| 50 | yield* writeFixturePackage(root, { |
| 51 | "Foo.d.ts": `export declare const value: string\n` |
| 52 | }, { |
| 53 | "./Foo": { |
| 54 | types: "./Foo.d.ts", |
| 55 | import: "./Foo.js" |
| 56 | } |
| 57 | }) |
| 58 | const result = yield* discovery.discoverEntrypoints(root, ["@fixture/sample/Foo"]) |
| 59 | assert.strictEqual(result.missing.length, 0) |
| 60 | assert.strictEqual(result.entrypoints[0]?.module, "@fixture/sample/Foo") |
| 61 | }).pipe(Effect.provide(MainLayer))) |
| 62 | }) |