JSPM

@dxyl/tapable

1.0.3
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q34740F
  • License MIT

webpack tapable typescript

Package Exports

  • @dxyl/tapable

Readme

npm install @dxyl/tapable
import {SyncHook,SyncBailHook,AsyncSeriesBailHook} from './src/index'

 
interface Context{
    service:IRenderService
}
interface IRenderService{
    draw():void

}
class Context{
    service:IRenderService
}
class CanvasService implements IRenderService{
    constructor(public ctx:Context){
    }
    draw(){
        console.log('canvas draw')
    }
}
class WebGpuService implements IRenderService{
    constructor(public ctx:Context){
    }
    draw(){
        console.log('Webgpu draw')
    }
}
const hooks={
    service:new SyncBailHook<[ctx:Context],IRenderService>,
    resize:new SyncHook<[width:number,height:number]>()

}
hooks.service.tap('canvas-service',(ctx)=>{
    return new CanvasService(ctx)
})
hooks.service.tap({
    name:'gpu-service',
    stage:-1 // 覆盖canvas-service插件
},(ctx)=>{
    return new WebGpuService(ctx)
})


let ctx=new Context()
ctx.service=hooks.service.call(ctx)!
ctx.service.draw()
// or
hooks.service.callAsync(ctx,(err,service)=>{
    if(err) {
        throw 'No service created'
    }
    ctx.service=service!
    ctx.service.draw()
})

hooks.resize.tap('resize',((width,height)=>{
    console.log(width,height)
}))
hooks.resize.tap('resize2',((width,height)=>{
    console.log('resize2',width,height)
}))
hooks.resize.callAsync(100,200,()=>{
    console.log('done')
})