mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-11 22:06:17 -08:00
refactor(vast): [PKG-VAST-04] retain published types and add accurate runtime declarations
This commit is contained in:
1 parent
c162d2b3b3
commit
e5c73fa620
34 files changed
+7819
-1495
No files matched your search
@@ -1,6 +1,6 @@
|
||||
import { expect, test } from './fixtures.js'
|
||||
|
||||
test('docs Monaco worker consumes generated core types and runs a typed player example', async ({ page }) => {
|
||||
test('docs Monaco worker consumes generated core and published VAST types and runs a typed player example', async ({ page }, testInfo) => {
|
||||
await page.goto('/test/player.html?core=candidate&chapter=published')
|
||||
await page.addScriptTag({ url: '/assets/js/vs/loader.js' })
|
||||
const result = await page.evaluate(async () => {
|
||||
@@ -12,23 +12,36 @@ test('docs Monaco worker consumes generated core types and runs a typed player e
|
||||
const source = await (await fetch('/assets/ts/artplayer.d.ts')).text()
|
||||
const libraryUri = 'file:///artplayer.d.ts'
|
||||
const library = types.typescriptDefaults.addExtraLib(source, libraryUri)
|
||||
const vastSource = await (await fetch('/assets/ts/artplayer-plugin-vast.d.ts')).text()
|
||||
const vastLibraryUri = 'file:///artplayer-plugin-vast.d.ts'
|
||||
const vastLibrary = types.typescriptDefaults.addExtraLib(vastSource, vastLibraryUri)
|
||||
const model = api.editor.createModel(`
|
||||
const editorOption: Artplayer.OptionInput = { container: '.player', url: '/test/pattern.mp4', muted: true }
|
||||
const editorArt: Artplayer = new Artplayer(editorOption)
|
||||
const editorEvents: Artplayer.Emitter<{ value: [number] }> = new Artplayer.Emitter()
|
||||
editorEvents.emit('value', 1)
|
||||
const editorVastCallback: Parameters<typeof artplayerPluginVast>[0] = ({id, $container, imaPlayer}) => {
|
||||
const identifier: string = id
|
||||
const container: HTMLDivElement = $container
|
||||
imaPlayer.addEventListener('AdStarted', () => {})
|
||||
void [identifier, container]
|
||||
}
|
||||
const editorVastFactory: typeof artplayerPluginVast = (_callback) => (_art) => ({name: 'artplayerPluginVast'})
|
||||
`, 'typescript', api.Uri.parse('file:///consumer.ts'))
|
||||
const invalid = api.editor.createModel('new Artplayer({ container: 123, url: "" })', 'typescript', api.Uri.parse('file:///invalid.ts'))
|
||||
const vastInvalid = api.editor.createModel('artplayerPluginVast();\nartplayerPluginVast(({id}) => { const wrong: number = id })', 'typescript', api.Uri.parse('file:///vast-invalid.ts'))
|
||||
try {
|
||||
const getWorker = await types.getTypeScriptWorker()
|
||||
const worker = await getWorker(model.uri, invalid.uri)
|
||||
const worker = await getWorker(model.uri, invalid.uri, vastInvalid.uri)
|
||||
const syntax = await worker.getSyntacticDiagnostics(model.uri.toString())
|
||||
const semantic = await worker.getSemanticDiagnostics(model.uri.toString())
|
||||
const declaration = await worker.getSemanticDiagnostics(libraryUri)
|
||||
const vastDeclaration = await worker.getSemanticDiagnostics(vastLibraryUri)
|
||||
const vastBad = (await worker.getSemanticDiagnostics(vastInvalid.uri.toString())).map(item => item.code)
|
||||
const bad = await worker.getSemanticDiagnostics(invalid.uri.toString())
|
||||
const output = await worker.getEmitOutput(model.uri.toString())
|
||||
if (syntax.length || semantic.length || declaration.length)
|
||||
return { syntax, semantic, declaration, invalid: bad.map(item => item.code), ready: false }
|
||||
return { syntax, semantic, declaration, vastDeclaration, vastBad, vastSource, invalid: bad.map(item => item.code), ready: false }
|
||||
const script = output.outputFiles.find(file => file.name.endsWith('.js'))
|
||||
if (!script)
|
||||
throw new Error('Monaco did not emit the typed example')
|
||||
@@ -37,7 +50,7 @@ editorEvents.emit('value', 1)
|
||||
try {
|
||||
if (!art.isReady)
|
||||
await new Promise(resolve => art.on('ready', resolve))
|
||||
return { syntax, semantic, declaration, invalid: bad.map(item => item.code), ready: art.isReady && art.video.videoWidth > 0 }
|
||||
return { syntax, semantic, declaration, vastDeclaration, vastBad, vastSource, invalid: bad.map(item => item.code), ready: art.isReady && art.video.videoWidth > 0 }
|
||||
}
|
||||
finally {
|
||||
art.destroy()
|
||||
@@ -46,12 +59,17 @@ editorEvents.emit('value', 1)
|
||||
finally {
|
||||
model.dispose()
|
||||
invalid.dispose()
|
||||
vastInvalid.dispose()
|
||||
library.dispose()
|
||||
vastLibrary.dispose()
|
||||
}
|
||||
})
|
||||
expect(result.syntax).toEqual([])
|
||||
expect(result.semantic).toEqual([])
|
||||
expect(result.declaration).toEqual([])
|
||||
expect(result.vastDeclaration).toEqual([])
|
||||
expect(result.vastBad).toEqual([2554, 2322])
|
||||
await testInfo.attach('vast-editor-declaration', { contentType: 'text/plain', body: result.vastSource })
|
||||
expect(result.invalid.length).toBeGreaterThan(0)
|
||||
expect(result.ready).toBe(true)
|
||||
})
|
||||
Reference in new issue
Block a user