@drincs/pixi-vn 1.5.19 → 1.6.1

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 (68) hide show
  1. package/dist/{HistoryChoiceMenuOption-BOHqf57l.d.ts → HistoryChoiceMenuOption-BQc_jAe-.d.ts} +2 -7
  2. package/dist/{HistoryChoiceMenuOption-PzBGGqOC.d.cts → HistoryChoiceMenuOption-ok3Zd5pB.d.cts} +2 -7
  3. package/dist/{StoredClassModel-BgRY86sq.d.ts → StoredClassModel-CUrGRJi0.d.cts} +5 -2
  4. package/dist/{StoredClassModel-BgRY86sq.d.cts → StoredClassModel-D-s0mEVj.d.ts} +5 -2
  5. package/dist/canvas.cjs +2 -3
  6. package/dist/canvas.d.cts +32 -38
  7. package/dist/canvas.d.ts +32 -38
  8. package/dist/canvas.mjs +2 -3
  9. package/dist/characters.cjs +1 -2
  10. package/dist/characters.d.cts +3 -2
  11. package/dist/characters.d.ts +3 -2
  12. package/dist/characters.mjs +1 -2
  13. package/dist/chunk-D45QSSXG.mjs +1 -0
  14. package/dist/chunk-HACUDOYJ.mjs +1 -0
  15. package/dist/chunk-IWAXXFXE.mjs +1 -0
  16. package/dist/chunk-L4IHQ3VT.mjs +1 -0
  17. package/dist/{chunk-JJFD2BVW.mjs → chunk-TTRUPDAB.mjs} +1 -2
  18. package/dist/chunk-XSN6P5JL.mjs +0 -0
  19. package/dist/chunk-ZW3MIPMS.mjs +1 -0
  20. package/dist/core.cjs +1 -1
  21. package/dist/core.d.cts +43 -16
  22. package/dist/core.d.ts +43 -16
  23. package/dist/core.mjs +1 -1
  24. package/dist/history.cjs +1 -2
  25. package/dist/history.d.cts +3 -4
  26. package/dist/history.d.ts +3 -4
  27. package/dist/history.mjs +1 -2
  28. package/dist/index.cjs +2 -3
  29. package/dist/index.d.cts +294 -122
  30. package/dist/index.d.ts +294 -122
  31. package/dist/index.mjs +2 -3
  32. package/dist/motion.cjs +1 -2
  33. package/dist/motion.d.cts +18 -0
  34. package/dist/motion.d.ts +18 -0
  35. package/dist/motion.mjs +1 -2
  36. package/dist/narration.cjs +2 -3
  37. package/dist/narration.d.cts +9 -20
  38. package/dist/narration.d.ts +9 -20
  39. package/dist/narration.mjs +2 -3
  40. package/dist/pixi/browser.js +35 -35
  41. package/dist/sound.cjs +1 -2
  42. package/dist/sound.d.cts +193 -72
  43. package/dist/sound.d.ts +193 -72
  44. package/dist/sound.mjs +1 -2
  45. package/dist/storage.cjs +1 -2
  46. package/dist/storage.d.cts +20 -71
  47. package/dist/storage.d.ts +20 -71
  48. package/dist/storage.mjs +1 -2
  49. package/dist/vite-listener.cjs +1 -2
  50. package/dist/vite-listener.mjs +1 -2
  51. package/dist/vite.cjs +1 -2
  52. package/dist/vite.mjs +1 -2
  53. package/package.json +10 -12
  54. package/dist/chunk-46QBDRUK.mjs +0 -2
  55. package/dist/chunk-52EK6LYW.mjs +0 -2
  56. package/dist/chunk-INJYRMJ3.mjs +0 -2
  57. package/dist/chunk-JJFD2BVW.mjs.map +0 -1
  58. package/dist/chunk-OXRIVLY2.mjs +0 -2
  59. package/dist/chunk-SOFV7YZ5.mjs +0 -2
  60. package/dist/chunk-XZMYXKAY.mjs +0 -2
  61. package/dist/index.cjs.map +0 -1
  62. package/dist/index.mjs.map +0 -1
  63. package/dist/motion.cjs.map +0 -1
  64. package/dist/motion.mjs.map +0 -1
  65. package/dist/vite-listener.cjs.map +0 -1
  66. package/dist/vite-listener.mjs.map +0 -1
  67. package/dist/vite.cjs.map +0 -1
  68. package/dist/vite.mjs.map +0 -1
package/dist/sound.d.ts CHANGED
@@ -1,21 +1,91 @@
1
- import { Options, PlayOptions, Sound as Sound$1, IMediaInstance, SoundLibrary, IMediaContext, Filter, SoundMap, filters as filters$1 } from '@pixi/sound';
1
+ import { IMediaInstance as IMediaInstance$1, PlayOptions, Options, SoundLibrary, Sound, filters as filters$1 } from '@pixi/sound';
2
+
3
+ type IMediaInstance = Omit<IMediaInstance$1, "on" | "destroy" | "init" | "off" | "once" | "toString">;
2
4
 
3
5
  interface SoundOptions extends Omit<Options, "complete" | "loaded" | "sprites" | "source"> {
4
6
  }
5
7
  interface SoundPlayOptions extends Omit<PlayOptions, "complete" | "loaded"> {
8
+ /**
9
+ * The delay in seconds before playback becomes audible or resumes. If specified, the sound will be started immediately but delayed (for example, via pause/unpause) so that it is effectively heard only after the delay. If not specified, the sound will play without any additional delay.
10
+ */
11
+ delay?: number;
12
+ }
13
+ interface SoundPlayOptionsWithChannel extends SoundPlayOptions {
14
+ /**
15
+ * The alias of the audio channel to play the sound on. If the channel does not exist, it will be created.
16
+ * If not specified, the sound will be played on the default channel (see `SoundManagerInterface.defaultChannelAlias`).
17
+ */
18
+ channel?: string;
19
+ }
20
+ interface ChannelOptions extends Pick<SoundPlayOptions, "filters" | "muted" | "volume"> {
21
+ /**
22
+ * Whether this channel is a background channel.
23
+ * Background channels are special channels. Unlike normal channels, media connected to a background channel does not stop when a scene changes, but continues to play in the background.
24
+ */
25
+ background?: boolean;
6
26
  }
7
27
 
8
- declare class Sound extends Sound$1 {
9
- alias?: string;
10
- pause(): this;
11
- resume(): this;
12
- destroy(): void;
13
- stop(): this;
14
- play(options?: string | SoundPlayOptions): IMediaInstance | Promise<IMediaInstance>;
28
+ interface AudioChannelInterface {
29
+ /**
30
+ * The alias of the audio channel. This is used to reference the channel when playing sounds. The alias must be unique among all channels.
31
+ */
32
+ readonly alias: string;
33
+ /**
34
+ * Plays a sound.
35
+ * @param alias The media and sound (asset) alias reference.
36
+ * @param options The options
37
+ * @return The sound instance,
38
+ * this cannot be reused after it is done playing. Returns a Promise if the sound
39
+ * has not yet loaded.
40
+ */
41
+ play(alias: string, options?: SoundPlayOptions): Promise<IMediaInstance>;
42
+ /**
43
+ * Plays a sound.
44
+ * @param mediaAlias The media alias reference.
45
+ * @param soundAlias The sound (asset) alias reference.
46
+ * @param options The options
47
+ * @return The sound instance,
48
+ * this cannot be reused after it is done playing. Returns a Promise if the sound
49
+ * has not yet loaded.
50
+ */
51
+ play(mediaAlias: string, soundAlias: string, options?: SoundPlayOptions): Promise<IMediaInstance>;
52
+ /**
53
+ * The volume of the audio channel, between 0 and 1. This is multiplied with the volume of each sound played through this channel.
54
+ */
55
+ volume: number;
56
+ /**
57
+ * Whether the audio channel is muted. This is combined with the muted state of each sound played through this channel.
58
+ */
59
+ muted: boolean;
15
60
  /**
16
- * https://github.com/pixijs/sound/blob/main/src/Sound.ts#L235
61
+ * The MediaInstances currently playing through this channel. This is read-only and cannot be modified directly. Use the play method to add new MediaInstances to this channel.
17
62
  */
18
- static from(source: string | string[] | SoundOptions | ArrayBuffer | HTMLAudioElement | AudioBuffer): Sound;
63
+ readonly mediaInstances: IMediaInstance[];
64
+ /**
65
+ * Whether this channel is a background channel.
66
+ * Background channels are special channels. Unlike normal channels, media connected to a background channel does not stop when a scene changes, but continues to play in the background.
67
+ */
68
+ readonly background: boolean;
69
+ /**
70
+ * Stops all media currently playing through this channel.
71
+ * @return Instance for chaining.
72
+ */
73
+ stopAll(): this;
74
+ /**
75
+ * Pauses any playing sounds.
76
+ * @return Instance for chaining.
77
+ */
78
+ pauseAll(): this;
79
+ /**
80
+ * Resumes any sounds.
81
+ * @return Instance for chaining.
82
+ */
83
+ resumeAll(): this;
84
+ /**
85
+ * Toggle muted property for all sounds.
86
+ * @return `true` if all sounds are muted.
87
+ */
88
+ toggleMuteAll(): boolean;
19
89
  }
20
90
 
21
91
  type DistortionFilter = {
@@ -72,76 +142,121 @@ interface ExportedSoundPlay extends SoundPlay {
72
142
  * Interface exported sounds
73
143
  */
74
144
  interface SoundGameState {
75
- soundAliasesOrder: string[];
76
145
  filters?: SoundFilterMemory[];
77
- soundsPlaying: {
78
- [key: string]: ExportedSoundPlay;
79
- };
80
146
  /**
81
147
  * @deprecated
82
148
  */
83
- playInStepIndex?: {
84
- [key: string]: SoundPlay;
149
+ soundsPlaying?: {
150
+ [key: string]: ExportedSoundPlay;
85
151
  };
86
- /**
87
- * @deprecated
88
- */
89
- sounds?: ExportedSoundOld;
90
- }
91
- interface ExportedSoundOld {
92
- [key: string]: {
93
- options: SoundOptions;
94
- filters?: SoundFilterMemory[];
152
+ mediaInstances: {
153
+ [key: string]: {
154
+ channelAlias: string;
155
+ soundAlias: string;
156
+ stepCounter: number;
157
+ options: Omit<SoundPlayOptions, "filters"> & {
158
+ filters?: SoundFilterMemory[];
159
+ };
160
+ paused: boolean;
161
+ };
95
162
  };
96
163
  }
97
164
 
98
- declare class SoundManager extends SoundLibrary {
99
- constructor();
100
- get context(): IMediaContext;
101
- get filtersAll(): Filter[];
102
- set filtersAll(filtersAll: Filter[]);
103
- get supported(): boolean;
104
- /**
105
- * https://github.com/pixijs/sound/blob/main/src/SoundLibrary.ts#L187
106
- */
107
- private getOptions;
108
- add(alias: string, options: SoundOptions | string): Sound;
109
- /**
110
- * @deprecated: Use `add(alias: string, options: Options | string | ArrayBuffer | AudioBuffer | HTMLAudioElement | Sound): Sound;` instead.
111
- */
112
- add(map: any, globalOptions?: SoundOptions): SoundMap;
113
- get useLegacy(): boolean;
114
- set useLegacy(legacy: boolean);
115
- get disableAutoPause(): boolean;
116
- set disableAutoPause(autoPause: boolean);
117
- remove(alias: string): this;
118
- get volumeAll(): number;
119
- set volumeAll(volume: number);
120
- get speedAll(): number;
121
- set speedAll(speed: number);
122
- togglePauseAll(): boolean;
165
+ interface SoundManagerInterface extends Omit<SoundLibrary, "init" | "close" | "add" | "play" | "volume" | "speed" | "remove" | "exists" | "find" | "stop" | "pause" | "resume" | "pauseAll" | "resumeAll" | "muteAll" | "unmuteAll" | "stopAll" | "removeAll" | "togglePauseAll"> {
166
+ /**
167
+ * @deprecated You can define sound assets directly in `PIXI.Assets`
168
+ */
169
+ add(alias: string, options: string): Sound;
170
+ /**
171
+ * Plays a sound.
172
+ * @param alias The media and sound (asset) alias reference.
173
+ * @param options The options
174
+ * @return The sound instance,
175
+ * this cannot be reused after it is done playing. Returns a Promise if the sound
176
+ * has not yet loaded.
177
+ */
178
+ play(alias: string, options?: SoundPlayOptionsWithChannel): Promise<IMediaInstance>;
179
+ play(mediaAlias: string, soundAlias: string, options?: SoundPlayOptionsWithChannel): Promise<IMediaInstance>;
180
+ /**
181
+ * Find a media by alias.
182
+ * @param alias - The media alias reference.
183
+ * @return Media object.
184
+ */
185
+ find(alias: string): IMediaInstance | undefined;
186
+ /**
187
+ * Stops a media and removes it from the manager.
188
+ * @param alias - The media alias reference.
189
+ */
190
+ stop(alias: string): void;
191
+ /**
192
+ * Pauses a media.
193
+ * @param alias - The media alias reference.
194
+ * @return Media object.
195
+ */
196
+ pause(alias: string): IMediaInstance | undefined;
197
+ /**
198
+ * Resumes a media.
199
+ * @param alias - The media alias reference.
200
+ * @return Media object.
201
+ */
202
+ resume(alias: string): IMediaInstance | undefined;
203
+ /**
204
+ * Edits the options of an existing sound (asset).
205
+ * If the asset is not yet loaded, it will be loaded with the new options.
206
+ */
207
+ edit(alias: string, options: SoundOptions): Promise<void>;
208
+ /**
209
+ * Pauses any playing sounds.
210
+ * @return Instance for chaining.
211
+ */
123
212
  pauseAll(): this;
213
+ /**
214
+ * Resumes any sounds.
215
+ * @return Instance for chaining.
216
+ */
124
217
  resumeAll(): this;
125
- toggleMuteAll(): boolean;
218
+ /**
219
+ * Mutes all playing sounds.
220
+ * @return Instance for chaining.
221
+ */
126
222
  muteAll(): this;
223
+ /**
224
+ * Unmutes all playing sounds.
225
+ * @return Instance for chaining.
226
+ */
127
227
  unmuteAll(): this;
128
- removeAll(): this;
228
+ /**
229
+ * Stops all sounds.
230
+ * @return Instance for chaining.
231
+ */
129
232
  stopAll(): this;
130
- exists(alias: string, assert?: boolean): boolean;
131
- isPlaying(): boolean;
132
- find(alias: string): Sound;
133
- play(alias: string, options?: SoundPlayOptions | string): IMediaInstance | Promise<IMediaInstance>;
134
- stop(alias: string): Sound;
135
- pause(alias: string): Sound;
136
- resume(alias: string): Sound;
137
- volume(alias: string, volume?: number): number;
138
- speed(alias: string, speed?: number): number;
139
- duration(alias: string): number;
140
- close(): this;
233
+ load(alias: string | string[]): Promise<void>;
234
+ backgroundLoad(alias: string | string[]): Promise<void>;
235
+ backgroundLoadBundle(alias: string): Promise<void>;
141
236
  clear(): void;
237
+ /**
238
+ * Adds a new audio channel with the specified alias(es).
239
+ * @param alias The alias or aliases for the new channel.
240
+ * @returns The created AudioChannelInterface instance, or undefined if a channel with the alias already exists.
241
+ */
242
+ addChannel(alias: string | string[], options?: ChannelOptions): AudioChannelInterface | undefined;
243
+ /**
244
+ * Finds and returns the audio channel associated with the given alias. If the channel does not exist, it will be created.
245
+ * @param alias The alias of the audio channel to find.
246
+ * @returns The AudioChannelInterface instance associated with the alias.
247
+ */
248
+ findChannel(alias: string): AudioChannelInterface;
249
+ /**
250
+ * Returns an array of all existing audio channels.
251
+ */
252
+ readonly channels: AudioChannelInterface[];
253
+ /**
254
+ * The default channel alias to use when playing a sound without specifying a channel.
255
+ * By default, this is set to `GENERAL_CHANNEL` ("general"), but it can be changed to any string; if the channel does not yet exist, it will be created on demand when used.
256
+ */
257
+ defaultChannelAlias: string;
142
258
  export(): SoundGameState;
143
- removeOldSoundAndExport(): SoundGameState;
144
- restore(data: object): void;
259
+ restore(data: object): Promise<void>;
145
260
  }
146
261
 
147
262
  declare const filters: {
@@ -156,15 +271,21 @@ declare const filters: {
156
271
 
157
272
  declare class SoundManagerStatic {
158
273
  private constructor();
159
- static soundAliasesOrder: string[];
160
- static soundsPlaying: {
161
- [key: string]: SoundPlay;
274
+ static mediaInstances: {
275
+ [alias: string]: {
276
+ channelAlias: string;
277
+ soundAlias: string;
278
+ instance: IMediaInstance;
279
+ stepCounter: number;
280
+ options: SoundPlayOptions;
281
+ };
162
282
  };
163
- static sounds: {
164
- [key: string]: Sound;
283
+ static channels: {
284
+ [alias: string]: AudioChannelInterface;
165
285
  };
286
+ static delayTimeoutInstances: [number | NodeJS.Timeout, string][];
166
287
  }
167
288
 
168
- declare const sound: SoundManager;
289
+ declare const sound: SoundManagerInterface;
169
290
 
170
- export { type ExportedSound, Sound, type SoundFilterMemory, type SoundGameState, SoundManagerStatic, type SoundOptions, type SoundPlayOptions, filters, sound };
291
+ export { type AudioChannelInterface, type ChannelOptions, type ExportedSound, type ExportedSoundPlay, type IMediaInstance, type SoundFilterMemory, type SoundGameState, SoundManagerStatic, type SoundOptions, type SoundPlay, type SoundPlayOptions, type SoundPlayOptionsWithChannel, filters, sound };
package/dist/sound.mjs CHANGED
@@ -1,2 +1 @@
1
- import'./chunk-52EK6LYW.mjs';import {d,k as k$1,j}from'./chunk-46QBDRUK.mjs';import {PixiError,GameUnifier}from'@drincs/pixi-vn/core';import {filters,SoundLibrary,sound,Sound}from'@pixi/sound';var r=class{constructor(){}};d(r,"soundAliasesOrder",[]),d(r,"soundsPlaying",{}),d(r,"sounds",{});var f=class d$1 extends Sound{constructor(){super(...arguments);d(this,"alias");}pause(){if(!this.alias)throw new PixiError("unknown_element","The alias is not defined.");let e=r.soundsPlaying[this.alias];if(!e)throw new PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[this.alias]={...e,paused:true},super.pause()}resume(){if(!this.alias)throw new PixiError("unknown_element","The alias is not defined.");let e=r.soundsPlaying[this.alias];if(!e)throw new PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[this.alias]={options:e.options,stepIndex:GameUnifier.stepCounter,paused:false},super.resume()}destroy(){return this.alias&&delete r.soundsPlaying[this.alias],super.destroy()}stop(){if(!this.alias)throw new PixiError("unknown_element","The alias is not defined.");return delete r.soundsPlaying[this.alias],super.stop()}play(e){if(typeof e=="string"&&(this.alias=e),!this.alias)throw new PixiError("unknown_element","The alias is not defined.");return r.soundsPlaying[this.alias]={stepIndex:GameUnifier.stepCounter,options:e,paused:false},super.play(e)}static from(e){let o=Sound.from(e);return new d$1(o.media,o.options)}};function g(d){let t=[];for(let e of d)e.type==="TelephoneFilter"?t.push(new filters.TelephoneFilter):e.type==="StreamFilter"?t.push(new filters.StreamFilter):e.type==="StereoFilter"?t.push(new filters.StereoFilter(e.pan)):e.type==="ReverbFilter"?t.push(new filters.ReverbFilter(e.seconds,e.decay,e.reverse)):e.type==="MonoFilter"?t.push(new filters.MonoFilter):e.type==="EqualizerFilter"?t.push(new filters.EqualizerFilter(e.f32,e.f64,e.f125,e.f250,e.f500,e.f1k,e.f2k,e.f4k,e.f8k,e.f16k)):e.type==="DistortionFilter"?t.push(new filters.DistortionFilter(e.amount)):j.error("Unknown sound filter type");return t}function c(d){if(!d)return;let t=[];for(let e of d)e instanceof filters.TelephoneFilter?t.push({type:"TelephoneFilter"}):e instanceof filters.StreamFilter?t.push({type:"StreamFilter"}):e instanceof filters.StereoFilter?t.push({type:"StereoFilter",pan:e.pan}):e instanceof filters.ReverbFilter?t.push({type:"ReverbFilter",seconds:e.seconds,decay:e.decay,reverse:e.reverse}):e instanceof filters.MonoFilter?t.push({type:"MonoFilter"}):e instanceof filters.EqualizerFilter?t.push({type:"EqualizerFilter",f32:e.f32,f64:e.f64,f125:e.f125,f250:e.f250,f500:e.f500,f1k:e.f1k,f2k:e.f2k,f4k:e.f4k,f8k:e.f8k,f16k:e.f16k}):e instanceof filters.DistortionFilter?t.push({type:"DistortionFilter",amount:e.amount}):j.error("Unknown sound filter type");return t}var v=class extends SoundLibrary{constructor(){super();}get context(){return sound.context}get filtersAll(){return sound.filtersAll}set filtersAll(t){sound.filtersAll=t.filter(e=>!(e instanceof filters.Filter));}get supported(){return sound.supported}getOptions(t,e){let o;return typeof t=="string"?o={url:t}:Array.isArray(t)?o={url:t}:t instanceof ArrayBuffer||t instanceof AudioBuffer||t instanceof HTMLAudioElement?o={source:t}:o=t,o={...o,...e||{}},o}add(t,e){if(typeof t=="object")throw new PixiError("invalid_usage","The method add(map: SoundSourceMap, globalOptions?: Options) is deprecated. Use add(alias: string, options: Options | string | ArrayBuffer | AudioBuffer | HTMLAudioElement | Sound): Sound; instead.");this.exists(t)&&this.remove(t),e instanceof Sound&&(e=e.options);let o;if(e instanceof f)o=e;else {let s=this.getOptions(e||{});o=f.from(s);}return o.alias=t,!r.soundAliasesOrder.includes(t)&&r.soundAliasesOrder.push(t),r.sounds[t]=o,sound.add(t,o),o}get useLegacy(){return sound.useLegacy}set useLegacy(t){sound.useLegacy=t;}get disableAutoPause(){return sound.disableAutoPause}set disableAutoPause(t){sound.disableAutoPause=t;}remove(t){return r.soundAliasesOrder=r.soundAliasesOrder.filter(e=>e!==t),delete r.soundsPlaying[t],delete r.sounds[t],sound.remove(t)}get volumeAll(){return sound.volumeAll}set volumeAll(t){sound.volumeAll=t;}get speedAll(){return sound.speedAll}set speedAll(t){sound.speedAll=t;}togglePauseAll(){return sound.togglePauseAll()}pauseAll(){return sound.pauseAll()}resumeAll(){return sound.resumeAll()}toggleMuteAll(){return sound.toggleMuteAll()}muteAll(){return sound.muteAll()}unmuteAll(){return sound.unmuteAll()}removeAll(){return r.soundAliasesOrder=[],r.soundsPlaying={},r.sounds={},sound.removeAll()}stopAll(){for(let t in r.sounds)r.sounds[t].stop();return r.soundsPlaying={},sound.stopAll()}exists(t,e){return sound.exists(t,e)||t in r.sounds}isPlaying(){return sound.isPlaying()}find(t){let e=r.sounds[t];return e||(e=sound.find(t),e&&(r.sounds[t]=e),e)}play(t,e){if(!this.exists(t))throw new PixiError("unknown_element","The alias is not found in the sound library.");return r.soundsPlaying[t]={stepIndex:GameUnifier.stepCounter,options:e,paused:false},sound.play(t,e)}stop(t){return delete r.soundsPlaying[t],sound.stop(t)}pause(t){let e=r.soundsPlaying[t];if(!e)throw new PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[t]={...e,paused:true},sound.pause(t)}resume(t){let e=r.soundsPlaying[t];if(!e)throw new PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[t]={options:e.options,stepIndex:GameUnifier.stepCounter,paused:false},sound.resume(t)}volume(t,e){return sound.volume(t,e)}speed(t,e){return sound.speed(t,e)}duration(t){return sound.duration(t)}close(){return sound.close()}clear(){this.stopAll();}export(){let t={};for(let e in r.soundsPlaying){let o=r.soundsPlaying[e],s=this.find(e);s&&(t[e]={...o,sound:{options:{...s.options,autoPlay:s.autoPlay,loop:s.loop,preload:s.preload,singleInstance:s.singleInstance,url:s.options.url,volume:s.options.volume},filters:c(s.media.filters)}});}return {soundsPlaying:k$1(t),soundAliasesOrder:k$1(r.soundAliasesOrder),filters:k$1(c(this.filtersAll))}}removeOldSoundAndExport(){return this.export()}restore(t){let e=GameUnifier.stepCounter-1;this.clear();try{if(t.hasOwnProperty("soundAliasesOrder"))r.soundAliasesOrder=t.soundAliasesOrder;else {j.error("The data does not have the properties soundAliasesOrder");return}if(t.hasOwnProperty("filters")){let o=t.filters;o&&(this.filtersAll=g(o));}if(t.hasOwnProperty("playInStepIndex")){let o=t.playInStepIndex;o&&(r.soundsPlaying=o);}if(t.hasOwnProperty("sounds")){let o=t.sounds;for(let s in o){let a=o[s],u=!1,y=this.add(s,{...a.options,autoPlay:!1});if(s in r.soundsPlaying){let i=r.soundsPlaying[s];(a.options.loop||i.options&&typeof i.options=="object"&&i.options.loop||i.stepIndex===e)&&(u=!0),a.filters&&(y.filters=g(a.filters)),u&&y.play();}}}if(t.hasOwnProperty("soundsPlaying")){let o=t.soundsPlaying;for(let s in o){let a=o[s];r.soundsPlaying[s]={paused:a.paused,stepIndex:a.stepIndex,options:a.options};let u=o[s].sound,y=!1,i;if(this.exists(s)?(i=this.find(s),u.options.url=i.options.url,u.options.volume=i.options.volume,i.options=u.options,i.autoPlay=!1,i.filters=u.filters?g(u.filters):[]):i=this.add(s,{...u.options,autoPlay:!1}),s in r.soundsPlaying){let P=r.soundsPlaying[s];(u.options.loop||P.options&&typeof P.options=="object"&&P.options.loop||P.stepIndex===e)&&(y=!0),u.filters&&(i.filters=g(u.filters)),y&&i.play();}}}else {j.error("The data does not have the properties soundsPlaying");return}}catch(o){j.error("Error importing data",o);}}};var k={DistortionFilter:filters.DistortionFilter,EqualizerFilter:filters.EqualizerFilter,MonoFilter:filters.MonoFilter,ReverbFilter:filters.ReverbFilter,StereoFilter:filters.StereoFilter,StreamFilter:filters.StreamFilter,TelephoneFilter:filters.TelephoneFilter};var oe=new v;export{f as Sound,r as SoundManagerStatic,k as filters,oe as sound};//# sourceMappingURL=sound.mjs.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXJTdGF0aWMudHMiLCIuLi9zcmMvc291bmQvY2xhc3Nlcy9Tb3VuZC50cyIsIi4uL3NyYy9zb3VuZC9mdW5jdGlvbnMvc291bmQtdXRpbGl0eS50cyIsIi4uL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXIudHMiLCIuLi9zcmMvc291bmQvY29uc3RhbnRzLnRzIiwiLi4vc3JjL3NvdW5kL2luZGV4LnRzIl0sIm5hbWVzIjpbIlNvdW5kTWFuYWdlclN0YXRpYyIsIl9fcHVibGljRmllbGQiLCJTb3VuZCIsIl9Tb3VuZCIsIlBpeGlTb3VuZCIsIlBpeGlFcnJvciIsIml0ZW0iLCJHYW1lVW5pZmllciIsIm9wdGlvbnMiLCJzb3VyY2UiLCJzIiwiRmlsdGVyTWVtb3J5VG9GaWx0ZXIiLCJmaWx0ZXIiLCJyZXMiLCJmIiwiZmlsdGVycyIsImxvZ2dlciIsIkZpbHRlclRvRmlsdGVyTWVtb3J5IiwiU291bmRNYW5hZ2VyIiwiU291bmRMaWJyYXJ5Iiwic291bmQiLCJmaWx0ZXJzQWxsIiwib3ZlcnJpZGVzIiwiYWxpYXMiLCJzb3VyY2VPcHRpb25zIiwibGVnYWN5IiwiYXV0b1BhdXNlIiwidCIsInZvbHVtZSIsInNwZWVkIiwiYXNzZXJ0Iiwic291bmRFbGVtZW50cyIsImNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IiwiZGF0YSIsInN0ZXBDb3VudGVyIiwicGxheUluU3RlcEluZGV4Iiwic291bmRzIiwiYXV0b1BsYXkiLCJzdGVwIiwic291bmRzUGxheWluZyIsIm9wIiwiZSJdLCJtYXBwaW5ncyI6InFNQUdxQkEsQ0FBQUEsQ0FBckIsS0FBd0MsQ0FDNUIsV0FBQSxFQUFjLENBQUMsQ0FJM0IsRUFISUMsQ0FBQUEsQ0FGaUJELEVBRVYsbUJBQUEsQ0FBOEIsSUFDckNDLENBQUFBLENBSGlCRCxDQUFBQSxDQUdWLGdCQUE4QyxFQUFDLENBQUEsQ0FDdERDLENBQUFBLENBSmlCRCxDQUFBQSxDQUlWLFNBQW1DLEVBQUMsQ0FB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T0FBQSxFQUFXLE9BQU9BLENBQUFBLENBQUssT0FBQSxFQUFZLFVBQVlBLENBQUFBLENBQUssT0FBQSxDQUFRLE1BRzNEQSxDQUFBQSxDQUFLLFNBQUEsR0FBY0osQ0FBQUEsSUFDMUJHLENBQUFBLENBQVcsSUFHWC9CLENBQUFBLENBQUssT0FBQSxHQUNMSSxFQUFFLE9BQUEsQ0FBVUMsQ0FBQUEsQ0FBcUJMLEVBQUssT0FBTyxDQUFBLENBQUEsQ0FHN0MrQixHQUNBM0IsQ0FBQUEsQ0FBRSxJQUFBLEdBRVYsQ0FDSixDQUNKLE1BQU8sQ0FDSE0sQ0FBQUEsQ0FBTyxNQUFNLHFEQUFxRCxDQUFBLENBQ2xFLE1BQ0osQ0FDSixPQUFTeUIsQ0FBQUEsQ0FBRyxDQUNSekIsRUFBTyxLQUFBLENBQU0sc0JBQUEsQ0FBd0J5QixDQUFDLEVBQzFDLENBQ0osQ0FDSixDQUFBLEtDaFlhMUIsQ0FBQUEsQ0FBVSxDQUNuQixpQkFBa0JELE9BQUFBLENBQUUsZ0JBQUEsQ0FDcEIsZUFBQSxDQUFpQkEsT0FBQUEsQ0FBRSxnQkFDbkIsVUFBQSxDQUFZQSxPQUFBQSxDQUFFLFdBQ2QsWUFBQSxDQUFjQSxPQUFBQSxDQUFFLGFBQ2hCLFlBQUEsQ0FBY0EsT0FBQUEsQ0FBRSxhQUNoQixZQUFBLENBQWNBLE9BQUFBLENBQUUsYUFDaEIsZUFBQSxDQUFpQkEsT0FBQUEsQ0FBRSxlQUN2QixFQ0FBLElBQU1NLEdBQVEsSUFBSUYiLCJmaWxlIjoic291bmQubWpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNvdW5kIGZyb20gXCIuL2NsYXNzZXMvU291bmRcIjtcbmltcG9ydCB7IFNvdW5kUGxheSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU291bmRHYW1lU3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmRNYW5hZ2VyU3RhdGljIHtcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbiAgICBzdGF0aWMgc291bmRBbGlhc2VzT3JkZXI6IHN0cmluZ1tdID0gW107XG4gICAgc3RhdGljIHNvdW5kc1BsYXlpbmc6IHsgW2tleTogc3RyaW5nXTogU291bmRQbGF5IH0gPSB7fTtcbiAgICBzdGF0aWMgc291bmRzOiB7IFtrZXk6IHN0cmluZ106IFNvdW5kIH0gPSB7fTtcbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyLCBQaXhpRXJyb3IgfSBmcm9tIFwiQGRyaW5jcy9waXhpLXZuL2NvcmVcIjtcbmltcG9ydCB7IElNZWRpYUluc3RhbmNlLCBTb3VuZCBhcyBQaXhpU291bmQgfSBmcm9tIFwiQHBpeGkvc291bmRcIjtcbmltcG9ydCBTb3VuZE1hbmFnZXJTdGF0aWMgZnJvbSBcIi4uL1NvdW5kTWFuYWdlclN0YXRpY1wiO1xuaW1wb3J0IFNvdW5kT3B0aW9ucywgeyBTb3VuZFBsYXlPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU291bmRPcHRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kIGV4dGVuZHMgUGl4aVNvdW5kIHtcbiAgICBhbGlhcz86IHN0cmluZztcbiAgICBvdmVycmlkZSBwYXVzZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGZvdW5kIGluIHRoZSBwbGF5SW5TdGVwSW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdID0ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHBhdXNlZDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlc3VtZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGZvdW5kIGluIHRoZSBwbGF5SW5TdGVwSW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdID0ge1xuICAgICAgICAgICAgb3B0aW9uczogaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5yZXN1bWUoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWxpYXMpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1t0aGlzLmFsaWFzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBvdmVycmlkZSBzdG9wKCk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuYWxpYXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1t0aGlzLmFsaWFzXTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcGxheShvcHRpb25zPzogc3RyaW5nIHwgU291bmRQbGF5T3B0aW9ucyk6IElNZWRpYUluc3RhbmNlIHwgUHJvbWlzZTxJTWVkaWFJbnN0YW5jZT4ge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYWxpYXMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hbGlhcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBpeGlFcnJvcihcInVua25vd25fZWxlbWVudFwiLCBcIlRoZSBhbGlhcyBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbdGhpcy5hbGlhc10gPSB7XG4gICAgICAgICAgICBzdGVwSW5kZXg6IEdhbWVVbmlmaWVyLnN0ZXBDb3VudGVyLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5wbGF5KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvc291bmQvYmxvYi9tYWluL3NyYy9Tb3VuZC50cyNMMjM1XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tKHNvdXJjZTogc3RyaW5nIHwgc3RyaW5nW10gfCBTb3VuZE9wdGlvbnMgfCBBcnJheUJ1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBBdWRpb0J1ZmZlcik6IFNvdW5kIHtcbiAgICAgICAgbGV0IHMgPSBQaXhpU291bmQuZnJvbShzb3VyY2UpO1xuICAgICAgICByZXR1cm4gbmV3IFNvdW5kKHMubWVkaWEsIHMub3B0aW9ucyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRmlsdGVyLCBmaWx0ZXJzIH0gZnJvbSBcIkBwaXhpL3NvdW5kXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcbmltcG9ydCBTb3VuZEZpbHRlck1lbW9yeSBmcm9tIFwiLi4vdHlwZXMvU291bmRGaWx0ZXJNZW1vcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbHRlck1lbW9yeVRvRmlsdGVyKGZpbHRlcjogU291bmRGaWx0ZXJNZW1vcnlbXSk6IEZpbHRlcltdIHtcbiAgICBsZXQgcmVzOiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGYgb2YgZmlsdGVyKSB7XG4gICAgICAgIGlmIChmLnR5cGUgPT09IFwiVGVsZXBob25lRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlRlbGVwaG9uZUZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiU3RyZWFtRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlN0cmVhbUZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiU3RlcmVvRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlN0ZXJlb0ZpbHRlcihmLnBhbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gXCJSZXZlcmJGaWx0ZXJcIikge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IGZpbHRlcnMuUmV2ZXJiRmlsdGVyKGYuc2Vjb25kcywgZi5kZWNheSwgZi5yZXZlcnNlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSBcIk1vbm9GaWx0ZXJcIikge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IGZpbHRlcnMuTW9ub0ZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiRXF1YWxpemVyRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBmaWx0ZXJzLkVxdWFsaXplckZpbHRlcihmLmYzMiwgZi5mNjQsIGYuZjEyNSwgZi5mMjUwLCBmLmY1MDAsIGYuZjFrLCBmLmYyaywgZi5mNGssIGYuZjhrLCBmLmYxNmspXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gXCJEaXN0b3J0aW9uRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLkRpc3RvcnRpb25GaWx0ZXIoZi5hbW91bnQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIlVua25vd24gc291bmQgZmlsdGVyIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpbHRlclRvRmlsdGVyTWVtb3J5KGZpbHRlcj86IEZpbHRlcltdKTogU291bmRGaWx0ZXJNZW1vcnlbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IHJlczogU291bmRGaWx0ZXJNZW1vcnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGYgb2YgZmlsdGVyKSB7XG4gICAgICAgIGlmIChmIGluc3RhbmNlb2YgZmlsdGVycy5UZWxlcGhvbmVGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlRlbGVwaG9uZUZpbHRlclwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZiBpbnN0YW5jZW9mIGZpbHRlcnMuU3RyZWFtRmlsdGVyKSB7XG4gICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJTdHJlYW1GaWx0ZXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLlN0ZXJlb0ZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiU3RlcmVvRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgcGFuOiBmLnBhbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLlJldmVyYkZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiUmV2ZXJiRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgc2Vjb25kczogZi5zZWNvbmRzLFxuICAgICAgICAgICAgICAgIGRlY2F5OiBmLmRlY2F5LFxuICAgICAgICAgICAgICAgIHJldmVyc2U6IGYucmV2ZXJzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLk1vbm9GaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIk1vbm9GaWx0ZXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLkVxdWFsaXplckZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRXF1YWxpemVyRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgZjMyOiBmLmYzMixcbiAgICAgICAgICAgICAgICBmNjQ6IGYuZjY0LFxuICAgICAgICAgICAgICAgIGYxMjU6IGYuZjEyNSxcbiAgICAgICAgICAgICAgICBmMjUwOiBmLmYyNTAsXG4gICAgICAgICAgICAgICAgZjUwMDogZi5mNTAwLFxuICAgICAgICAgICAgICAgIGYxazogZi5mMWssXG4gICAgICAgICAgICAgICAgZjJrOiBmLmYyayxcbiAgICAgICAgICAgICAgICBmNGs6IGYuZjRrLFxuICAgICAgICAgICAgICAgIGY4azogZi5mOGssXG4gICAgICAgICAgICAgICAgZjE2azogZi5mMTZrLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZiBpbnN0YW5jZW9mIGZpbHRlcnMuRGlzdG9ydGlvbkZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRGlzdG9ydGlvbkZpbHRlclwiLFxuICAgICAgICAgICAgICAgIGFtb3VudDogZi5hbW91bnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIlVua25vd24gc291bmQgZmlsdGVyIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyLCBQaXhpRXJyb3IgfSBmcm9tIFwiQGRyaW5jcy9waXhpLXZuL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgRmlsdGVyLFxuICAgIGZpbHRlcnMsXG4gICAgSU1lZGlhQ29udGV4dCxcbiAgICBJTWVkaWFJbnN0YW5jZSxcbiAgICBTb3VuZCBhcyBQaXhpU291bmQsXG4gICAgc291bmQsXG4gICAgU291bmRMaWJyYXJ5LFxuICAgIFNvdW5kTWFwLFxufSBmcm9tIFwiQHBpeGkvc291bmRcIjtcbmltcG9ydCB7IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcbmltcG9ydCBTb3VuZCBmcm9tIFwiLi9jbGFzc2VzL1NvdW5kXCI7XG5pbXBvcnQgeyBGaWx0ZXJNZW1vcnlUb0ZpbHRlciwgRmlsdGVyVG9GaWx0ZXJNZW1vcnkgfSBmcm9tIFwiLi9mdW5jdGlvbnMvc291bmQtdXRpbGl0eVwiO1xuaW1wb3J0IFNvdW5kR2FtZVN0YXRlLCB7IEV4cG9ydGVkU291bmRQbGF5IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9Tb3VuZEdhbWVTdGF0ZVwiO1xuaW1wb3J0IFNvdW5kT3B0aW9ucywgeyBTb3VuZFBsYXlPcHRpb25zIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9Tb3VuZE9wdGlvbnNcIjtcbmltcG9ydCBTb3VuZE1hbmFnZXJTdGF0aWMgZnJvbSBcIi4vU291bmRNYW5hZ2VyU3RhdGljXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kTWFuYWdlciBleHRlbmRzIFNvdW5kTGlicmFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCBjb250ZXh0KCk6IElNZWRpYUNvbnRleHQge1xuICAgICAgICByZXR1cm4gc291bmQuY29udGV4dDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IGZpbHRlcnNBbGwoKTogRmlsdGVyW10ge1xuICAgICAgICByZXR1cm4gc291bmQuZmlsdGVyc0FsbDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc2V0IGZpbHRlcnNBbGwoZmlsdGVyc0FsbDogRmlsdGVyW10pIHtcbiAgICAgICAgc291bmQuZmlsdGVyc0FsbCA9IGZpbHRlcnNBbGwuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIShmIGluc3RhbmNlb2YgZmlsdGVycy5GaWx0ZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IHN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnN1cHBvcnRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3NvdW5kL2Jsb2IvbWFpbi9zcmMvU291bmRMaWJyYXJ5LnRzI0wxODdcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE9wdGlvbnMoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBdWRpb0J1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBTb3VuZE9wdGlvbnMsXG4gICAgICAgIG92ZXJyaWRlcz86IFNvdW5kT3B0aW9ucyxcbiAgICApOiBTb3VuZE9wdGlvbnMge1xuICAgICAgICBsZXQgb3B0aW9uczogU291bmRPcHRpb25zO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyB1cmw6IHNvdXJjZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBzb3VyY2UgfTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgICAgICAgICBzb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fFxuICAgICAgICAgICAgc291cmNlIGluc3RhbmNlb2YgSFRNTEF1ZGlvRWxlbWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHNvdXJjZSB9IGFzIGFueTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBzb3VyY2UgYXMgU291bmRPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIC4uLihvdmVycmlkZXMgfHwge30pIH07XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGFkZChhbGlhczogc3RyaW5nLCBvcHRpb25zOiBTb3VuZE9wdGlvbnMgfCBzdHJpbmcpOiBTb3VuZDtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZDogVXNlIGBhZGQoYWxpYXM6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucyB8IHN0cmluZyB8IEFycmF5QnVmZmVyIHwgQXVkaW9CdWZmZXIgfCBIVE1MQXVkaW9FbGVtZW50IHwgU291bmQpOiBTb3VuZDtgIGluc3RlYWQuXG4gICAgICovXG4gICAgb3ZlcnJpZGUgYWRkKG1hcDogYW55LCBnbG9iYWxPcHRpb25zPzogU291bmRPcHRpb25zKTogU291bmRNYXA7XG4gICAgcHVibGljIG92ZXJyaWRlIGFkZChhbGlhczogc3RyaW5nLCBzb3VyY2VPcHRpb25zPzogU291bmRPcHRpb25zIHwgc3RyaW5nKTogU291bmQgfCBTb3VuZE1hcCB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJpbnZhbGlkX3VzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJUaGUgbWV0aG9kIGFkZChtYXA6IFNvdW5kU291cmNlTWFwLCBnbG9iYWxPcHRpb25zPzogT3B0aW9ucykgaXMgZGVwcmVjYXRlZC4gVXNlIGFkZChhbGlhczogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zIHwgc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBdWRpb0J1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBTb3VuZCk6IFNvdW5kOyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShhbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlT3B0aW9ucyBpbnN0YW5jZW9mIFBpeGlTb3VuZCkge1xuICAgICAgICAgICAgc291cmNlT3B0aW9ucyA9IHNvdXJjZU9wdGlvbnMub3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBsZXQgczogU291bmQ7XG4gICAgICAgIGlmIChzb3VyY2VPcHRpb25zIGluc3RhbmNlb2YgU291bmQpIHtcbiAgICAgICAgICAgIHMgPSBzb3VyY2VPcHRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnM6IFNvdW5kT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhzb3VyY2VPcHRpb25zIHx8IHt9KTtcbiAgICAgICAgICAgIHMgPSBTb3VuZC5mcm9tKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHMuYWxpYXMgPSBhbGlhcztcblxuICAgICAgICAhU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyLmluY2x1ZGVzKGFsaWFzKSAmJiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRBbGlhc2VzT3JkZXIucHVzaChhbGlhcyk7XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNbYWxpYXNdID0gcztcbiAgICAgICAgc291bmQuYWRkKGFsaWFzLCBzKTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB1c2VMZWdhY3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC51c2VMZWdhY3k7XG4gICAgfVxuICAgIG92ZXJyaWRlIHNldCB1c2VMZWdhY3kobGVnYWN5OiBib29sZWFuKSB7XG4gICAgICAgIHNvdW5kLnVzZUxlZ2FjeSA9IGxlZ2FjeTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IGRpc2FibGVBdXRvUGF1c2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC5kaXNhYmxlQXV0b1BhdXNlO1xuICAgIH1cbiAgICBvdmVycmlkZSBzZXQgZGlzYWJsZUF1dG9QYXVzZShhdXRvUGF1c2U6IGJvb2xlYW4pIHtcbiAgICAgICAgc291bmQuZGlzYWJsZUF1dG9QYXVzZSA9IGF1dG9QYXVzZTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVtb3ZlKGFsaWFzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyLmZpbHRlcigodCkgPT4gdCAhPT0gYWxpYXMpO1xuICAgICAgICBkZWxldGUgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICBkZWxldGUgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc107XG4gICAgICAgIHJldHVybiBzb3VuZC5yZW1vdmUoYWxpYXMpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB2b2x1bWVBbGwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnZvbHVtZUFsbDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc2V0IHZvbHVtZUFsbCh2b2x1bWU6IG51bWJlcikge1xuICAgICAgICBzb3VuZC52b2x1bWVBbGwgPSB2b2x1bWU7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCBzcGVlZEFsbCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gc291bmQuc3BlZWRBbGw7XG4gICAgfVxuICAgIG92ZXJyaWRlIHNldCBzcGVlZEFsbChzcGVlZDogbnVtYmVyKSB7XG4gICAgICAgIHNvdW5kLnNwZWVkQWxsID0gc3BlZWQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvZ2dsZVBhdXNlQWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc291bmQudG9nZ2xlUGF1c2VBbGwoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcGF1c2VBbGwoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzb3VuZC5wYXVzZUFsbCgpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlc3VtZUFsbCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnJlc3VtZUFsbCgpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvZ2dsZU11dGVBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC50b2dnbGVNdXRlQWxsKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIG11dGVBbGwoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzb3VuZC5tdXRlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgdW5tdXRlQWxsKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc291bmQudW5tdXRlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVtb3ZlQWxsKCk6IHRoaXMge1xuICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRBbGlhc2VzT3JkZXIgPSBbXTtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcgPSB7fTtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kcyA9IHt9O1xuICAgICAgICByZXR1cm4gc291bmQucmVtb3ZlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgc3RvcEFsbCgpOiB0aGlzIHtcbiAgICAgICAgZm9yIChsZXQgYWxpYXMgaW4gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kcykge1xuICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc10uc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nID0ge307XG4gICAgICAgIHJldHVybiBzb3VuZC5zdG9wQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgZXhpc3RzKGFsaWFzOiBzdHJpbmcsIGFzc2VydD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLmV4aXN0cyhhbGlhcywgYXNzZXJ0KSB8fCBhbGlhcyBpbiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzO1xuICAgIH1cbiAgICBvdmVycmlkZSBpc1BsYXlpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC5pc1BsYXlpbmcoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZmluZChhbGlhczogc3RyaW5nKTogU291bmQge1xuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNbYWxpYXNdO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaXRlbSA9IHNvdW5kLmZpbmQoYWxpYXMpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc10gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgICBvdmVycmlkZSBwbGF5KGFsaWFzOiBzdHJpbmcsIG9wdGlvbnM/OiBTb3VuZFBsYXlPcHRpb25zIHwgc3RyaW5nKTogSU1lZGlhSW5zdGFuY2UgfCBQcm9taXNlPElNZWRpYUluc3RhbmNlPiB7XG4gICAgICAgIGlmICghdGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc291bmQgbGlicmFyeS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdID0ge1xuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc291bmQucGxheShhbGlhcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHN0b3AoYWxpYXM6IHN0cmluZyk6IFNvdW5kIHtcbiAgICAgICAgZGVsZXRlIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnN0b3AoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSBwYXVzZShhbGlhczogc3RyaW5nKTogU291bmQge1xuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBmb3VuZCBpbiB0aGUgcGxheUluU3RlcEluZGV4LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc10gPSB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgcGF1c2VkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc291bmQucGF1c2UoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSByZXN1bWUoYWxpYXM6IHN0cmluZyk6IFNvdW5kIHtcbiAgICAgICAgbGV0IGl0ZW0gPSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc107XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBpeGlFcnJvcihcInVua25vd25fZWxlbWVudFwiLCBcIlRoZSBhbGlhcyBpcyBub3QgZm91bmQgaW4gdGhlIHBsYXlJblN0ZXBJbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdID0ge1xuICAgICAgICAgICAgb3B0aW9uczogaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb3VuZC5yZXN1bWUoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSB2b2x1bWUoYWxpYXM6IHN0cmluZywgdm9sdW1lPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnZvbHVtZShhbGlhcywgdm9sdW1lKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc3BlZWQoYWxpYXM6IHN0cmluZywgc3BlZWQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gc291bmQuc3BlZWQoYWxpYXMsIHNwZWVkKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZHVyYXRpb24oYWxpYXM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBzb3VuZC5kdXJhdGlvbihhbGlhcyk7XG4gICAgfVxuICAgIG92ZXJyaWRlIGNsb3NlKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc291bmQuY2xvc2UoKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnN0b3BBbGwoKTtcbiAgICB9XG5cbiAgICAvKiBFeHBvcnQgYW5kIEltcG9ydCBNZXRob2RzICovXG5cbiAgICBwdWJsaWMgZXhwb3J0KCk6IFNvdW5kR2FtZVN0YXRlIHtcbiAgICAgICAgbGV0IHNvdW5kRWxlbWVudHM6IHsgW2tleTogc3RyaW5nXTogRXhwb3J0ZWRTb3VuZFBsYXkgfSA9IHt9O1xuICAgICAgICBmb3IgKGxldCBhbGlhcyBpbiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZykge1xuICAgICAgICAgICAgbGV0IHNvdW5kID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmZpbmQoYWxpYXMpO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBzb3VuZEVsZW1lbnRzW2FsaWFzXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc291bmQsXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBpdGVtLmF1dG9QbGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A6IGl0ZW0ubG9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkOiBpdGVtLnByZWxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlSW5zdGFuY2U6IGl0ZW0uc2luZ2xlSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLm9wdGlvbnMudXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZTogaXRlbS5vcHRpb25zLnZvbHVtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBGaWx0ZXJUb0ZpbHRlck1lbW9yeShpdGVtLm1lZGlhLmZpbHRlcnMpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvdW5kc1BsYXlpbmc6IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KHNvdW5kRWxlbWVudHMpLFxuICAgICAgICAgICAgc291bmRBbGlhc2VzT3JkZXI6IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZEFsaWFzZXNPcmRlciksXG4gICAgICAgICAgICBmaWx0ZXJzOiBjcmVhdGVFeHBvcnRhYmxlRWxlbWVudChGaWx0ZXJUb0ZpbHRlck1lbW9yeSh0aGlzLmZpbHRlcnNBbGwpKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHVibGljIHJlbW92ZU9sZFNvdW5kQW5kRXhwb3J0KCk6IFNvdW5kR2FtZVN0YXRlIHtcbiAgICAgICAgLy8gbGV0IHNvdW5kQWxpYXNlc09yZGVyID0gW11cbiAgICAgICAgLy8gZm9yIChsZXQgYWxpYXMgb2YgR2FtZVNvdW5kTWFuYWdlci5zb3VuZEFsaWFzZXNPcmRlcikge1xuICAgICAgICAvLyAgICAgaWYgKHNvdW5kLmV4aXN0cyhhbGlhcykpIHtcbiAgICAgICAgLy8gICAgICAgICBsZXQgcyA9IHNvdW5kLmZpbmQoYWxpYXMpXG4gICAgICAgIC8vICAgICAgICAgaWYgKHMubG9vcCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBzb3VuZEFsaWFzZXNPcmRlci5wdXNoKGFsaWFzKVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBHYW1lU291bmRNYW5hZ2VyLnNvdW5kQWxpYXNlc09yZGVyID0gc291bmRBbGlhc2VzT3JkZXJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0KCk7XG4gICAgfVxuICAgIHB1YmxpYyByZXN0b3JlKGRhdGE6IG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdGVwQ291bnRlciA9IEdhbWVVbmlmaWVyLnN0ZXBDb3VudGVyIC0gMTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzb3VuZEFsaWFzZXNPcmRlclwiKSkge1xuICAgICAgICAgICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZEFsaWFzZXNPcmRlciA9IChkYXRhIGFzIFNvdW5kR2FtZVN0YXRlKVtcInNvdW5kQWxpYXNlc09yZGVyXCJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJUaGUgZGF0YSBkb2VzIG5vdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIHNvdW5kQWxpYXNlc09yZGVyXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJmaWx0ZXJzXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAoZGF0YSBhcyBTb3VuZEdhbWVTdGF0ZSlbXCJmaWx0ZXJzXCJdO1xuICAgICAgICAgICAgICAgIGlmIChmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0FsbCA9IEZpbHRlck1lbW9yeVRvRmlsdGVyKGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJwbGF5SW5TdGVwSW5kZXhcIikpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGxheUluU3RlcEluZGV4ID0gKGRhdGEgYXMgU291bmRHYW1lU3RhdGUpW1wicGxheUluU3RlcEluZGV4XCJdO1xuICAgICAgICAgICAgICAgIGlmIChwbGF5SW5TdGVwSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcgPSBwbGF5SW5TdGVwSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInNvdW5kc1wiKSkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VuZHMgPSAoZGF0YSBhcyBTb3VuZEdhbWVTdGF0ZSlbXCJzb3VuZHNcIl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYWxpYXMgaW4gc291bmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gc291bmRzW2FsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGF1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzID0gdGhpcy5hZGQoYWxpYXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RlcCA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMubG9vcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVwLm9wdGlvbnMgJiYgdHlwZW9mIHN0ZXAub3B0aW9ucyA9PT0gXCJvYmplY3RcIiAmJiBzdGVwLm9wdGlvbnMubG9vcClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcC5zdGVwSW5kZXggPT09IHN0ZXBDb3VudGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5maWx0ZXJzID0gRmlsdGVyTWVtb3J5VG9GaWx0ZXIoaXRlbS5maWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9QbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5wbGF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic291bmRzUGxheWluZ1wiKSkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VuZHNQbGF5aW5nID0gKGRhdGEgYXMgU291bmRHYW1lU3RhdGUpW1wic291bmRzUGxheWluZ1wiXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhbGlhcyBpbiBzb3VuZHNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcCA9IHNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQ6IG9wLnBhdXNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBJbmRleDogb3Auc3RlcEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogb3Aub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHNvdW5kc1BsYXlpbmdbYWxpYXNdLnNvdW5kO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0b1BsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHM6IFNvdW5kO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gdGhpcy5maW5kKGFsaWFzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy51cmwgPSBzLm9wdGlvbnMudXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLnZvbHVtZSA9IHMub3B0aW9ucy52b2x1bWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLm9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLmF1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLmZpbHRlcnMgPSBpdGVtLmZpbHRlcnMgPyBGaWx0ZXJNZW1vcnlUb0ZpbHRlcihpdGVtLmZpbHRlcnMpIDogW107XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gdGhpcy5hZGQoYWxpYXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMgaW4gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGVwID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5sb29wIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXAub3B0aW9ucyAmJiB0eXBlb2Ygc3RlcC5vcHRpb25zID09PSBcIm9iamVjdFwiICYmIHN0ZXAub3B0aW9ucy5sb29wKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwLnN0ZXBJbmRleCA9PT0gc3RlcENvdW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmZpbHRlcnMgPSBGaWx0ZXJNZW1vcnlUb0ZpbHRlcihpdGVtLmZpbHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b1BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnBsYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiVGhlIGRhdGEgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVydGllcyBzb3VuZHNQbGF5aW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgaW1wb3J0aW5nIGRhdGFcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBmaWx0ZXJzIGFzIGYgfSBmcm9tIFwiQHBpeGkvc291bmRcIjtcblxuZXhwb3J0IGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgRGlzdG9ydGlvbkZpbHRlcjogZi5EaXN0b3J0aW9uRmlsdGVyLFxuICAgIEVxdWFsaXplckZpbHRlcjogZi5FcXVhbGl6ZXJGaWx0ZXIsXG4gICAgTW9ub0ZpbHRlcjogZi5Nb25vRmlsdGVyLFxuICAgIFJldmVyYkZpbHRlcjogZi5SZXZlcmJGaWx0ZXIsXG4gICAgU3RlcmVvRmlsdGVyOiBmLlN0ZXJlb0ZpbHRlcixcbiAgICBTdHJlYW1GaWx0ZXI6IGYuU3RyZWFtRmlsdGVyLFxuICAgIFRlbGVwaG9uZUZpbHRlcjogZi5UZWxlcGhvbmVGaWx0ZXIsXG59O1xuIiwiaW1wb3J0IFNvdW5kTWFuYWdlciBmcm9tIFwiLi9Tb3VuZE1hbmFnZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTb3VuZCB9IGZyb20gXCIuL2NsYXNzZXMvU291bmRcIjtcbmV4cG9ydCB7IGZpbHRlcnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXhwb3J0ZWRTb3VuZCwgZGVmYXVsdCBhcyBTb3VuZEdhbWVTdGF0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU291bmRHYW1lU3RhdGVcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTb3VuZE9wdGlvbnMsIFNvdW5kUGxheU9wdGlvbnMgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL1NvdW5kT3B0aW9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTb3VuZE1hbmFnZXJTdGF0aWMgfSBmcm9tIFwiLi9Tb3VuZE1hbmFnZXJTdGF0aWNcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTb3VuZEZpbHRlck1lbW9yeSB9IGZyb20gXCIuL3R5cGVzL1NvdW5kRmlsdGVyTWVtb3J5XCI7XG5leHBvcnQgeyBzb3VuZCB9O1xuXG5jb25zdCBzb3VuZCA9IG5ldyBTb3VuZE1hbmFnZXIoKTtcbiJdfQ==
1
+ import'./chunk-XSN6P5JL.mjs';import {i}from'./chunk-IWAXXFXE.mjs';import {d,j,k}from'./chunk-D45QSSXG.mjs';import {GameUnifier}from'@drincs/pixi-vn/core';import h from'@drincs/pixi-vn/pixi.js';import {filters,sound,Sound}from'@pixi/sound';function S(u,t){return u===void 0&&t===void 0?1:t===void 0?u:u===void 0?t:u*t}var s=class{constructor(){}};d(s,"mediaInstances",{}),d(s,"channels",{}),d(s,"delayTimeoutInstances",[]);function C(u,t,e){return new Proxy(t,{get(n,i,r){switch(i){case "volume":case "muted":{let a=s.mediaInstances[u];return a?a.options[i]:Reflect.get(n,i,r)}default:return Reflect.get(n,i,r)}},set(n,i,r,a){if(u in s.mediaInstances)switch(i){case "volume":return s.mediaInstances[u].options[i]=r,r=S(r,e.channelOptions.volume),Reflect.set(n,i,r,a);case "muted":return s.mediaInstances[u].options[i]=r,e.channelOptions.muted?Reflect.set(n,i,true,a):Reflect.set(n,i,r,a);case "loop":case "delay":case "end":case "filters":case "singleInstance":case "speed":case "sprite":case "start":s.mediaInstances[u].options[i]=r;default:return Reflect.set(n,i,r,a)}return Reflect.set(n,i,r,a)}})}var I=class{constructor(t,e={}){this.alias=t;this.channelOptions=e;}async play(t,e,n){let i,r;if(typeof e=="string"?(i=t,r=e):(i=t,r=t,n=e),i in s.mediaInstances){let o=s.mediaInstances[i];o.instance.stop(),n={...o.options,...n};}let a=C(i,await sound.play(r,{...n??{},filters:[...this.channelOptions.filters||[],...n?.filters||[]],muted:!!this.channelOptions.muted||!!n?.muted,volume:S(n?.volume,this.channelOptions.volume)}),this);if(n?.delay){a.paused=true;let o=setTimeout(()=>{a.paused=false,s.delayTimeoutInstances=s.delayTimeoutInstances.filter(y=>y[0]!==o);},n.delay*1e3);s.delayTimeoutInstances.push([o,i]);}return s.mediaInstances[i]={channelAlias:this.alias,soundAlias:r,instance:a,stepCounter:GameUnifier.stepCounter,options:{volume:n?.volume??1,muted:n?.muted??false,loop:n?.loop??false,...n??{}}},a.on("end",()=>{delete s.mediaInstances[i];}),a}updateMediaVolume(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];if(e.channelAlias===this.alias){let n=e.options.volume??1;e.instance.volume=n;}}}get volume(){return this.channelOptions.volume??1}set volume(t){this.channelOptions.volume=t,this.updateMediaVolume();}updateMediaMuted(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];if(e.channelAlias===this.alias){let n=e.options.muted??false;e.instance.muted=n;}}}get muted(){return this.channelOptions.muted??false}set muted(t){this.channelOptions.muted=t,this.updateMediaMuted();}toggleMuteAll(){return this.muted=!this.muted,this.muted}get mediaInstances(){return Object.values(s.mediaInstances).reduce((t,e)=>(e.channelAlias===this.alias&&t.push(e.instance),t),[])}get background(){return this.channelOptions.background||false}stopAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.channelAlias===this.alias&&(e.instance.stop(),delete s.mediaInstances[t]);}return this}pauseAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.channelAlias===this.alias&&!e.instance.paused&&(e.instance.paused=true);}return this}resumeAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.channelAlias===this.alias&&e.instance.paused&&(e.instance.paused=false);}return this}};function g(u){let t=[];for(let e of u)e.type==="TelephoneFilter"?t.push(new filters.TelephoneFilter):e.type==="StreamFilter"?t.push(new filters.StreamFilter):e.type==="StereoFilter"?t.push(new filters.StereoFilter(e.pan)):e.type==="ReverbFilter"?t.push(new filters.ReverbFilter(e.seconds,e.decay,e.reverse)):e.type==="MonoFilter"?t.push(new filters.MonoFilter):e.type==="EqualizerFilter"?t.push(new filters.EqualizerFilter(e.f32,e.f64,e.f125,e.f250,e.f500,e.f1k,e.f2k,e.f4k,e.f8k,e.f16k)):e.type==="DistortionFilter"?t.push(new filters.DistortionFilter(e.amount)):j.error("Unknown sound filter type");return t}function b(u){if(!u)return;let t=[];for(let e of u)e instanceof filters.TelephoneFilter?t.push({type:"TelephoneFilter"}):e instanceof filters.StreamFilter?t.push({type:"StreamFilter"}):e instanceof filters.StereoFilter?t.push({type:"StereoFilter",pan:e.pan}):e instanceof filters.ReverbFilter?t.push({type:"ReverbFilter",seconds:e.seconds,decay:e.decay,reverse:e.reverse}):e instanceof filters.MonoFilter?t.push({type:"MonoFilter"}):e instanceof filters.EqualizerFilter?t.push({type:"EqualizerFilter",f32:e.f32,f64:e.f64,f125:e.f125,f250:e.f250,f500:e.f500,f1k:e.f1k,f2k:e.f2k,f4k:e.f4k,f8k:e.f8k,f16k:e.f16k}):e instanceof filters.DistortionFilter?t.push({type:"DistortionFilter",amount:e.amount}):j.error("Unknown sound filter type");return t}var A=class{constructor(){d(this,"_defaultChannelAlias",i);}get context(){return sound.context}get filtersAll(){return sound.filtersAll}set filtersAll(t){sound.filtersAll=t.filter(e=>!(e instanceof filters.Filter));}get supported(){return sound.supported}get defaultChannelAlias(){return this._defaultChannelAlias}set defaultChannelAlias(t){this._defaultChannelAlias=t;}add(t,e){return sound.add(t,e)}async edit(t,e){let n=sound.find(t);if(!n&&(await this.load(t),n=sound.find(t),!n)){j.error(`Sound with alias ${t} not found after loading.`);return}n.options=e;}get useLegacy(){return sound.useLegacy}set useLegacy(t){sound.useLegacy=t;}get disableAutoPause(){return sound.disableAutoPause}set disableAutoPause(t){sound.disableAutoPause=t;}get volumeAll(){return sound.volumeAll}set volumeAll(t){sound.volumeAll=t;}get speedAll(){return sound.speedAll}set speedAll(t){sound.speedAll=t;}pauseAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.instance.paused||(e.instance.paused=true);}return this}resumeAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.instance.paused&&(e.instance.paused=false);}return this}toggleMuteAll(){return sound.toggleMuteAll()}muteAll(){return sound.muteAll(),this}unmuteAll(){return sound.unmuteAll(),this}stopAll(){return s.mediaInstances={},sound.stopAll(),this}isPlaying(){return sound.isPlaying()}async play(t,e,n){let i,r;typeof e=="string"?(i=t,r=e):(i=t,r=t,n=e);let{channel:a=this.defaultChannelAlias,...o}=n??{};return await this.findChannel(a).play(i,r,o)}find(t){return s.mediaInstances[t]?.instance}stop(t){let e=this.find(t);e?(e.stop(),delete s.mediaInstances[t]):j.warn(`No media instance found with alias ${t} to stop.`);}pause(t){let e=this.find(t);if(!e){j.warn(`No media instance found with alias ${t} to pause.`);return}return e.paused=true,e}resume(t){let e=this.find(t);if(!e){j.warn(`No media instance found with alias ${t} to resume.`);return}return e.paused=false,e}duration(t){return sound.duration(t)}async load(t){await h.Assets.load(t),typeof t=="string"&&(t=[t]),t.forEach(e=>{let n=h.Assets.get(e);sound.exists(e)||sound.add(e,n);});}backgroundLoad(t){let e=h.Assets.backgroundLoad(t);return e.then(()=>{typeof t=="string"&&(t=[t]),t.forEach(n=>{let i=h.Assets.get(n);sound.exists(n)||sound.add(n,i);});}),e}backgroundLoadBundle(t){let e=h.Assets.backgroundLoadBundle(t);return e.then(async()=>{try{let n=await h.Assets.loadBundle(t);for(let i in n){let r=n[i];r instanceof Sound&&(sound.exists(i)||sound.add(i,r));}}catch(n){j.error("Error loading sound bundle",n);}}),e}clear(){this.stopAll();}addChannel(t,e={}){if(typeof t!="string"){t.forEach(i=>{let r={...e,filters:e.filters?[...e.filters]:e.filters};this.addChannel(i,r);});return}if(s.channels[t]){j.warn(`Channel with alias ${t} already exists.`);return}let n=new I(t,e);return s.channels[t]=n,n}findChannel(t){let e=s.channels[t];return e||this.addChannel(t)}get channels(){return Object.values(s.channels)}export(){let t=Object.entries(s.mediaInstances).reduce((e,[n,i])=>(e[n]={channelAlias:i.channelAlias,soundAlias:i.soundAlias,stepCounter:i.stepCounter,options:{...i.options,filters:b(i.options.filters)},paused:i.instance.paused},e),{});return {mediaInstances:k(t),filters:k(b(this.filtersAll))}}async restore(t){try{if(t.hasOwnProperty("soundsPlaying")){let e=t.soundsPlaying;if(e){let n=Object.keys(e).map(async i=>{await this.load(i),await this.play(i);});await Promise.all(n);}}if(t.hasOwnProperty("mediaInstances")){let e=t.mediaInstances;if(e){let n=new Set,i=Object.values(e).map(async({soundAlias:a,channelAlias:o})=>(n.add(o),await this.load(a)));await Promise.all(i),this.channels.forEach(a=>{(!a.background||!n.has(a.alias))&&a.stopAll();});let r=Object.keys(e).map(async a=>{let o=e[a],y=this.findChannel(o.channelAlias);if(y.background)if(o.stepCounter===GameUnifier.stepCounter||!this.find(a)){let d=await y.play(a,o.soundAlias,{...o.options,filters:g(o.options.filters||[])});o.paused&&(d.paused=o.paused);}else {let d=this.find(a);d&&(s.mediaInstances[a].options={...o.options,filters:g(o.options.filters||[])},d.paused!==o.paused&&(d.paused=o.paused),d.loop!==(o.options.loop||!1)&&(d.loop=o.options.loop||!1),d.volume!==(o.options.volume??1)&&(d.volume=o.options.volume??1),d.muted!==(o.options.muted||!1)&&(d.muted=o.options.muted||!1),d.speed!==(o.options.speed??1)&&(d.speed=o.options.speed??1));}else {let d=await y.play(a,o.soundAlias,{...o.options,filters:g(o.options.filters||[])});o.paused&&(d.paused=o.paused);}});await Promise.all(r);}}if(t.hasOwnProperty("filters")){let e=t.filters;e&&(this.filtersAll=g(e));}}catch(e){j.error("Error importing data",e);}}};var v={DistortionFilter:filters.DistortionFilter,EqualizerFilter:filters.EqualizerFilter,MonoFilter:filters.MonoFilter,ReverbFilter:filters.ReverbFilter,StereoFilter:filters.StereoFilter,StreamFilter:filters.StreamFilter,TelephoneFilter:filters.TelephoneFilter};var ce=new A;GameUnifier.addOnPreContinue(async()=>{try{s.delayTimeoutInstances.forEach(u=>{clearTimeout(u[0]);let t=s.mediaInstances[u[1]];t&&(t.instance.paused=!1);}),s.delayTimeoutInstances=[],Object.values(s.channels).forEach(u=>{u.background||u.stopAll();});}catch{}});export{s as SoundManagerStatic,v as filters,ce as sound};