@opentui/core 0.0.0-20260715-e41c067a → 0.0.0-20260716-7fa53301
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/audio-stream/demuxer.d.ts +19 -0
- package/audio-stream/icy/demuxer.d.ts +21 -0
- package/audio-stream/icy/metadata.d.ts +1 -0
- package/audio.d.ts +201 -1
- package/{index-y6278spm.js → index-fbg5wkm5.js} +166 -8
- package/index-fbg5wkm5.js.map +61 -0
- package/{index-qmbf8p8x.js → index-fvmnr3eb.js} +4 -3
- package/{index-qmbf8p8x.js.map → index-fvmnr3eb.js.map} +3 -3
- package/index.d.ts +3 -0
- package/index.js +1437 -63
- package/index.js.map +9 -5
- package/package.json +9 -9
- package/renderables/text-table-width.d.ts +1 -0
- package/testing/bun-test-node.d.ts +1 -0
- package/testing.js +2 -2
- package/yoga.js +1 -1
- package/zig-structs.d.ts +47 -0
- package/zig.d.ts +38 -2
- package/index-y6278spm.js.map +0 -61
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AudioStreamMetadata } from "../audio.js";
|
|
2
|
+
export type AudioStreamDemuxOutput<M> = {
|
|
3
|
+
type: "audio";
|
|
4
|
+
data: Uint8Array;
|
|
5
|
+
} | {
|
|
6
|
+
type: "metadata";
|
|
7
|
+
metadata: M | null;
|
|
8
|
+
};
|
|
9
|
+
export interface AudioStreamDemuxer<M> {
|
|
10
|
+
readonly initialMetadata: M | null;
|
|
11
|
+
push(chunk: Uint8Array): Iterable<AudioStreamDemuxOutput<M>>;
|
|
12
|
+
flush(): Iterable<AudioStreamDemuxOutput<M>>;
|
|
13
|
+
abort?(reason: unknown): void;
|
|
14
|
+
}
|
|
15
|
+
export type AudioStreamDemuxerFactory<M> = () => AudioStreamDemuxer<M>;
|
|
16
|
+
export declare function selectAudioStreamDemuxer(options: {
|
|
17
|
+
headers: Headers;
|
|
18
|
+
metadataEncoding: string;
|
|
19
|
+
}): AudioStreamDemuxer<AudioStreamMetadata> | null;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AudioStreamMetadata } from "../../audio.js";
|
|
2
|
+
import type { AudioStreamDemuxer, AudioStreamDemuxOutput } from "../demuxer.js";
|
|
3
|
+
export interface IcyStreamDemuxerOptions {
|
|
4
|
+
metadataInterval: number;
|
|
5
|
+
metadataEncoding?: string;
|
|
6
|
+
headers?: Readonly<Record<string, string>>;
|
|
7
|
+
}
|
|
8
|
+
export declare class IcyStreamDemuxer implements AudioStreamDemuxer<AudioStreamMetadata> {
|
|
9
|
+
readonly initialMetadata: AudioStreamMetadata;
|
|
10
|
+
private audioRemaining;
|
|
11
|
+
private metadata;
|
|
12
|
+
private metadataOffset;
|
|
13
|
+
private fields;
|
|
14
|
+
private readonly interval;
|
|
15
|
+
private readonly decoder;
|
|
16
|
+
private readonly headers;
|
|
17
|
+
constructor(options: IcyStreamDemuxerOptions);
|
|
18
|
+
push(chunk: Uint8Array): IterableIterator<AudioStreamDemuxOutput<AudioStreamMetadata>>;
|
|
19
|
+
flush(): IterableIterator<AudioStreamDemuxOutput<AudioStreamMetadata>>;
|
|
20
|
+
}
|
|
21
|
+
export declare function createIcyStreamDemuxer(options: IcyStreamDemuxerOptions): AudioStreamDemuxer<AudioStreamMetadata>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function parseIcyMetadata(bytes: Uint8Array, decoder: TextDecoder): Readonly<Record<string, string>> | null;
|
package/audio.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from "events";
|
|
2
|
-
import type
|
|
2
|
+
import { type AudioStreamDemuxer, type AudioStreamDemuxerFactory } from "./audio-stream/demuxer.js";
|
|
3
|
+
import { type AudioStats } from "./zig-structs.js";
|
|
3
4
|
export interface AudioSetupOptions {
|
|
4
5
|
autoStart?: boolean;
|
|
5
6
|
sampleRate?: number;
|
|
@@ -29,6 +30,119 @@ export interface AudioPlayOptions {
|
|
|
29
30
|
loop?: boolean;
|
|
30
31
|
groupId?: number;
|
|
31
32
|
}
|
|
33
|
+
export type AudioStreamBody = ReadableStream<Uint8Array> | AsyncIterable<Uint8Array>;
|
|
34
|
+
export type AudioStreamFormat = "mp3" | "flac";
|
|
35
|
+
export interface AudioStreamContentTypeContext {
|
|
36
|
+
readonly format: AudioStreamFormat;
|
|
37
|
+
readonly contentType: string | null;
|
|
38
|
+
readonly status: number;
|
|
39
|
+
readonly url: string;
|
|
40
|
+
}
|
|
41
|
+
export type AudioStreamContentTypePolicy = "validate" | "ignore" | ((context: AudioStreamContentTypeContext) => boolean);
|
|
42
|
+
export interface AudioStreamConnectContext {
|
|
43
|
+
readonly signal: AbortSignal;
|
|
44
|
+
readonly attempt: number;
|
|
45
|
+
}
|
|
46
|
+
export interface AudioStreamConnection<I = unknown> {
|
|
47
|
+
readonly body: AudioStreamBody;
|
|
48
|
+
readonly info: I;
|
|
49
|
+
close?(): void | Promise<void>;
|
|
50
|
+
}
|
|
51
|
+
export type AudioStreamRetryPhase = "connect" | "read";
|
|
52
|
+
export interface AudioStreamRetryContext {
|
|
53
|
+
readonly attempt: number;
|
|
54
|
+
readonly maxRetries: number;
|
|
55
|
+
readonly phase: AudioStreamRetryPhase;
|
|
56
|
+
}
|
|
57
|
+
export type AudioStreamRetryDecision = false | {
|
|
58
|
+
readonly delayMs?: number;
|
|
59
|
+
};
|
|
60
|
+
export interface AudioStreamConnector<I = unknown> {
|
|
61
|
+
connect(context: AudioStreamConnectContext): Promise<AudioStreamConnection<I>>;
|
|
62
|
+
}
|
|
63
|
+
export interface AudioStreamBufferOptions {
|
|
64
|
+
capacityMs?: number;
|
|
65
|
+
startupMs?: number;
|
|
66
|
+
resumeMs?: number;
|
|
67
|
+
}
|
|
68
|
+
export interface AudioStreamReconnectOptions {
|
|
69
|
+
maxRetries?: number;
|
|
70
|
+
initialDelayMs?: number;
|
|
71
|
+
maxDelayMs?: number;
|
|
72
|
+
backoffFactor?: number;
|
|
73
|
+
retryOnEnd?: boolean;
|
|
74
|
+
retry?(error: AudioStreamError, context: AudioStreamRetryContext): AudioStreamRetryDecision;
|
|
75
|
+
}
|
|
76
|
+
export interface AudioStreamOptions {
|
|
77
|
+
format?: AudioStreamFormat;
|
|
78
|
+
volume?: number;
|
|
79
|
+
pan?: number;
|
|
80
|
+
groupId?: number;
|
|
81
|
+
maxProbeBytes?: number;
|
|
82
|
+
buffer?: AudioStreamBufferOptions;
|
|
83
|
+
signal?: AbortSignal;
|
|
84
|
+
}
|
|
85
|
+
export interface AudioStreamBodyOptions<M = AudioStreamMetadata> extends AudioStreamOptions {
|
|
86
|
+
demuxer?: AudioStreamDemuxerFactory<M>;
|
|
87
|
+
contentTypePolicy?: never;
|
|
88
|
+
request?: never;
|
|
89
|
+
reconnect?: never;
|
|
90
|
+
metadataEncoding?: never;
|
|
91
|
+
}
|
|
92
|
+
export interface AudioStreamSourceOptions<I = unknown, M = AudioStreamMetadata> extends AudioStreamOptions {
|
|
93
|
+
demuxer?: (info: I) => AudioStreamDemuxer<M> | null;
|
|
94
|
+
reconnect?: AudioStreamReconnectOptions;
|
|
95
|
+
contentTypePolicy?: never;
|
|
96
|
+
request?: never;
|
|
97
|
+
metadataEncoding?: never;
|
|
98
|
+
}
|
|
99
|
+
export interface AudioStreamUrlOptions extends AudioStreamOptions {
|
|
100
|
+
request?: Omit<RequestInit, "body" | "signal">;
|
|
101
|
+
reconnect?: AudioStreamReconnectOptions;
|
|
102
|
+
metadataEncoding?: string;
|
|
103
|
+
contentTypePolicy?: AudioStreamContentTypePolicy;
|
|
104
|
+
demuxer?: never;
|
|
105
|
+
}
|
|
106
|
+
export type AudioStreamState = "initializing" | "buffering" | "playing" | "reconnecting" | "ended" | "errored" | "disposed";
|
|
107
|
+
export interface AudioStreamStats {
|
|
108
|
+
state: AudioStreamState;
|
|
109
|
+
sampleRate: number;
|
|
110
|
+
channels: number;
|
|
111
|
+
bufferedFrames: number;
|
|
112
|
+
capacityFrames: number;
|
|
113
|
+
bufferedDurationMs: number;
|
|
114
|
+
bytesReceived: bigint;
|
|
115
|
+
framesDecoded: bigint;
|
|
116
|
+
framesPlayed: bigint;
|
|
117
|
+
underruns: number;
|
|
118
|
+
reconnectAttempts: number;
|
|
119
|
+
}
|
|
120
|
+
export type AudioStreamMetadataFormat = "icy";
|
|
121
|
+
export interface AudioStreamMetadata {
|
|
122
|
+
readonly format: AudioStreamMetadataFormat;
|
|
123
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
124
|
+
readonly fields: Readonly<Record<string, string>>;
|
|
125
|
+
}
|
|
126
|
+
export type AudioStreamAction = "fetch" | "response" | "source" | "demuxer" | "create" | "write" | "end" | "restart" | "stats" | "decoder" | "destroy" | "setVolume" | "setPan" | "setGroup";
|
|
127
|
+
export interface AudioStreamErrorContext {
|
|
128
|
+
action: AudioStreamAction;
|
|
129
|
+
status?: number;
|
|
130
|
+
errorCode?: number;
|
|
131
|
+
attempt?: number;
|
|
132
|
+
}
|
|
133
|
+
export interface AudioStreamReconnectEvent {
|
|
134
|
+
attempt: number;
|
|
135
|
+
delayMs: number;
|
|
136
|
+
maxRetries: number;
|
|
137
|
+
error: AudioStreamError;
|
|
138
|
+
}
|
|
139
|
+
export interface AudioStreamEvents<M = AudioStreamMetadata> {
|
|
140
|
+
metadata: [metadata: M | null];
|
|
141
|
+
reconnecting: [event: AudioStreamReconnectEvent];
|
|
142
|
+
ended: [];
|
|
143
|
+
error: [error: Error, context: AudioStreamErrorContext];
|
|
144
|
+
disposed: [];
|
|
145
|
+
}
|
|
32
146
|
export type AudioGroup = number;
|
|
33
147
|
export type AudioVoice = number;
|
|
34
148
|
export type AudioSound = number;
|
|
@@ -49,15 +163,97 @@ export interface AudioEvents {
|
|
|
49
163
|
stopped: [];
|
|
50
164
|
disposed: [];
|
|
51
165
|
}
|
|
166
|
+
export type AudioInitializationAction = "resolveRenderLib" | "createAudioEngine" | "start";
|
|
167
|
+
export declare class AudioInitializationError extends Error {
|
|
168
|
+
readonly action: AudioInitializationAction;
|
|
169
|
+
readonly status?: number;
|
|
170
|
+
constructor(action: AudioInitializationAction, message: string, status?: number, cause?: unknown);
|
|
171
|
+
}
|
|
172
|
+
export declare class AudioStreamError extends Error {
|
|
173
|
+
readonly context: AudioStreamErrorContext;
|
|
174
|
+
constructor(message: string, context: AudioStreamErrorContext, cause?: unknown);
|
|
175
|
+
}
|
|
176
|
+
export declare class AudioStream<M = AudioStreamMetadata> extends EventEmitter<AudioStreamEvents<M>> {
|
|
177
|
+
readonly closed: Promise<void>;
|
|
178
|
+
readonly format: AudioStreamFormat;
|
|
179
|
+
private readonly lib;
|
|
180
|
+
private readonly engine;
|
|
181
|
+
private readonly connector;
|
|
182
|
+
private readonly demuxerFactory?;
|
|
183
|
+
private readonly readAction;
|
|
184
|
+
private readonly options;
|
|
185
|
+
private readonly removeFromOwner;
|
|
186
|
+
private readonly lifecycleController;
|
|
187
|
+
private nativeStreamId;
|
|
188
|
+
private nativeStats;
|
|
189
|
+
private activeAttempt;
|
|
190
|
+
private pendingCleanup;
|
|
191
|
+
private reconnectAttempts;
|
|
192
|
+
private consecutiveReconnectAttempts;
|
|
193
|
+
private disposed;
|
|
194
|
+
private exposed;
|
|
195
|
+
private terminalError;
|
|
196
|
+
private metadata;
|
|
197
|
+
private pendingMetadataEvent;
|
|
198
|
+
private metadataEventScheduled;
|
|
199
|
+
private terminalEventScheduled;
|
|
200
|
+
private setupResolve;
|
|
201
|
+
private setupReject;
|
|
202
|
+
private closedResolve;
|
|
203
|
+
private readonly setupPromise;
|
|
204
|
+
private readonly overallAbortListener;
|
|
205
|
+
private constructor();
|
|
206
|
+
get state(): AudioStreamState;
|
|
207
|
+
private open;
|
|
208
|
+
getStats(): AudioStreamStats;
|
|
209
|
+
getMetadata(): M | null;
|
|
210
|
+
setVolume(volume: number): boolean;
|
|
211
|
+
setPan(pan: number): boolean;
|
|
212
|
+
setGroup(groupId: number): boolean;
|
|
213
|
+
private control;
|
|
214
|
+
dispose(): void;
|
|
215
|
+
private runLifecycle;
|
|
216
|
+
private createNativeStream;
|
|
217
|
+
private consumeSource;
|
|
218
|
+
private pumpSource;
|
|
219
|
+
private processDemuxOutput;
|
|
220
|
+
private writeStreamChunk;
|
|
221
|
+
private resolveConnection;
|
|
222
|
+
private beginResourceAcquisition;
|
|
223
|
+
private cleanupAttempt;
|
|
224
|
+
private performAttemptCleanup;
|
|
225
|
+
private runBoundedAttemptCleanup;
|
|
226
|
+
private retry;
|
|
227
|
+
private awaitReady;
|
|
228
|
+
private observeReady;
|
|
229
|
+
private awaitEnded;
|
|
230
|
+
private pollNativeSnapshot;
|
|
231
|
+
private snapshotError;
|
|
232
|
+
private finish;
|
|
233
|
+
private publishMetadata;
|
|
234
|
+
private emitMetadata;
|
|
235
|
+
private emitAsync;
|
|
236
|
+
private emitTerminal;
|
|
237
|
+
private isAttemptActive;
|
|
238
|
+
private stopSource;
|
|
239
|
+
private closeNativeStream;
|
|
240
|
+
private readNativeStats;
|
|
241
|
+
private toPublicStats;
|
|
242
|
+
private removeOwner;
|
|
243
|
+
}
|
|
52
244
|
export declare class Audio extends EventEmitter<AudioEvents> {
|
|
53
245
|
static create(options?: AudioSetupOptions): Audio;
|
|
246
|
+
readonly sampleRate: number;
|
|
54
247
|
private readonly lib;
|
|
55
248
|
private readonly defaultStartOptions;
|
|
56
249
|
private engine;
|
|
57
250
|
private readonly groups;
|
|
251
|
+
private readonly streams;
|
|
58
252
|
private playbackStarted;
|
|
59
253
|
private mixerStarted;
|
|
254
|
+
private disposing;
|
|
60
255
|
private constructor();
|
|
256
|
+
private throwAfterInitializationCleanup;
|
|
61
257
|
private emitError;
|
|
62
258
|
start(options?: AudioStartOptions): boolean;
|
|
63
259
|
startMixer(): boolean;
|
|
@@ -69,6 +265,10 @@ export declare class Audio extends EventEmitter<AudioEvents> {
|
|
|
69
265
|
unloadSound(sound: AudioSound): boolean;
|
|
70
266
|
group(name: string): AudioGroup | null;
|
|
71
267
|
play(sound: AudioSound, options?: AudioPlayOptions): AudioVoice | null;
|
|
268
|
+
playStream<M = AudioStreamMetadata>(source: AudioStreamBody, options?: AudioStreamBodyOptions<M>): Promise<AudioStream<M>>;
|
|
269
|
+
playStreamUrl(source: string | URL, options?: AudioStreamUrlOptions): Promise<AudioStream<AudioStreamMetadata>>;
|
|
270
|
+
playStreamSource<I, M = AudioStreamMetadata>(connector: AudioStreamConnector<I>, options?: AudioStreamSourceOptions<I, M>): Promise<AudioStream<M>>;
|
|
271
|
+
private openStream;
|
|
72
272
|
stopVoice(voice: AudioVoice): boolean;
|
|
73
273
|
setVoiceGroup(voice: AudioVoice, group: AudioGroup): boolean;
|
|
74
274
|
setGroupVolume(group: AudioGroup, volume: number): boolean;
|
|
@@ -202,6 +202,17 @@ var POINTER_NEGATIVE = "Pointer must be non-negative";
|
|
|
202
202
|
var POINTER_OFFSET_NEGATIVE = "Pointer offset must be non-negative";
|
|
203
203
|
var POINTER_OFFSET_UNSAFE = "Pointer offset must be a safe integer";
|
|
204
204
|
var POINTER_UNSAFE = "Pointer exceeds safe integer range";
|
|
205
|
+
var arrayBufferByteLength = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength")?.get;
|
|
206
|
+
function isArrayBuffer(value) {
|
|
207
|
+
if (value === null || typeof value !== "object" || arrayBufferByteLength == null)
|
|
208
|
+
return false;
|
|
209
|
+
try {
|
|
210
|
+
arrayBufferByteLength.call(value);
|
|
211
|
+
return true;
|
|
212
|
+
} catch {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
205
216
|
function unavailable(cause) {
|
|
206
217
|
throw new Error(FFI_UNAVAILABLE, { cause });
|
|
207
218
|
}
|
|
@@ -429,7 +440,7 @@ function toNodePointerArgument(value) {
|
|
|
429
440
|
return toBigIntPointer(value);
|
|
430
441
|
}
|
|
431
442
|
if (ArrayBuffer.isView(value)) {
|
|
432
|
-
if (!(value.buffer
|
|
443
|
+
if (!isArrayBuffer(value.buffer)) {
|
|
433
444
|
throw new TypeError(NODE_PTR_VALUE);
|
|
434
445
|
}
|
|
435
446
|
if (value.byteLength === 0) {
|
|
@@ -437,7 +448,7 @@ function toNodePointerArgument(value) {
|
|
|
437
448
|
}
|
|
438
449
|
return value;
|
|
439
450
|
}
|
|
440
|
-
if (value
|
|
451
|
+
if (isArrayBuffer(value)) {
|
|
441
452
|
if (value.byteLength === 0) {
|
|
442
453
|
return 0n;
|
|
443
454
|
}
|
|
@@ -447,12 +458,12 @@ function toNodePointerArgument(value) {
|
|
|
447
458
|
}
|
|
448
459
|
function toNodeSourcePointer(nodeFfi, value) {
|
|
449
460
|
if (ArrayBuffer.isView(value)) {
|
|
450
|
-
if (!(value.buffer
|
|
461
|
+
if (!isArrayBuffer(value.buffer)) {
|
|
451
462
|
throw new TypeError(NODE_PTR_VALUE);
|
|
452
463
|
}
|
|
453
464
|
return nodeFfi.getRawPointer(value.buffer) + BigInt(value.byteOffset);
|
|
454
465
|
}
|
|
455
|
-
if (value
|
|
466
|
+
if (isArrayBuffer(value)) {
|
|
456
467
|
return nodeFfi.getRawPointer(value);
|
|
457
468
|
}
|
|
458
469
|
throw new TypeError(NODE_PTR_VALUE);
|
|
@@ -12412,6 +12423,33 @@ var ReserveInfoStruct = defineStruct([
|
|
|
12412
12423
|
len: value.len
|
|
12413
12424
|
})
|
|
12414
12425
|
});
|
|
12426
|
+
var NativeAudioStreamFormat = {
|
|
12427
|
+
Mp3: 1,
|
|
12428
|
+
Flac: 2
|
|
12429
|
+
};
|
|
12430
|
+
var NativeAudioStreamState = {
|
|
12431
|
+
Initializing: 0,
|
|
12432
|
+
Buffering: 1,
|
|
12433
|
+
Playing: 2,
|
|
12434
|
+
Ended: 3,
|
|
12435
|
+
Failed: 4,
|
|
12436
|
+
Cancelled: 5,
|
|
12437
|
+
Reconnecting: 6
|
|
12438
|
+
};
|
|
12439
|
+
var NativeAudioStreamStateNames = [
|
|
12440
|
+
"initializing",
|
|
12441
|
+
"buffering",
|
|
12442
|
+
"playing",
|
|
12443
|
+
"ended",
|
|
12444
|
+
"errored",
|
|
12445
|
+
"disposed",
|
|
12446
|
+
"reconnecting"
|
|
12447
|
+
];
|
|
12448
|
+
var NativeAudioStreamCloseReason = {
|
|
12449
|
+
PreserveNativeTerminal: 0,
|
|
12450
|
+
TransportError: 1,
|
|
12451
|
+
Disposed: 2
|
|
12452
|
+
};
|
|
12415
12453
|
var AudioCreateOptionsStruct = defineStruct([
|
|
12416
12454
|
["sampleRate", "u32", { default: 48000 }],
|
|
12417
12455
|
["playbackChannels", "u32", { default: 2 }]
|
|
@@ -12439,6 +12477,29 @@ var AudioVoiceOptionsStruct = defineStruct([
|
|
|
12439
12477
|
["loop", "bool_u8", { default: false }],
|
|
12440
12478
|
["groupId", "u32", { default: 0 }]
|
|
12441
12479
|
]);
|
|
12480
|
+
var AudioStreamCreateOptionsStruct = defineStruct([
|
|
12481
|
+
["capacityMs", "u32"],
|
|
12482
|
+
["startupMs", "u32"],
|
|
12483
|
+
["resumeMs", "u32"],
|
|
12484
|
+
["volume", "f32"],
|
|
12485
|
+
["pan", "f32"],
|
|
12486
|
+
["groupId", "u32"],
|
|
12487
|
+
["maxProbeBytes", "u32"],
|
|
12488
|
+
["format", "u32"]
|
|
12489
|
+
]);
|
|
12490
|
+
var AudioStreamStatsStruct = defineStruct([
|
|
12491
|
+
["bytesReceived", "u64"],
|
|
12492
|
+
["framesDecoded", "u64"],
|
|
12493
|
+
["framesPlayed", "u64"],
|
|
12494
|
+
["state", "u32"],
|
|
12495
|
+
["sampleRate", "u32"],
|
|
12496
|
+
["channels", "u32"],
|
|
12497
|
+
["bufferedFrames", "u32"],
|
|
12498
|
+
["capacityFrames", "u32"],
|
|
12499
|
+
["underruns", "u32"],
|
|
12500
|
+
["errorCode", "i32"],
|
|
12501
|
+
["readyGeneration", "u32"]
|
|
12502
|
+
]);
|
|
12442
12503
|
var AudioStatsStruct = defineStruct([
|
|
12443
12504
|
["soundsLoaded", "u32"],
|
|
12444
12505
|
["voicesActive", "u32"],
|
|
@@ -12449,6 +12510,9 @@ var AudioStatsStruct = defineStruct([
|
|
|
12449
12510
|
]);
|
|
12450
12511
|
|
|
12451
12512
|
// src/zig.ts
|
|
12513
|
+
var NativeAudioStreamState2 = NativeAudioStreamState;
|
|
12514
|
+
var NativeAudioStreamCloseReason2 = NativeAudioStreamCloseReason;
|
|
12515
|
+
var NativeAudioStreamFormat2 = NativeAudioStreamFormat;
|
|
12452
12516
|
registerEnvVar({
|
|
12453
12517
|
name: "OPENTUI_LIBC",
|
|
12454
12518
|
description: "Select Linux native libc package. Supported values: glibc, musl.",
|
|
@@ -12611,6 +12675,9 @@ function toSafeFFIU32Length(value, label) {
|
|
|
12611
12675
|
}
|
|
12612
12676
|
return value;
|
|
12613
12677
|
}
|
|
12678
|
+
function isFFIU32(value) {
|
|
12679
|
+
return Number.isInteger(value) && value >= 0 && value <= MAX_FFI_U32;
|
|
12680
|
+
}
|
|
12614
12681
|
function ptrOrNull(value) {
|
|
12615
12682
|
return value.byteLength === 0 ? null : ptr(value);
|
|
12616
12683
|
}
|
|
@@ -13931,6 +13998,42 @@ function getOpenTUILib(libPath) {
|
|
|
13931
13998
|
args: ["u32"],
|
|
13932
13999
|
returns: "i32"
|
|
13933
14000
|
},
|
|
14001
|
+
audioCreateStream: {
|
|
14002
|
+
args: ["u32", "ptr", "ptr"],
|
|
14003
|
+
returns: "i32"
|
|
14004
|
+
},
|
|
14005
|
+
audioWriteStream: {
|
|
14006
|
+
args: ["u32", "u32", "ptr", "u32"],
|
|
14007
|
+
returns: "i32"
|
|
14008
|
+
},
|
|
14009
|
+
audioEndStream: {
|
|
14010
|
+
args: ["u32", "u32"],
|
|
14011
|
+
returns: "i32"
|
|
14012
|
+
},
|
|
14013
|
+
audioRestartStream: {
|
|
14014
|
+
args: ["u32", "u32"],
|
|
14015
|
+
returns: "i32"
|
|
14016
|
+
},
|
|
14017
|
+
audioSetStreamVolume: {
|
|
14018
|
+
args: ["u32", "u32", "f32"],
|
|
14019
|
+
returns: "i32"
|
|
14020
|
+
},
|
|
14021
|
+
audioSetStreamPan: {
|
|
14022
|
+
args: ["u32", "u32", "f32"],
|
|
14023
|
+
returns: "i32"
|
|
14024
|
+
},
|
|
14025
|
+
audioSetStreamGroup: {
|
|
14026
|
+
args: ["u32", "u32", "u32"],
|
|
14027
|
+
returns: "i32"
|
|
14028
|
+
},
|
|
14029
|
+
audioGetStreamStats: {
|
|
14030
|
+
args: ["u32", "u32", "ptr"],
|
|
14031
|
+
returns: "i32"
|
|
14032
|
+
},
|
|
14033
|
+
audioCloseStream: {
|
|
14034
|
+
args: ["u32", "u32", "u32", "ptr"],
|
|
14035
|
+
returns: "i32"
|
|
14036
|
+
},
|
|
13934
14037
|
audioLoad: {
|
|
13935
14038
|
args: ["u32", "ptr", "u32", "ptr"],
|
|
13936
14039
|
returns: "i32"
|
|
@@ -15783,7 +15886,12 @@ class FFIRenderLib {
|
|
|
15783
15886
|
this.opentui.symbols.audioClearPlaybackDeviceSelection(engine);
|
|
15784
15887
|
}
|
|
15785
15888
|
audioStart(engine, options) {
|
|
15786
|
-
|
|
15889
|
+
let optionsBuffer;
|
|
15890
|
+
try {
|
|
15891
|
+
optionsBuffer = options == null ? null : AudioStartOptionsStruct.pack(options);
|
|
15892
|
+
} catch {
|
|
15893
|
+
return -1;
|
|
15894
|
+
}
|
|
15787
15895
|
return this.opentui.symbols.audioStart(engine, optionsBuffer ? ptr(optionsBuffer) : null);
|
|
15788
15896
|
}
|
|
15789
15897
|
audioStartMixer(engine) {
|
|
@@ -15792,6 +15900,52 @@ class FFIRenderLib {
|
|
|
15792
15900
|
audioStop(engine) {
|
|
15793
15901
|
return this.opentui.symbols.audioStop(engine);
|
|
15794
15902
|
}
|
|
15903
|
+
audioCreateStream(engine, options) {
|
|
15904
|
+
if (!isFFIU32(options.groupId) || options.format !== NativeAudioStreamFormat2.Mp3 && options.format !== NativeAudioStreamFormat2.Flac) {
|
|
15905
|
+
return { status: -1, streamId: null };
|
|
15906
|
+
}
|
|
15907
|
+
const optionsBuffer = AudioStreamCreateOptionsStruct.pack(options);
|
|
15908
|
+
const outBuffer = new ArrayBuffer(4);
|
|
15909
|
+
const status = this.opentui.symbols.audioCreateStream(engine, optionsBuffer, outBuffer);
|
|
15910
|
+
if (status !== 0)
|
|
15911
|
+
return { status, streamId: null };
|
|
15912
|
+
return { status, streamId: new Uint32Array(outBuffer)[0] ?? null };
|
|
15913
|
+
}
|
|
15914
|
+
audioWriteStream(engine, streamId, data) {
|
|
15915
|
+
const dataLength = toSafeFFIU32Length(data.byteLength, "Audio stream data length");
|
|
15916
|
+
return this.opentui.symbols.audioWriteStream(engine, streamId, dataLength === 0 ? null : data, dataLength);
|
|
15917
|
+
}
|
|
15918
|
+
audioEndStream(engine, streamId) {
|
|
15919
|
+
return this.opentui.symbols.audioEndStream(engine, streamId);
|
|
15920
|
+
}
|
|
15921
|
+
audioRestartStream(engine, streamId) {
|
|
15922
|
+
return this.opentui.symbols.audioRestartStream(engine, streamId);
|
|
15923
|
+
}
|
|
15924
|
+
audioSetStreamVolume(engine, streamId, volume) {
|
|
15925
|
+
return this.opentui.symbols.audioSetStreamVolume(engine, streamId, volume);
|
|
15926
|
+
}
|
|
15927
|
+
audioSetStreamPan(engine, streamId, pan) {
|
|
15928
|
+
return this.opentui.symbols.audioSetStreamPan(engine, streamId, pan);
|
|
15929
|
+
}
|
|
15930
|
+
audioSetStreamGroup(engine, streamId, groupId) {
|
|
15931
|
+
if (!isFFIU32(groupId))
|
|
15932
|
+
return -1;
|
|
15933
|
+
return this.opentui.symbols.audioSetStreamGroup(engine, streamId, groupId);
|
|
15934
|
+
}
|
|
15935
|
+
audioGetStreamStats(engine, streamId) {
|
|
15936
|
+
const outBuffer = new ArrayBuffer(AudioStreamStatsStruct.size);
|
|
15937
|
+
const status = this.opentui.symbols.audioGetStreamStats(engine, streamId, outBuffer);
|
|
15938
|
+
if (status !== 0)
|
|
15939
|
+
return null;
|
|
15940
|
+
return AudioStreamStatsStruct.unpack(outBuffer);
|
|
15941
|
+
}
|
|
15942
|
+
audioCloseStream(engine, streamId, reason) {
|
|
15943
|
+
const outBuffer = new ArrayBuffer(AudioStreamStatsStruct.size);
|
|
15944
|
+
const status = this.opentui.symbols.audioCloseStream(engine, streamId, reason, outBuffer);
|
|
15945
|
+
if (status !== 0)
|
|
15946
|
+
return { status, stats: null };
|
|
15947
|
+
return { status, stats: AudioStreamStatsStruct.unpack(outBuffer) };
|
|
15948
|
+
}
|
|
15795
15949
|
audioLoad(engine, data) {
|
|
15796
15950
|
const outBuffer = new ArrayBuffer(4);
|
|
15797
15951
|
const dataLength = toSafeFFIU32Length(data.byteLength, "Audio data length");
|
|
@@ -15806,6 +15960,8 @@ class FFIRenderLib {
|
|
|
15806
15960
|
return this.opentui.symbols.audioUnload(engine, soundId);
|
|
15807
15961
|
}
|
|
15808
15962
|
audioPlay(engine, soundId, options) {
|
|
15963
|
+
if (options?.groupId !== undefined && !isFFIU32(options.groupId))
|
|
15964
|
+
return { status: -1, voiceId: null };
|
|
15809
15965
|
const outBuffer = new ArrayBuffer(4);
|
|
15810
15966
|
const optionsBuffer = options ? AudioVoiceOptionsStruct.pack(options) : null;
|
|
15811
15967
|
const status = this.opentui.symbols.audioPlay(engine, soundId, optionsBuffer ? ptr(optionsBuffer) : null, ptr(outBuffer));
|
|
@@ -15819,6 +15975,8 @@ class FFIRenderLib {
|
|
|
15819
15975
|
return this.opentui.symbols.audioStopVoice(engine, voiceId);
|
|
15820
15976
|
}
|
|
15821
15977
|
audioSetVoiceGroup(engine, voiceId, groupId) {
|
|
15978
|
+
if (!isFFIU32(groupId))
|
|
15979
|
+
return -1;
|
|
15822
15980
|
return this.opentui.symbols.audioSetVoiceGroup(engine, voiceId, groupId);
|
|
15823
15981
|
}
|
|
15824
15982
|
audioCreateGroup(engine, name) {
|
|
@@ -16974,7 +17132,7 @@ var Yoga = {
|
|
|
16974
17132
|
};
|
|
16975
17133
|
var yoga_default = Yoga;
|
|
16976
17134
|
|
|
16977
|
-
export { toArrayBuffer, sleep, stringWidth2 as stringWidth, DEFAULT_FOREGROUND_RGB, DEFAULT_BACKGROUND_RGB, normalizeIndexedColorIndex, ansi256IndexToRgb, RGBA, normalizeColorValue, hexToRgb, rgbToHex, hsvToRgb, parseColor, isValidBorderStyle, parseBorderStyle, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, KeyEvent, PasteEvent, KeyHandler, InternalKeyHandler, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, ATTRIBUTE_BASE_BITS, ATTRIBUTE_BASE_MASK, getBaseAttributes, DebugOverlayCorner, TargetChannel, createTextAttributes, attributesWithLink, getLinkId, visualizeRenderableTree, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, link, t, hastToStyledText, SystemClock, nonAlphanumericKeys, terminalNamedSingleStrokeKeys, parseKeypress, LinearScrollAccel, MacOSScrollAccel, parseAlign, parseAlignItems, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, singleton, envRegistry, registerEnvVar, clearEnvCache, generateEnvMarkdown, generateEnvColored, env, StdinParser, treeSitterToTextChunks, treeSitterToStyledText, addDefaultParsers, TreeSitterClient, DataPathsManager, getDataPaths, extensionToFiletype, basenameToFiletype, extToFiletype, pathToFiletype, infoStringToFiletype, getTreeSitterClient, destroyTreeSitterClient, ExtmarksController, createExtmarksController, TerminalPalette, createTerminalPalette, normalizeTerminalPalette, buildTerminalPaletteSignature, decodePasteBytes, stripAnsiSequences, createHostClipboard, createClipboard, ClipboardTarget, createRendererClipboardAdapter, Clipboard, detectLinks, OptimizedBuffer, TextBuffer, SpanInfoStruct, NativeClipboardOperationStatus, NativeClipboardStartStatus, NativeClipboardCancelStatus, NativeClipboardCopyStatus, NativeClipboardDestroyStatus, NativeClipboardShutdownStatus, LogLevel2 as LogLevel, NativeMeasureTargetKind, setRenderLibPath, resolveRenderLib, Align, BoxSizing, Dimension, Direction, Display, Edge, Errata, ExperimentalFeature, FlexDirection, Gutter, Justify, LogLevel as LogLevel1, MeasureMode, NodeType, Overflow, PositionType, Unit, Wrap, ALIGN_AUTO, ALIGN_FLEX_START, ALIGN_CENTER, ALIGN_FLEX_END, ALIGN_STRETCH, ALIGN_BASELINE, ALIGN_SPACE_BETWEEN, ALIGN_SPACE_AROUND, ALIGN_SPACE_EVENLY, BOX_SIZING_BORDER_BOX, BOX_SIZING_CONTENT_BOX, DIMENSION_WIDTH, DIMENSION_HEIGHT, DIRECTION_INHERIT, DIRECTION_LTR, DIRECTION_RTL, DISPLAY_FLEX, DISPLAY_NONE, DISPLAY_CONTENTS, EDGE_LEFT, EDGE_TOP, EDGE_RIGHT, EDGE_BOTTOM, EDGE_START, EDGE_END, EDGE_HORIZONTAL, EDGE_VERTICAL, EDGE_ALL, ERRATA_NONE, ERRATA_STRETCH_FLEX_BASIS, ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING, ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE, ERRATA_ALL, ERRATA_CLASSIC, EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS, FLEX_DIRECTION_COLUMN, FLEX_DIRECTION_COLUMN_REVERSE, FLEX_DIRECTION_ROW, FLEX_DIRECTION_ROW_REVERSE, GUTTER_COLUMN, GUTTER_ROW, GUTTER_ALL, JUSTIFY_FLEX_START, JUSTIFY_CENTER, JUSTIFY_FLEX_END, JUSTIFY_SPACE_BETWEEN, JUSTIFY_SPACE_AROUND, JUSTIFY_SPACE_EVENLY, LOG_LEVEL_ERROR, LOG_LEVEL_WARN, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_VERBOSE, LOG_LEVEL_FATAL, MEASURE_MODE_UNDEFINED, MEASURE_MODE_EXACTLY, MEASURE_MODE_AT_MOST, NODE_TYPE_DEFAULT, NODE_TYPE_TEXT, OVERFLOW_VISIBLE, OVERFLOW_HIDDEN, OVERFLOW_SCROLL, POSITION_TYPE_STATIC, POSITION_TYPE_RELATIVE, POSITION_TYPE_ABSOLUTE, UNIT_UNDEFINED, UNIT_POINT, UNIT_PERCENT, UNIT_AUTO, WRAP_NO_WRAP, WRAP_WRAP, WRAP_WRAP_REVERSE, Config, Node, exports_yoga, yoga_default };
|
|
17135
|
+
export { toArrayBuffer, sleep, stringWidth2 as stringWidth, DEFAULT_FOREGROUND_RGB, DEFAULT_BACKGROUND_RGB, normalizeIndexedColorIndex, ansi256IndexToRgb, RGBA, normalizeColorValue, hexToRgb, rgbToHex, hsvToRgb, parseColor, isValidBorderStyle, parseBorderStyle, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, KeyEvent, PasteEvent, KeyHandler, InternalKeyHandler, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, ATTRIBUTE_BASE_BITS, ATTRIBUTE_BASE_MASK, getBaseAttributes, DebugOverlayCorner, TargetChannel, createTextAttributes, attributesWithLink, getLinkId, visualizeRenderableTree, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, link, t, hastToStyledText, SystemClock, nonAlphanumericKeys, terminalNamedSingleStrokeKeys, parseKeypress, LinearScrollAccel, MacOSScrollAccel, parseAlign, parseAlignItems, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, singleton, envRegistry, registerEnvVar, clearEnvCache, generateEnvMarkdown, generateEnvColored, env, StdinParser, treeSitterToTextChunks, treeSitterToStyledText, addDefaultParsers, TreeSitterClient, DataPathsManager, getDataPaths, extensionToFiletype, basenameToFiletype, extToFiletype, pathToFiletype, infoStringToFiletype, getTreeSitterClient, destroyTreeSitterClient, ExtmarksController, createExtmarksController, TerminalPalette, createTerminalPalette, normalizeTerminalPalette, buildTerminalPaletteSignature, decodePasteBytes, stripAnsiSequences, createHostClipboard, createClipboard, ClipboardTarget, createRendererClipboardAdapter, Clipboard, detectLinks, OptimizedBuffer, TextBuffer, SpanInfoStruct, NativeAudioStreamFormat, NativeAudioStreamState, NativeAudioStreamStateNames, NativeAudioStreamCloseReason, NativeAudioStreamState2 as NativeAudioStreamState1, NativeAudioStreamCloseReason2 as NativeAudioStreamCloseReason1, NativeAudioStreamFormat2 as NativeAudioStreamFormat1, NativeClipboardOperationStatus, NativeClipboardStartStatus, NativeClipboardCancelStatus, NativeClipboardCopyStatus, NativeClipboardDestroyStatus, NativeClipboardShutdownStatus, LogLevel2 as LogLevel, NativeMeasureTargetKind, setRenderLibPath, resolveRenderLib, Align, BoxSizing, Dimension, Direction, Display, Edge, Errata, ExperimentalFeature, FlexDirection, Gutter, Justify, LogLevel as LogLevel1, MeasureMode, NodeType, Overflow, PositionType, Unit, Wrap, ALIGN_AUTO, ALIGN_FLEX_START, ALIGN_CENTER, ALIGN_FLEX_END, ALIGN_STRETCH, ALIGN_BASELINE, ALIGN_SPACE_BETWEEN, ALIGN_SPACE_AROUND, ALIGN_SPACE_EVENLY, BOX_SIZING_BORDER_BOX, BOX_SIZING_CONTENT_BOX, DIMENSION_WIDTH, DIMENSION_HEIGHT, DIRECTION_INHERIT, DIRECTION_LTR, DIRECTION_RTL, DISPLAY_FLEX, DISPLAY_NONE, DISPLAY_CONTENTS, EDGE_LEFT, EDGE_TOP, EDGE_RIGHT, EDGE_BOTTOM, EDGE_START, EDGE_END, EDGE_HORIZONTAL, EDGE_VERTICAL, EDGE_ALL, ERRATA_NONE, ERRATA_STRETCH_FLEX_BASIS, ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING, ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE, ERRATA_ALL, ERRATA_CLASSIC, EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS, FLEX_DIRECTION_COLUMN, FLEX_DIRECTION_COLUMN_REVERSE, FLEX_DIRECTION_ROW, FLEX_DIRECTION_ROW_REVERSE, GUTTER_COLUMN, GUTTER_ROW, GUTTER_ALL, JUSTIFY_FLEX_START, JUSTIFY_CENTER, JUSTIFY_FLEX_END, JUSTIFY_SPACE_BETWEEN, JUSTIFY_SPACE_AROUND, JUSTIFY_SPACE_EVENLY, LOG_LEVEL_ERROR, LOG_LEVEL_WARN, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_VERBOSE, LOG_LEVEL_FATAL, MEASURE_MODE_UNDEFINED, MEASURE_MODE_EXACTLY, MEASURE_MODE_AT_MOST, NODE_TYPE_DEFAULT, NODE_TYPE_TEXT, OVERFLOW_VISIBLE, OVERFLOW_HIDDEN, OVERFLOW_SCROLL, POSITION_TYPE_STATIC, POSITION_TYPE_RELATIVE, POSITION_TYPE_ABSOLUTE, UNIT_UNDEFINED, UNIT_POINT, UNIT_PERCENT, UNIT_AUTO, WRAP_NO_WRAP, WRAP_WRAP, WRAP_WRAP_REVERSE, Config, Node, exports_yoga, yoga_default };
|
|
16978
17136
|
|
|
16979
|
-
//# debugId=
|
|
16980
|
-
//# sourceMappingURL=index-
|
|
17137
|
+
//# debugId=810D7F8C9A56846964756E2164756E21
|
|
17138
|
+
//# sourceMappingURL=index-fbg5wkm5.js.map
|