feat(css): add framework-agnostic design system
This commit is contained in:
parent
e12ec8681b
commit
c251ead206
23 changed files with 1285 additions and 0 deletions
63
packages/css/test/package.test.ts
Normal file
63
packages/css/test/package.test.ts
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
import { describe, expect, test } from "bun:test"
|
||||
import path from "node:path"
|
||||
|
||||
const root = path.join(import.meta.dir, "..")
|
||||
const manifest = await Bun.file(path.join(root, "package.json")).json()
|
||||
|
||||
function imports(file: string) {
|
||||
return [...file.matchAll(/@import\s+["'](.+?)["']/g)].map((match) => match[1])
|
||||
}
|
||||
|
||||
describe("package", () => {
|
||||
test("all exports resolve to files", async () => {
|
||||
const targets = Object.values(manifest.exports) as string[]
|
||||
const concrete = targets.filter((target) => !target.includes("*"))
|
||||
expect(await Promise.all(concrete.map((target) => Bun.file(path.join(root, target)).exists()))).toEqual(
|
||||
concrete.map(() => true),
|
||||
)
|
||||
})
|
||||
|
||||
test("all local CSS imports resolve", async () => {
|
||||
const files = [...new Bun.Glob("**/*.css").scanSync({ cwd: root, absolute: true })]
|
||||
const missing = (
|
||||
await Promise.all(
|
||||
files.map(async (file) =>
|
||||
Promise.all(
|
||||
imports(await Bun.file(file).text())
|
||||
.filter((target) => target.startsWith("."))
|
||||
.map(async (target) =>
|
||||
(await Bun.file(path.resolve(path.dirname(file), target)).exists()) ? undefined : target,
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
)
|
||||
.flat()
|
||||
.filter(Boolean)
|
||||
expect(missing).toEqual([])
|
||||
})
|
||||
|
||||
test("component index includes every component once", async () => {
|
||||
const expected = [...new Bun.Glob("components/*.css").scanSync({ cwd: root })].sort()
|
||||
const actual = imports(await Bun.file(path.join(root, "components.css")).text())
|
||||
.map((target) => target.replace(/^\.\//, ""))
|
||||
.sort()
|
||||
expect(actual).toEqual(expected)
|
||||
})
|
||||
|
||||
test("public CSS does not expose v2 names", async () => {
|
||||
const files = [...new Bun.Glob("**/*.css").scanSync({ cwd: root, absolute: true })]
|
||||
const stale = (
|
||||
await Promise.all(files.map(async (file) => ((await Bun.file(file).text()).includes("-v2") ? file : undefined)))
|
||||
).filter(Boolean)
|
||||
expect(stale).toEqual([])
|
||||
})
|
||||
|
||||
test("all referenced tokens are declared", async () => {
|
||||
const files = [...new Bun.Glob("**/*.css").scanSync({ cwd: root, absolute: true })]
|
||||
const css = (await Promise.all(files.map((file) => Bun.file(file).text()))).join("\n")
|
||||
const declared = new Set([...css.matchAll(/(--[\w-]+)\s*:/g)].map((match) => match[1]))
|
||||
const referenced = new Set([...css.matchAll(/var\((--[\w-]+)/g)].map((match) => match[1]))
|
||||
expect([...referenced].filter((token) => !declared.has(token)).sort()).toEqual([])
|
||||
})
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue