Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/ability.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const createAbility = <TExtend, TClass extends CustomElementClass>(
const markers = abilityMarkers.get(Class)
if (markers?.has(decorate as Decorator)) return Class as unknown as TExtend
const NewClass = decorate(Class) as TExtend
Object.defineProperty(NewClass, 'name', {value: Class.name})
const newMarkers = new Set(markers)
newMarkers.add(decorate as Decorator)
abilityMarkers.set(NewClass as unknown as CustomElementClass, newMarkers)
Expand Down
6 changes: 0 additions & 6 deletions src/controllable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ const internalsCalled = new WeakSet()
export const controllable = createAbility(
<T extends CustomElementClass>(Class: T): T & ControllableClass =>
class extends Class {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore TypeScript doesn't like assigning static name
static get name() {
return Class.name
}

// TS mandates Constructors that get mixins have `...args: any[]`
// eslint-disable-next-line @typescript-eslint/no-explicit-any
constructor(...args: any[]) {
Expand Down
7 changes: 7 additions & 0 deletions test/ability.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ describe('ability', () => {
expect(DElement).to.have.property('prototype').instanceof(Element)
})

it('retains original class name', () => {
const DElement = fakeable(Element)
const D2Element = otherfakeable(Element)
expect(DElement).to.have.property('name', 'Element')
expect(D2Element).to.have.property('name', 'Element')
})

it('can be used in decorator position', async () => {
@fakeable
class DElement extends HTMLElement {}
Expand Down