@kajidog/voicevox-client 0.4.1 → 0.6.0

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.
Files changed (114) hide show
  1. package/LICENSE +14 -14
  2. package/dist/accent-utils.d.ts +93 -0
  3. package/dist/accent-utils.d.ts.map +1 -0
  4. package/dist/accent-utils.js +211 -0
  5. package/dist/accent-utils.js.map +1 -0
  6. package/dist/api.d.ts +40 -2
  7. package/dist/api.d.ts.map +1 -1
  8. package/dist/api.js +90 -0
  9. package/dist/api.js.map +1 -1
  10. package/dist/cache-policy.d.ts +21 -0
  11. package/dist/cache-policy.d.ts.map +1 -0
  12. package/dist/cache-policy.js +31 -0
  13. package/dist/cache-policy.js.map +1 -0
  14. package/dist/client.d.ts +28 -119
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +48 -417
  17. package/dist/client.js.map +1 -1
  18. package/dist/effect/config.d.ts +43 -0
  19. package/dist/effect/config.d.ts.map +1 -0
  20. package/dist/effect/config.js +45 -0
  21. package/dist/effect/config.js.map +1 -0
  22. package/dist/effect/context.d.ts +33 -0
  23. package/dist/effect/context.d.ts.map +1 -0
  24. package/dist/effect/context.js +10 -0
  25. package/dist/effect/context.js.map +1 -0
  26. package/dist/effect/errors.d.ts +130 -0
  27. package/dist/effect/errors.d.ts.map +1 -0
  28. package/dist/effect/errors.js +121 -0
  29. package/dist/effect/errors.js.map +1 -0
  30. package/dist/effect/index.d.ts +34 -0
  31. package/dist/effect/index.d.ts.map +1 -0
  32. package/dist/effect/index.js +67 -0
  33. package/dist/effect/index.js.map +1 -0
  34. package/dist/effect/queue-manager.d.ts +34 -0
  35. package/dist/effect/queue-manager.d.ts.map +1 -0
  36. package/dist/effect/queue-manager.js +59 -0
  37. package/dist/effect/queue-manager.js.map +1 -0
  38. package/dist/effect/services/api-service.d.ts +58 -0
  39. package/dist/effect/services/api-service.d.ts.map +1 -0
  40. package/dist/effect/services/api-service.js +90 -0
  41. package/dist/effect/services/api-service.js.map +1 -0
  42. package/dist/effect/services/audio-generator-service.d.ts +78 -0
  43. package/dist/effect/services/audio-generator-service.d.ts.map +1 -0
  44. package/dist/effect/services/audio-generator-service.js +187 -0
  45. package/dist/effect/services/audio-generator-service.js.map +1 -0
  46. package/dist/effect/services/audio-player-service.d.ts +101 -0
  47. package/dist/effect/services/audio-player-service.d.ts.map +1 -0
  48. package/dist/effect/services/audio-player-service.js +297 -0
  49. package/dist/effect/services/audio-player-service.js.map +1 -0
  50. package/dist/effect/services/event-manager-service.d.ts +96 -0
  51. package/dist/effect/services/event-manager-service.d.ts.map +1 -0
  52. package/dist/effect/services/event-manager-service.js +208 -0
  53. package/dist/effect/services/event-manager-service.js.map +1 -0
  54. package/dist/effect/services/file-manager-service.d.ts +91 -0
  55. package/dist/effect/services/file-manager-service.d.ts.map +1 -0
  56. package/dist/effect/services/file-manager-service.js +215 -0
  57. package/dist/effect/services/file-manager-service.js.map +1 -0
  58. package/dist/effect/utils.d.ts +118 -0
  59. package/dist/effect/utils.d.ts.map +1 -0
  60. package/dist/effect/utils.js +186 -0
  61. package/dist/effect/utils.js.map +1 -0
  62. package/dist/error.js.map +1 -1
  63. package/dist/index.d.ts +3 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -1
  66. package/dist/index.js.map +1 -1
  67. package/dist/playback/node-playback-strategy.d.ts.map +1 -1
  68. package/dist/playback/node-playback-strategy.js +2 -6
  69. package/dist/playback/node-playback-strategy.js.map +1 -1
  70. package/dist/player.d.ts +110 -0
  71. package/dist/player.d.ts.map +1 -0
  72. package/dist/player.js +183 -0
  73. package/dist/player.js.map +1 -0
  74. package/dist/queue/audio-player.d.ts +44 -0
  75. package/dist/queue/audio-player.d.ts.map +1 -0
  76. package/dist/queue/audio-player.js +344 -0
  77. package/dist/queue/audio-player.js.map +1 -0
  78. package/dist/queue/file-manager.js +9 -9
  79. package/dist/queue/file-manager.js.map +1 -1
  80. package/dist/queue/manager.d.ts +134 -0
  81. package/dist/queue/manager.d.ts.map +1 -0
  82. package/dist/queue/manager.js +564 -0
  83. package/dist/queue/manager.js.map +1 -0
  84. package/dist/queue/queue-service.d.ts.map +1 -1
  85. package/dist/queue/queue-service.js +20 -6
  86. package/dist/queue/queue-service.js.map +1 -1
  87. package/dist/queue/types.d.ts +3 -1
  88. package/dist/queue/types.d.ts.map +1 -1
  89. package/dist/queue/types.js.map +1 -1
  90. package/dist/services/dictionary-service.d.ts +35 -0
  91. package/dist/services/dictionary-service.d.ts.map +1 -0
  92. package/dist/services/dictionary-service.js +188 -0
  93. package/dist/services/dictionary-service.js.map +1 -0
  94. package/dist/services/speech-service.d.ts +43 -0
  95. package/dist/services/speech-service.d.ts.map +1 -0
  96. package/dist/services/speech-service.js +236 -0
  97. package/dist/services/speech-service.js.map +1 -0
  98. package/dist/shared-queue-manager.d.ts +119 -0
  99. package/dist/shared-queue-manager.d.ts.map +1 -0
  100. package/dist/shared-queue-manager.js +487 -0
  101. package/dist/shared-queue-manager.js.map +1 -0
  102. package/dist/state/queue-state-machine.d.ts.map +1 -1
  103. package/dist/state/queue-state-machine.js +13 -0
  104. package/dist/state/queue-state-machine.js.map +1 -1
  105. package/dist/state/types.d.ts +2 -0
  106. package/dist/state/types.d.ts.map +1 -1
  107. package/dist/state/types.js.map +1 -1
  108. package/dist/types.d.ts +28 -0
  109. package/dist/types.d.ts.map +1 -1
  110. package/dist/utils.d.ts +16 -0
  111. package/dist/utils.d.ts.map +1 -1
  112. package/dist/utils.js +36 -0
  113. package/dist/utils.js.map +1 -1
  114. package/package.json +1 -1
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /**
3
+ * Effect.ts configuration and infrastructure
4
+ * Provides centralized setup for Effect-based components
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AppLayer = exports.LoggerLive = exports.AppConfigFromEnv = exports.AppConfigLive = exports.AppConfigContext = exports.defaultConfig = void 0;
8
+ const effect_1 = require("effect");
9
+ /**
10
+ * Default application configuration
11
+ */
12
+ exports.defaultConfig = {
13
+ voicevoxUrl: process.env.VOICEVOX_URL || 'http://localhost:50021',
14
+ defaultSpeaker: Number(process.env.VOICEVOX_DEFAULT_SPEAKER) || 1,
15
+ defaultSpeedScale: Number(process.env.VOICEVOX_DEFAULT_SPEED_SCALE) || 1.0,
16
+ defaultImmediate: process.env.VOICEVOX_DEFAULT_IMMEDIATE !== 'false',
17
+ defaultWaitForStart: process.env.VOICEVOX_DEFAULT_WAIT_FOR_START === 'true',
18
+ defaultWaitForEnd: process.env.VOICEVOX_DEFAULT_WAIT_FOR_END === 'true',
19
+ prefetchSize: Number(process.env.VOICEVOX_PREFETCH_SIZE) || 2,
20
+ logLevel: effect_1.LogLevel.Info,
21
+ };
22
+ /**
23
+ * Application configuration context
24
+ */
25
+ exports.AppConfigContext = effect_1.Context.GenericTag('@voicevox/AppConfig');
26
+ /**
27
+ * Layer providing the application configuration
28
+ */
29
+ exports.AppConfigLive = effect_1.Layer.succeed(exports.AppConfigContext, exports.defaultConfig);
30
+ /**
31
+ * Layer providing configuration from environment variables
32
+ */
33
+ exports.AppConfigFromEnv = effect_1.Layer.effect(exports.AppConfigContext, effect_1.Effect.sync(() => exports.defaultConfig));
34
+ /**
35
+ * Logger configuration layer
36
+ */
37
+ exports.LoggerLive = effect_1.Logger.replace(effect_1.Logger.defaultLogger, effect_1.Logger.make(({ logLevel, message }) => {
38
+ const timestamp = new Date().toISOString();
39
+ console.log(`[${timestamp}] [${logLevel}] ${message}`);
40
+ }));
41
+ /**
42
+ * Main application layer combining all infrastructure
43
+ */
44
+ exports.AppLayer = effect_1.Layer.mergeAll(exports.AppConfigLive, exports.LoggerLive);
45
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/effect/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mCAAiF;AAgBjF;;GAEG;AACU,QAAA,aAAa,GAAc;IACtC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,wBAAwB;IACjE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC;IACjE,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,GAAG;IAC1E,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,OAAO;IACpE,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,MAAM;IAC3E,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,MAAM;IACvE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC;IAC7D,QAAQ,EAAE,iBAAQ,CAAC,IAAI;CACxB,CAAA;AAED;;GAEG;AACU,QAAA,gBAAgB,GAAG,gBAAO,CAAC,UAAU,CAAY,qBAAqB,CAAC,CAAA;AAEpF;;GAEG;AACU,QAAA,aAAa,GAAG,cAAK,CAAC,OAAO,CAAC,wBAAgB,EAAE,qBAAa,CAAC,CAAA;AAE3E;;GAEG;AACU,QAAA,gBAAgB,GAAG,cAAK,CAAC,MAAM,CAC1C,wBAAgB,EAChB,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,qBAAa,CAAC,CACjC,CAAA;AAED;;GAEG;AACU,QAAA,UAAU,GAAG,eAAM,CAAC,OAAO,CACtC,eAAM,CAAC,aAAa,EACpB,eAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACpC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,MAAM,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAA;AACxD,CAAC,CAAC,CACH,CAAA;AAED;;GAEG;AACU,QAAA,QAAQ,GAAG,cAAK,CAAC,QAAQ,CAAC,qBAAa,EAAE,kBAAU,CAAC,CAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Effect Context definitions for dependency injection
3
+ * Provides clean separation of concerns and testable components
4
+ */
5
+ import { Context, type Effect } from 'effect';
6
+ import type { VoicevoxApi } from '../api';
7
+ /**
8
+ * VOICEVOX API client context
9
+ */
10
+ export interface VoicevoxApiService {
11
+ readonly getApi: () => VoicevoxApi;
12
+ readonly generateQuery: (text: string, speaker?: number) => Effect.Effect<any, any>;
13
+ readonly synthesize: (query: any, speaker?: number) => Effect.Effect<ArrayBuffer, any>;
14
+ readonly getSpeakers: () => Effect.Effect<any[], any>;
15
+ readonly getSpeakerInfo: (uuid: string) => Effect.Effect<any, any>;
16
+ }
17
+ export declare const VoicevoxApiContext: Context.Tag<VoicevoxApiService, VoicevoxApiService>;
18
+ /**
19
+ * Core speech segment definition
20
+ */
21
+ export interface SpeechSegment {
22
+ readonly text: string;
23
+ readonly speaker?: number;
24
+ }
25
+ /**
26
+ * Playback options
27
+ */
28
+ export interface PlaybackOptions {
29
+ readonly immediate?: boolean;
30
+ readonly waitForStart?: boolean;
31
+ readonly waitForEnd?: boolean;
32
+ }
33
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/effect/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGzC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,WAAW,CAAA;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACnF,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IACtF,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;IACrD,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CACnE;AAED,eAAO,MAAM,kBAAkB,qDAAkE,CAAA;AAEjG;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Effect Context definitions for dependency injection
4
+ * Provides clean separation of concerns and testable components
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.VoicevoxApiContext = void 0;
8
+ const effect_1 = require("effect");
9
+ exports.VoicevoxApiContext = effect_1.Context.GenericTag('@voicevox/VoicevoxApi');
10
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/effect/context.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mCAA6C;AAehC,QAAA,kBAAkB,GAAG,gBAAO,CAAC,UAAU,CAAqB,uBAAuB,CAAC,CAAA"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Effect-based error handling infrastructure
3
+ * Provides structured error types and handling utilities
4
+ */
5
+ import { Effect } from 'effect';
6
+ import { VoicevoxErrorCode } from '../error';
7
+ declare const VoicevoxEffectError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
8
+ readonly _tag: "VoicevoxEffectError";
9
+ } & Readonly<A>;
10
+ /**
11
+ * Base error class for all VOICEVOX Effect errors
12
+ */
13
+ export declare class VoicevoxEffectError extends VoicevoxEffectError_base<{
14
+ readonly code: VoicevoxErrorCode;
15
+ readonly message: string;
16
+ readonly originalError?: unknown;
17
+ }> {
18
+ get name(): string;
19
+ getDetailedMessage(): string;
20
+ }
21
+ declare const ApiConnectionError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
22
+ readonly _tag: "ApiConnectionError";
23
+ } & Readonly<A>;
24
+ /**
25
+ * Specific error types for different operation categories
26
+ */
27
+ export declare class ApiConnectionError extends ApiConnectionError_base<{
28
+ readonly message: string;
29
+ readonly url?: string;
30
+ readonly originalError?: unknown;
31
+ }> {
32
+ }
33
+ declare const QueryGenerationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
34
+ readonly _tag: "QueryGenerationError";
35
+ } & Readonly<A>;
36
+ export declare class QueryGenerationError extends QueryGenerationError_base<{
37
+ readonly message: string;
38
+ readonly text?: string;
39
+ readonly speakerId?: number;
40
+ readonly originalError?: unknown;
41
+ }> {
42
+ }
43
+ declare const SynthesisError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
44
+ readonly _tag: "SynthesisError";
45
+ } & Readonly<A>;
46
+ export declare class SynthesisError extends SynthesisError_base<{
47
+ readonly message: string;
48
+ readonly speakerId?: number;
49
+ readonly originalError?: unknown;
50
+ }> {
51
+ }
52
+ declare const FileOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
53
+ readonly _tag: "FileOperationError";
54
+ } & Readonly<A>;
55
+ export declare class FileOperationError extends FileOperationError_base<{
56
+ readonly message: string;
57
+ readonly filePath?: string;
58
+ readonly operation: 'read' | 'write' | 'delete';
59
+ readonly originalError?: unknown;
60
+ }> {
61
+ }
62
+ declare const PlaybackError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
63
+ readonly _tag: "PlaybackError";
64
+ } & Readonly<A>;
65
+ export declare class PlaybackError extends PlaybackError_base<{
66
+ readonly message: string;
67
+ readonly filePath?: string;
68
+ readonly originalError?: unknown;
69
+ }> {
70
+ }
71
+ declare const QueueOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
72
+ readonly _tag: "QueueOperationError";
73
+ } & Readonly<A>;
74
+ export declare class QueueOperationError extends QueueOperationError_base<{
75
+ readonly message: string;
76
+ readonly itemId?: string;
77
+ readonly operation: 'enqueue' | 'dequeue' | 'clear' | 'process';
78
+ readonly originalError?: unknown;
79
+ }> {
80
+ }
81
+ /**
82
+ * Error constructors for easier creation
83
+ */
84
+ export declare const makeApiConnectionError: (message: string, url?: string, originalError?: unknown) => ApiConnectionError;
85
+ export declare const makeQueryGenerationError: (message: string, text?: string, speakerId?: number, originalError?: unknown) => QueryGenerationError;
86
+ export declare const makeSynthesisError: (message: string, speakerId?: number, originalError?: unknown) => SynthesisError;
87
+ export declare const makeFileOperationError: (message: string, operation: "read" | "write" | "delete", filePath?: string, originalError?: unknown) => FileOperationError;
88
+ export declare const makePlaybackError: (message: string, filePath?: string, originalError?: unknown) => PlaybackError;
89
+ export declare const makeQueueOperationError: (message: string, operation: "enqueue" | "dequeue" | "clear" | "process", itemId?: string, originalError?: unknown) => QueueOperationError;
90
+ /**
91
+ * Effect utilities for error handling
92
+ */
93
+ /**
94
+ * Safely execute an async operation with error mapping
95
+ */
96
+ export declare const safeAsync: <A, E>(asyncFn: () => Promise<A>, errorMapper: (error: unknown) => E) => Effect.Effect<A, E>;
97
+ /**
98
+ * Safely execute a sync operation with error mapping
99
+ */
100
+ export declare const safeSync: <A, E>(syncFn: () => A, errorMapper: (error: unknown) => E) => Effect.Effect<A, E>;
101
+ /**
102
+ * Retry an effect with exponential backoff
103
+ */
104
+ export declare const retryWithBackoff: <A, E>(effect: Effect.Effect<A, E>, maxRetries?: number, baseDelay?: number) => Effect.Effect<A, E>;
105
+ /**
106
+ * Retry an effect with jitter to prevent thundering herd
107
+ */
108
+ export declare const retryWithJitter: <A, E>(effect: Effect.Effect<A, E>, maxRetries?: number, baseDelay?: number) => Effect.Effect<A, E>;
109
+ declare const GeneralError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
110
+ readonly _tag: "GeneralError";
111
+ } & Readonly<A>;
112
+ /**
113
+ * General error for common operations
114
+ */
115
+ export declare class GeneralError extends GeneralError_base<{
116
+ readonly message: string;
117
+ readonly originalError?: unknown;
118
+ }> {
119
+ }
120
+ export declare const makeGeneralError: (message: string, originalError?: unknown) => GeneralError;
121
+ /**
122
+ * Convert an Effect error to a Promise rejection for compatibility
123
+ */
124
+ export declare const toPromise: <A, E>(effect: Effect.Effect<A, E>) => Promise<A>;
125
+ /**
126
+ * Convert a Promise to an Effect with proper error handling
127
+ */
128
+ export declare const fromPromise: <A>(promise: Promise<A>, errorMapper?: (error: unknown) => VoicevoxEffectError) => Effect.Effect<A, VoicevoxEffectError>;
129
+ export {};
130
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/effect/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Effect-based error handling infrastructure
4
+ * Provides structured error types and handling utilities
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.fromPromise = exports.toPromise = exports.makeGeneralError = exports.GeneralError = exports.retryWithJitter = exports.retryWithBackoff = exports.safeSync = exports.safeAsync = exports.makeQueueOperationError = exports.makePlaybackError = exports.makeFileOperationError = exports.makeSynthesisError = exports.makeQueryGenerationError = exports.makeApiConnectionError = exports.QueueOperationError = exports.PlaybackError = exports.FileOperationError = exports.SynthesisError = exports.QueryGenerationError = exports.ApiConnectionError = exports.VoicevoxEffectError = void 0;
8
+ const effect_1 = require("effect");
9
+ const error_1 = require("../error");
10
+ /**
11
+ * Base error class for all VOICEVOX Effect errors
12
+ */
13
+ class VoicevoxEffectError extends effect_1.Data.TaggedError('VoicevoxEffectError') {
14
+ get name() {
15
+ return 'VoicevoxEffectError';
16
+ }
17
+ getDetailedMessage() {
18
+ let details = `${this.message} [${this.code}]`;
19
+ if (this.originalError instanceof Error) {
20
+ details += `\nOriginal Error: ${this.originalError.message}`;
21
+ if (this.originalError.stack) {
22
+ details += `\nStack: ${this.originalError.stack}`;
23
+ }
24
+ }
25
+ return details;
26
+ }
27
+ }
28
+ exports.VoicevoxEffectError = VoicevoxEffectError;
29
+ /**
30
+ * Specific error types for different operation categories
31
+ */
32
+ class ApiConnectionError extends effect_1.Data.TaggedError('ApiConnectionError') {
33
+ }
34
+ exports.ApiConnectionError = ApiConnectionError;
35
+ class QueryGenerationError extends effect_1.Data.TaggedError('QueryGenerationError') {
36
+ }
37
+ exports.QueryGenerationError = QueryGenerationError;
38
+ class SynthesisError extends effect_1.Data.TaggedError('SynthesisError') {
39
+ }
40
+ exports.SynthesisError = SynthesisError;
41
+ class FileOperationError extends effect_1.Data.TaggedError('FileOperationError') {
42
+ }
43
+ exports.FileOperationError = FileOperationError;
44
+ class PlaybackError extends effect_1.Data.TaggedError('PlaybackError') {
45
+ }
46
+ exports.PlaybackError = PlaybackError;
47
+ class QueueOperationError extends effect_1.Data.TaggedError('QueueOperationError') {
48
+ }
49
+ exports.QueueOperationError = QueueOperationError;
50
+ /**
51
+ * Error constructors for easier creation
52
+ */
53
+ const makeApiConnectionError = (message, url, originalError) => new ApiConnectionError({ message, url, originalError });
54
+ exports.makeApiConnectionError = makeApiConnectionError;
55
+ const makeQueryGenerationError = (message, text, speakerId, originalError) => new QueryGenerationError({ message, text, speakerId, originalError });
56
+ exports.makeQueryGenerationError = makeQueryGenerationError;
57
+ const makeSynthesisError = (message, speakerId, originalError) => new SynthesisError({ message, speakerId, originalError });
58
+ exports.makeSynthesisError = makeSynthesisError;
59
+ const makeFileOperationError = (message, operation, filePath, originalError) => new FileOperationError({ message, filePath, operation, originalError });
60
+ exports.makeFileOperationError = makeFileOperationError;
61
+ const makePlaybackError = (message, filePath, originalError) => new PlaybackError({ message, filePath, originalError });
62
+ exports.makePlaybackError = makePlaybackError;
63
+ const makeQueueOperationError = (message, operation, itemId, originalError) => new QueueOperationError({ message, itemId, operation, originalError });
64
+ exports.makeQueueOperationError = makeQueueOperationError;
65
+ /**
66
+ * Effect utilities for error handling
67
+ */
68
+ /**
69
+ * Safely execute an async operation with error mapping
70
+ */
71
+ const safeAsync = (asyncFn, errorMapper) => effect_1.Effect.tryPromise({
72
+ try: asyncFn,
73
+ catch: errorMapper,
74
+ });
75
+ exports.safeAsync = safeAsync;
76
+ /**
77
+ * Safely execute a sync operation with error mapping
78
+ */
79
+ const safeSync = (syncFn, errorMapper) => effect_1.Effect.try({
80
+ try: syncFn,
81
+ catch: errorMapper,
82
+ });
83
+ exports.safeSync = safeSync;
84
+ /**
85
+ * Retry an effect with exponential backoff
86
+ */
87
+ const retryWithBackoff = (effect, maxRetries = 3, baseDelay = 100) => effect.pipe(effect_1.Effect.retry(effect_1.Schedule.exponential(baseDelay).pipe(effect_1.Schedule.compose(effect_1.Schedule.recurs(maxRetries)))));
88
+ exports.retryWithBackoff = retryWithBackoff;
89
+ /**
90
+ * Retry an effect with jitter to prevent thundering herd
91
+ */
92
+ const retryWithJitter = (effect, maxRetries = 3, baseDelay = 100) => effect.pipe(effect_1.Effect.retry(effect_1.Schedule.exponential(baseDelay)
93
+ .pipe(effect_1.Schedule.compose(effect_1.Schedule.recurs(maxRetries)))
94
+ .pipe(effect_1.Schedule.jittered)));
95
+ exports.retryWithJitter = retryWithJitter;
96
+ /**
97
+ * General error for common operations
98
+ */
99
+ class GeneralError extends effect_1.Data.TaggedError('GeneralError') {
100
+ }
101
+ exports.GeneralError = GeneralError;
102
+ const makeGeneralError = (message, originalError) => new GeneralError({ message, originalError });
103
+ exports.makeGeneralError = makeGeneralError;
104
+ /**
105
+ * Convert an Effect error to a Promise rejection for compatibility
106
+ */
107
+ const toPromise = (effect) => effect_1.Effect.runPromise(effect);
108
+ exports.toPromise = toPromise;
109
+ /**
110
+ * Convert a Promise to an Effect with proper error handling
111
+ */
112
+ const fromPromise = (promise, errorMapper = (error) => new VoicevoxEffectError({
113
+ code: error_1.VoicevoxErrorCode.UNKNOWN_ERROR,
114
+ message: error instanceof Error ? error.message : String(error),
115
+ originalError: error,
116
+ })) => effect_1.Effect.tryPromise({
117
+ try: () => promise,
118
+ catch: errorMapper,
119
+ });
120
+ exports.fromPromise = fromPromise;
121
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/effect/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Effect.ts infrastructure for VOICEVOX
3
+ *
4
+ * This module provides a complete Effect-based foundation for:
5
+ * - Structured error handling with detailed error types
6
+ * - Dependency injection through Context system
7
+ * - Resource management with automatic cleanup
8
+ * - Async operation coordination with fibers
9
+ * - Configuration management
10
+ * - Logging and observability
11
+ *
12
+ * Usage:
13
+ * ```ts
14
+ * import { Effect } from 'effect'
15
+ * import { AppLayer, VoicevoxApiContext, safeAsync } from './effect'
16
+ *
17
+ * const program = Effect.gen(function* () {
18
+ * const api = yield* VoicevoxApiContext
19
+ * // ... your Effect-based logic
20
+ * })
21
+ *
22
+ * Effect.runPromise(program.pipe(Effect.provide(AppLayer)))
23
+ * ```
24
+ */
25
+ export * from './config';
26
+ export * from './errors';
27
+ export * from './context';
28
+ export * from './utils';
29
+ export * from './queue-manager';
30
+ export * from './services/api-service';
31
+ export * from './services/file-manager-service';
32
+ export * from './services/audio-player-service';
33
+ export { Effect, Context, Layer, Scope, Logger, Schedule, Duration, Option, Either } from 'effect';
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,cAAc,UAAU,CAAA;AAGxB,cAAc,UAAU,CAAA;AAGxB,cAAc,WAAW,CAAA;AAGzB,cAAc,SAAS,CAAA;AAGvB,cAAc,iBAAiB,CAAA;AAG/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iCAAiC,CAAA;AAG/C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Effect.ts infrastructure for VOICEVOX
4
+ *
5
+ * This module provides a complete Effect-based foundation for:
6
+ * - Structured error handling with detailed error types
7
+ * - Dependency injection through Context system
8
+ * - Resource management with automatic cleanup
9
+ * - Async operation coordination with fibers
10
+ * - Configuration management
11
+ * - Logging and observability
12
+ *
13
+ * Usage:
14
+ * ```ts
15
+ * import { Effect } from 'effect'
16
+ * import { AppLayer, VoicevoxApiContext, safeAsync } from './effect'
17
+ *
18
+ * const program = Effect.gen(function* () {
19
+ * const api = yield* VoicevoxApiContext
20
+ * // ... your Effect-based logic
21
+ * })
22
+ *
23
+ * Effect.runPromise(program.pipe(Effect.provide(AppLayer)))
24
+ * ```
25
+ */
26
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ var desc = Object.getOwnPropertyDescriptor(m, k);
29
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
30
+ desc = { enumerable: true, get: function() { return m[k]; } };
31
+ }
32
+ Object.defineProperty(o, k2, desc);
33
+ }) : (function(o, m, k, k2) {
34
+ if (k2 === undefined) k2 = k;
35
+ o[k2] = m[k];
36
+ }));
37
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
38
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.Either = exports.Option = exports.Duration = exports.Schedule = exports.Logger = exports.Scope = exports.Layer = exports.Context = exports.Effect = void 0;
42
+ // Configuration and setup
43
+ __exportStar(require("./config"), exports);
44
+ // Error handling
45
+ __exportStar(require("./errors"), exports);
46
+ // Context definitions for dependency injection
47
+ __exportStar(require("./context"), exports);
48
+ // Utility functions and common patterns
49
+ __exportStar(require("./utils"), exports);
50
+ // Speech synthesis management
51
+ __exportStar(require("./queue-manager"), exports);
52
+ // Service layers
53
+ __exportStar(require("./services/api-service"), exports);
54
+ __exportStar(require("./services/file-manager-service"), exports);
55
+ __exportStar(require("./services/audio-player-service"), exports);
56
+ // Re-export commonly used Effect modules for convenience
57
+ var effect_1 = require("effect");
58
+ Object.defineProperty(exports, "Effect", { enumerable: true, get: function () { return effect_1.Effect; } });
59
+ Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return effect_1.Context; } });
60
+ Object.defineProperty(exports, "Layer", { enumerable: true, get: function () { return effect_1.Layer; } });
61
+ Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return effect_1.Scope; } });
62
+ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return effect_1.Logger; } });
63
+ Object.defineProperty(exports, "Schedule", { enumerable: true, get: function () { return effect_1.Schedule; } });
64
+ Object.defineProperty(exports, "Duration", { enumerable: true, get: function () { return effect_1.Duration; } });
65
+ Object.defineProperty(exports, "Option", { enumerable: true, get: function () { return effect_1.Option; } });
66
+ Object.defineProperty(exports, "Either", { enumerable: true, get: function () { return effect_1.Either; } });
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;;;;;;;;;;;;AAEH,0BAA0B;AAC1B,2CAAwB;AAExB,iBAAiB;AACjB,2CAAwB;AAExB,+CAA+C;AAC/C,4CAAyB;AAEzB,wCAAwC;AACxC,0CAAuB;AAEvB,8BAA8B;AAC9B,kDAA+B;AAE/B,iBAAiB;AACjB,yDAAsC;AACtC,kEAA+C;AAC/C,kEAA+C;AAE/C,yDAAyD;AACzD,iCAAkG;AAAzF,gGAAA,MAAM,OAAA;AAAE,iGAAA,OAAO,OAAA;AAAE,+FAAA,KAAK,OAAA;AAAE,+FAAA,KAAK,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,gGAAA,MAAM,OAAA"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Simplified Effect-based voice synthesis manager
3
+ * Replaces complex queue system with direct Effect-based processing
4
+ */
5
+ import { Context, Effect, Layer } from 'effect';
6
+ import type { PlaybackOptions, SpeechSegment } from './context';
7
+ import { type VoicevoxApiService } from './context';
8
+ import type { FileOperationError, PlaybackError } from './errors';
9
+ /**
10
+ * Speech synthesis service interface
11
+ */
12
+ export interface SpeechSynthesisService {
13
+ readonly speak: (segments: readonly SpeechSegment[], options?: PlaybackOptions) => Effect.Effect<string, PlaybackError | FileOperationError, VoicevoxApiService>;
14
+ readonly generateAudioFile: (text: string, outputPath: string, speaker?: number, speedScale?: number) => Effect.Effect<string, PlaybackError | FileOperationError, VoicevoxApiService>;
15
+ readonly clearQueue: () => Effect.Effect<void, never>;
16
+ }
17
+ export declare const SpeechSynthesisContext: Context.Tag<SpeechSynthesisService, SpeechSynthesisService>;
18
+ /**
19
+ * Simple speech synthesis implementation
20
+ */
21
+ export declare class SpeechSynthesisServiceImpl implements SpeechSynthesisService {
22
+ speak: (segments: readonly SpeechSegment[], options?: PlaybackOptions) => Effect.Effect<string, PlaybackError | FileOperationError, VoicevoxApiService>;
23
+ generateAudioFile: (text: string, outputPath: string, speaker?: number, speedScale?: number) => Effect.Effect<string, PlaybackError | FileOperationError, VoicevoxApiService>;
24
+ clearQueue: () => Effect.Effect<void, never>;
25
+ }
26
+ /**
27
+ * Create speech synthesis service
28
+ */
29
+ export declare const makeSpeechSynthesisService: () => Effect.Effect<SpeechSynthesisService, never>;
30
+ /**
31
+ * Layer providing speech synthesis service
32
+ */
33
+ export declare const SpeechSynthesisServiceLive: Layer.Layer<SpeechSynthesisService, never, VoicevoxApiService>;
34
+ //# sourceMappingURL=queue-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-manager.d.ts","sourceRoot":"","sources":["../../src/effect/queue-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC/D,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAIjE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;IAChK,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;IACtL,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;CACtD;AAED,eAAO,MAAM,sBAAsB,6DAA0E,CAAA;AAE7G;;GAEG;AACH,qBAAa,0BAA2B,YAAW,sBAAsB;IAEvE,KAAK,GAAI,UAAU,SAAS,aAAa,EAAE,EAAE,UAAU,eAAe,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,kBAAkB,CAAC,CAgBrJ;IAED,iBAAiB,GAAI,MAAM,MAAM,EAAE,YAAY,MAAM,EAAE,UAAU,MAAM,EAAE,aAAa,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,kBAAkB,CAAC,CAkB3K;IAED,UAAU,QAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAO1C;CACF;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAO,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,KAAK,CACpC,CAAA;AAErD;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,EAAE,kBAAkB,CAGrG,CAAA"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * Simplified Effect-based voice synthesis manager
4
+ * Replaces complex queue system with direct Effect-based processing
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SpeechSynthesisServiceLive = exports.makeSpeechSynthesisService = exports.SpeechSynthesisServiceImpl = exports.SpeechSynthesisContext = void 0;
8
+ const effect_1 = require("effect");
9
+ const context_1 = require("./context");
10
+ const utils_1 = require("./utils");
11
+ exports.SpeechSynthesisContext = effect_1.Context.GenericTag('@voicevox/SpeechSynthesis');
12
+ /**
13
+ * Simple speech synthesis implementation
14
+ */
15
+ class SpeechSynthesisServiceImpl {
16
+ constructor() {
17
+ this.speak = (segments, options) => {
18
+ return (0, utils_1.logTimed)('speechSynthesis-speak', effect_1.Effect.gen(function* () {
19
+ const api = yield* context_1.VoicevoxApiContext;
20
+ // Process segments sequentially
21
+ const results = [];
22
+ for (const segment of segments) {
23
+ const result = `音声合成処理: "${segment.text}" (話者: ${segment.speaker || 1})`;
24
+ results.push(result);
25
+ }
26
+ return `音声合成完了: ${results.length} セグメント処理`;
27
+ }));
28
+ };
29
+ this.generateAudioFile = (text, outputPath, speaker, speedScale) => {
30
+ return (0, utils_1.logTimed)(`speechSynthesis-generateFile-${outputPath}`, effect_1.Effect.gen(function* () {
31
+ const api = yield* context_1.VoicevoxApiContext;
32
+ // Generate query and synthesize audio
33
+ const query = yield* api.generateQuery(text, speaker);
34
+ if (speedScale) {
35
+ query.speedScale = speedScale;
36
+ }
37
+ const audioData = yield* api.synthesize(query, speaker);
38
+ // For now, return success message
39
+ return `音声ファイル生成完了: ${outputPath}`;
40
+ }));
41
+ };
42
+ this.clearQueue = () => {
43
+ return (0, utils_1.logTimed)('speechSynthesis-clearQueue', effect_1.Effect.sync(() => {
44
+ // Simple implementation - no queue to clear
45
+ }));
46
+ };
47
+ }
48
+ }
49
+ exports.SpeechSynthesisServiceImpl = SpeechSynthesisServiceImpl;
50
+ /**
51
+ * Create speech synthesis service
52
+ */
53
+ const makeSpeechSynthesisService = () => effect_1.Effect.sync(() => new SpeechSynthesisServiceImpl());
54
+ exports.makeSpeechSynthesisService = makeSpeechSynthesisService;
55
+ /**
56
+ * Layer providing speech synthesis service
57
+ */
58
+ exports.SpeechSynthesisServiceLive = effect_1.Layer.effect(exports.SpeechSynthesisContext, (0, exports.makeSpeechSynthesisService)());
59
+ //# sourceMappingURL=queue-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-manager.js","sourceRoot":"","sources":["../../src/effect/queue-manager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mCAA+C;AAG/C,uCAAuE;AAGvE,mCAAkC;AAWrB,QAAA,sBAAsB,GAAG,gBAAO,CAAC,UAAU,CAAyB,2BAA2B,CAAC,CAAA;AAE7G;;GAEG;AACH,MAAa,0BAA0B;IAAvC;QAEE,UAAK,GAAG,CAAC,QAAkC,EAAE,OAAyB,EAAiF,EAAE;YACvJ,OAAO,IAAA,gBAAQ,EACb,uBAAuB,EACvB,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,4BAAkB,CAAA;gBAErC,gCAAgC;gBAChC,MAAM,OAAO,GAAa,EAAE,CAAA;gBAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,MAAM,GAAG,YAAY,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,CAAA;oBACxE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACtB,CAAC;gBAED,OAAO,WAAW,OAAO,CAAC,MAAM,UAAU,CAAA;YAC5C,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,sBAAiB,GAAG,CAAC,IAAY,EAAE,UAAkB,EAAE,OAAgB,EAAE,UAAmB,EAAiF,EAAE;YAC7K,OAAO,IAAA,gBAAQ,EACb,gCAAgC,UAAU,EAAE,EAC5C,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,4BAAkB,CAAA;gBAErC,sCAAsC;gBACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBACrD,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;gBAC/B,CAAC;gBAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;gBAEvD,kCAAkC;gBAClC,OAAO,eAAe,UAAU,EAAE,CAAA;YACpC,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,eAAU,GAAG,GAA+B,EAAE;YAC5C,OAAO,IAAA,gBAAQ,EACb,4BAA4B,EAC5B,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACf,4CAA4C;YAC9C,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;IACH,CAAC;CAAA;AAhDD,gEAgDC;AAED;;GAEG;AACI,MAAM,0BAA0B,GAAG,GAAiD,EAAE,CAC3F,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAA;AADxC,QAAA,0BAA0B,8BACc;AAErD;;GAEG;AACU,QAAA,0BAA0B,GAAmE,cAAK,CAAC,MAAM,CACpH,8BAAsB,EACtB,IAAA,kCAA0B,GAAE,CAC7B,CAAA"}