1import { Pattern, ClockCollator } from '@strudel/core';
2import { parseControlsFromHap } from 'node_modules/@strudel/osc/osc.mjs';
3import { Invoke } from './utils.mjs';
4
5const collator = new ClockCollator({});
6
7export async function oscTriggerTauri(hap, currentTime, cps = 1, targetTime) {
8  const controls = parseControlsFromHap(hap, cps);
9  const params = [];
10  const timestamp = collator.calculateTimestamp(currentTime, targetTime);
11
12  Object.keys(controls).forEach((key) => {
13    const val = controls[key];
14    const value = typeof val === 'number' ? val.toString() : val;
15
16    if (value == null) {
17      return;
18    }
19    params.push({
20      name: key,
21      value,
22      valueisnumber: typeof val === 'number',
23    });
24  });
25
26  if (params.length === 0) {
27    return;
28  }
29  const message = { target: '/dirt/play', timestamp, params };
30  setTimeout(() => {
31    Invoke('sendosc', { messagesfromjs: [message] });
32  });
33}
34Pattern.prototype.osc = function () {
35  return this.onTrigger(oscTriggerTauri);
36};