kunkun/packages/api/__tests__/verify-package-export.test.ts
Huakun Shen ed87fc6c12
App Setup (#2)
* chore: add vendor submodules

* feat: add packages for db,ci,schema,api,jarvis cmds

* feat: add tauri-jarvis-plugin

* feat: implement extension commands list

* fix(desktop): import path errors after packages refactor

* chore: add self signed cert

* fix: prevent prerender for desktop

* fix(desktop): desktop sveltekit static build, use csr for dynamic route

* feat: add error handling page and components

* refactor: component lib

* refactor: move more types, functions and components out of desktop

* refactor(ui): more refactor

* refactor(ui): move store components to @kksh/ui

* ci: add CI for build & test

* refactor: rename @kksh/extensions to @kksh/extension

* ci: add 2 more ci

* ci: fix

* fix: CI env var

* chore: add changeset

* feat: implement extension store item detail view

* feat: implement extension store install, uninstall, upgrade

* format

* revert: upgradable logic, the new one doesn't work yet

* refactor: make @kksh/ui dependent only on @kksh/api

Reason: @kksh/ui may be published later for building website, all its dependency packages must be also published. To avoid trouble it should be standalone, depend only on packages already published

* refactor: cleanup

* fixed: some typescript error

* chore: got typedoc working on @kksh/api

* ci: disable manifest schema upload CI on push
2024-11-03 13:54:44 -05:00

42 lines
1.5 KiB
TypeScript

import path from "path"
import { describe, expect, test } from "bun:test"
import madge from "madge"
import * as v from "valibot"
import { exports } from "../package.json"
const buildEntries: string[] = Object.entries(exports).filter((e) => typeof e === "string")
describe("Verify Bundled Package", () => {
test("Test Circular Dependency", async () => {
const pkgRoot = path.join(__dirname, "..")
const paths = buildEntries.map((p) => path.join(pkgRoot, p)).map((p) => path.resolve(p))
// expect each paths to exist
paths.forEach(async (p) => {
expect(await Bun.file(p).exists()).toBe(true)
const madgeRes = await madge(p)
expect(madgeRes.circular()).toEqual([])
})
})
test("Verify Package Export Path", async () => {
const pkgRoot = path.join(__dirname, "..")
const pkgJsonPath = path.join(pkgRoot, "package.json")
const file = Bun.file(pkgJsonPath)
const pkgJson = await file.json()
const exports = pkgJson["exports"]
Object.entries(exports).forEach(async ([key, value]) => {
const exportPaths = v.parse(v.union([v.record(v.string(), v.string()), v.string()]), value)
if (typeof exportPaths === "string") {
// special case for "./package.json"
const resolvedPath = path.join(pkgRoot, exportPaths)
expect(await Bun.file(resolvedPath).exists()).toBe(true)
} else {
Object.values(exportPaths).forEach(async (_path: string) => {
const resolvedPath = path.join(pkgRoot, _path)
expect(await Bun.file(resolvedPath).exists()).toBe(true)
})
}
})
})
})