|
|
@@ -0,0 +1,33 @@
|
|
|
+/** Regression coverage for source declarations owned by the client test aggregate. */
|
|
|
+
|
|
|
+import { existsSync, readdirSync } from 'node:fs'
|
|
|
+import { resolve } from 'node:path'
|
|
|
+import { fileURLToPath } from 'node:url'
|
|
|
+import ts from 'typescript'
|
|
|
+import { describe, expect, it } from 'vitest'
|
|
|
+
|
|
|
+const root = fileURLToPath(new URL('..', import.meta.url))
|
|
|
+
|
|
|
+function clientCssDeclarations(): string[] {
|
|
|
+ const clientRoot = resolve(root, 'packages/client')
|
|
|
+ return readdirSync(clientRoot, { withFileTypes: true })
|
|
|
+ .filter(entry => entry.isDirectory())
|
|
|
+ .map(entry => resolve(clientRoot, entry.name, 'src/css-modules.d.ts'))
|
|
|
+ .filter(existsSync)
|
|
|
+ .sort()
|
|
|
+}
|
|
|
+
|
|
|
+describe('client TypeScript aggregate', () => {
|
|
|
+ it('loads package CSS declarations without relying on workspace-link realpaths', () => {
|
|
|
+ const configPath = resolve(root, 'tsconfig.client.json')
|
|
|
+ const read = ts.readConfigFile(configPath, file => ts.sys.readFile(file))
|
|
|
+ if (read.error !== undefined) {
|
|
|
+ throw new Error(ts.flattenDiagnosticMessageText(read.error.messageText, '\n'))
|
|
|
+ }
|
|
|
+ const parsed = ts.parseJsonConfigFileContent(read.config, ts.sys, root)
|
|
|
+ const loaded = parsed.fileNames
|
|
|
+ .filter(file => file.endsWith('/src/css-modules.d.ts'))
|
|
|
+ .sort()
|
|
|
+ expect(loaded).toEqual(clientCssDeclarations())
|
|
|
+ })
|
|
|
+})
|