Skip to content

Commit

Permalink
🔀 Merge pull request #109 from evan-liu/feat/map-to-events-array
Browse files Browse the repository at this point in the history
🏷️ Change ManipulatorMap value from ToEvent to ToEvent[]
  • Loading branch information
evan-liu authored Nov 3, 2023
2 parents 3604bff + aa3fae6 commit c20517d
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
22 changes: 21 additions & 1 deletion src/config/manipulator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ import { describe, expect, test } from 'vitest'
import { FromEvent, ToEvent } from '../karabiner/karabiner-config'

import { ifEventChanged } from './condition'
import { BasicManipulatorBuilder, isManipulatorBuilder } from './manipulator'
import {
BasicManipulatorBuilder,
buildManipulators,
isManipulatorBuilder,
} from './manipulator'
import { toKey } from './to.ts'

describe('ManipulatorBuilder', () => {
const from: FromEvent = { key_code: 'a' }
Expand Down Expand Up @@ -289,3 +294,18 @@ test('isManipulatorBuilder()', () => {
expect(isManipulatorBuilder({ type: 'basic', from })).toBe(false)
expect(isManipulatorBuilder(new BasicManipulatorBuilder(from))).toBe(true)
})

test('buildManipulators(ManipulatorMap)', () => {
const manipulators = buildManipulators({
1: toKey(2),
3: [toKey(4), toKey(5)],
})
expect(manipulators).toEqual([
{ type: 'basic', from: { key_code: '1' }, to: [{ key_code: '2' }] },
{
type: 'basic',
from: { key_code: '3' },
to: [{ key_code: '4' }, { key_code: '5' }],
},
])
})
8 changes: 6 additions & 2 deletions src/config/manipulator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ export interface ManipulatorBuilder {

// TODO Make the type FromKeyParam.
// Current TypeScript version gives errors for some keys, like numbers.
export type ManipulatorMap = Partial<Record<string | number, ToEvent>>
export type ManipulatorMap = Partial<
Record<string | number, ToEvent | ToEvent[]>
>

export class BasicManipulatorBuilder implements ManipulatorBuilder {
protected readonly manipulator: BasicManipulator
Expand Down Expand Up @@ -332,7 +334,9 @@ export function buildManipulators(
if (isManipulatorBuilder(src)) return src.build(context)
if ('type' in src) return [src as Manipulator]

const entries = Object.entries(src) as Array<[FromKeyParam, ToEvent]>
const entries = Object.entries(src) as Array<
[FromKeyParam, ToEvent | ToEvent[]]
>
return entries.reduce(
(r, [k, v]) => [...r, ...map(k).to(v).build(context)],
[] as Manipulator[],
Expand Down

0 comments on commit c20517d

Please sign in to comment.