mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-13 15:56:15 -08:00
refactor(core): [CORE-21] generate compatible public and editor declarations
This commit is contained in:
1 parent
ee895a558f
commit
faaa3e8c2d
123 files changed
+31305
-1712
No files matched your search
@@ -0,0 +1,45 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import os from 'node:os'
|
||||
import path from 'node:path'
|
||||
// eslint-disable-next-line test/no-import-node-test -- Declaration generation must reject drift and invalid public sources.
|
||||
import { test } from 'node:test'
|
||||
import { generateCoreDeclarations } from '../scripts/build-types.mjs'
|
||||
|
||||
test('declaration checks reject stale output without overwriting it and recover through explicit generation', async () => {
|
||||
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'artplayer-declarations-'))
|
||||
const folder = path.join(root, 'packages/artplayer')
|
||||
fs.mkdirSync(path.join(folder, 'public'), { recursive: true })
|
||||
fs.mkdirSync(path.join(folder, 'types'), { recursive: true })
|
||||
const source = path.join(folder, 'public/contract.ts')
|
||||
const output = path.join(folder, 'types/contract.d.ts')
|
||||
try {
|
||||
fs.writeFileSync(source, 'export interface Contract { name: string }\n')
|
||||
await assert.rejects(generateCoreDeclarations({ root }), /stale/)
|
||||
assert.equal(fs.existsSync(output), false)
|
||||
await generateCoreDeclarations({ root, write: true })
|
||||
const generated = fs.readFileSync(output, 'utf8')
|
||||
assert.match(generated, /Generated from public\/contract.ts/)
|
||||
assert.deepEqual((await generateCoreDeclarations({ root })).changed, [])
|
||||
fs.writeFileSync(source, 'export interface Contract { name: string, enabled: boolean }\n')
|
||||
await assert.rejects(generateCoreDeclarations({ root }), /stale/)
|
||||
assert.equal(fs.readFileSync(output, 'utf8'), generated)
|
||||
await generateCoreDeclarations({ root, write: true })
|
||||
assert.match(fs.readFileSync(output, 'utf8'), /enabled: boolean/)
|
||||
assert.equal(fs.existsSync(path.join(folder, 'types/contract.js')), false)
|
||||
fs.writeFileSync(source, 'export interface Contract { name: MissingPublicType }\n')
|
||||
const valid = fs.readFileSync(output, 'utf8')
|
||||
await assert.rejects(generateCoreDeclarations({ root, write: true }), /MissingPublicType/)
|
||||
assert.equal(fs.readFileSync(output, 'utf8'), valid)
|
||||
fs.mkdirSync(path.join(folder, 'src'))
|
||||
fs.writeFileSync(path.join(folder, 'src/private.ts'), 'export interface Private { internal: boolean }\n')
|
||||
fs.writeFileSync(source, 'export type { Private } from "../src/private.js"\n')
|
||||
await assert.rejects(generateCoreDeclarations({ root, write: true }), /rootDir|non-public/)
|
||||
assert.equal(fs.readFileSync(output, 'utf8'), valid)
|
||||
}
|
||||
finally {
|
||||
assert.equal(path.dirname(path.resolve(root)), path.resolve(os.tmpdir()))
|
||||
assert(path.basename(root).startsWith('artplayer-declarations-'))
|
||||
fs.rmSync(root, { recursive: true, force: true })
|
||||
}
|
||||
})
|
||||
Reference in new issue
Block a user