@opendaw/studio-core 0.0.25 → 0.0.27

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 (118) hide show
  1. package/dist/AudioDevices.js +4 -4
  2. package/dist/AudioOfflineRenderer.d.ts.map +1 -1
  3. package/dist/AudioOfflineRenderer.js +9 -5
  4. package/dist/Engine.d.ts +4 -4
  5. package/dist/Engine.d.ts.map +1 -1
  6. package/dist/EngineFacade.d.ts +4 -4
  7. package/dist/EngineFacade.d.ts.map +1 -1
  8. package/dist/EngineWorklet.d.ts +4 -4
  9. package/dist/EngineWorklet.d.ts.map +1 -1
  10. package/dist/RecordingWorklet.d.ts +1 -1
  11. package/dist/RecordingWorklet.d.ts.map +1 -1
  12. package/dist/RecordingWorklet.js +1 -1
  13. package/dist/WavFile.d.ts +10 -0
  14. package/dist/WavFile.d.ts.map +1 -0
  15. package/dist/WavFile.js +94 -0
  16. package/dist/WorkerAgents.d.ts +1 -1
  17. package/dist/WorkerAgents.d.ts.map +1 -1
  18. package/dist/WorkerAgents.js +15 -3
  19. package/dist/capture/Capture.d.ts +1 -1
  20. package/dist/capture/Capture.d.ts.map +1 -1
  21. package/dist/capture/CaptureAudio.d.ts.map +1 -1
  22. package/dist/capture/CaptureAudio.js +4 -4
  23. package/dist/capture/CaptureDevices.d.ts +1 -1
  24. package/dist/capture/CaptureDevices.d.ts.map +1 -1
  25. package/dist/capture/CaptureMidi.d.ts.map +1 -1
  26. package/dist/capture/CaptureMidi.js +6 -5
  27. package/dist/capture/Recording.d.ts.map +1 -1
  28. package/dist/capture/Recording.js +3 -3
  29. package/dist/clouds/CloudAuthManager.d.ts +10 -0
  30. package/dist/clouds/CloudAuthManager.d.ts.map +1 -0
  31. package/dist/clouds/CloudAuthManager.js +195 -0
  32. package/dist/clouds/CloudBackup.d.ts +8 -0
  33. package/dist/clouds/CloudBackup.d.ts.map +1 -0
  34. package/dist/clouds/CloudBackup.js +55 -0
  35. package/dist/clouds/CloudBackupProjects.d.ts +10 -0
  36. package/dist/clouds/CloudBackupProjects.d.ts.map +1 -0
  37. package/dist/clouds/CloudBackupProjects.js +167 -0
  38. package/dist/clouds/CloudBackupSamples.d.ts +13 -0
  39. package/dist/clouds/CloudBackupSamples.d.ts.map +1 -0
  40. package/dist/clouds/CloudBackupSamples.js +129 -0
  41. package/dist/clouds/CloudHandler.d.ts +9 -0
  42. package/dist/clouds/CloudHandler.d.ts.map +1 -0
  43. package/dist/clouds/CloudHandler.js +1 -0
  44. package/dist/clouds/CloudService.d.ts +2 -0
  45. package/dist/clouds/CloudService.d.ts.map +1 -0
  46. package/dist/clouds/CloudService.js +1 -0
  47. package/dist/clouds/DropboxHandler.d.ts +12 -0
  48. package/dist/clouds/DropboxHandler.d.ts.map +1 -0
  49. package/dist/clouds/DropboxHandler.js +83 -0
  50. package/dist/clouds/GoogleDriveHandler.d.ts +12 -0
  51. package/dist/clouds/GoogleDriveHandler.d.ts.map +1 -0
  52. package/dist/clouds/GoogleDriveHandler.js +256 -0
  53. package/dist/dawproject/DawProject.d.ts +2 -2
  54. package/dist/dawproject/DawProject.d.ts.map +1 -1
  55. package/dist/dawproject/DawProjectExporter.js +2 -2
  56. package/dist/dawproject/DawProjectImport.d.ts +1 -1
  57. package/dist/dawproject/DawProjectImport.d.ts.map +1 -1
  58. package/dist/dawproject/DeviceIO.d.ts +1 -1
  59. package/dist/dawproject/DeviceIO.d.ts.map +1 -1
  60. package/dist/dawproject/DeviceIO.js +2 -1
  61. package/dist/index.d.ts +18 -12
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +18 -12
  64. package/dist/midi/MIDILearning.d.ts +26 -0
  65. package/dist/midi/MIDILearning.d.ts.map +1 -0
  66. package/dist/midi/MIDILearning.js +88 -0
  67. package/dist/midi/MIDIMessageSubscriber.d.ts +5 -0
  68. package/dist/midi/MIDIMessageSubscriber.d.ts.map +1 -0
  69. package/dist/midi/MIDIMessageSubscriber.js +40 -0
  70. package/dist/midi/MidiDevices.d.ts.map +1 -0
  71. package/dist/{MidiDevices.js → midi/MidiDevices.js} +6 -5
  72. package/dist/processors.js +3 -3
  73. package/dist/processors.js.map +4 -4
  74. package/dist/project/Project.d.ts +2 -0
  75. package/dist/project/Project.d.ts.map +1 -1
  76. package/dist/project/Project.js +7 -1
  77. package/dist/project/ProjectApi.d.ts +9 -1
  78. package/dist/project/ProjectApi.d.ts.map +1 -1
  79. package/dist/project/ProjectApi.js +67 -3
  80. package/dist/project/ProjectBundle.d.ts +1 -1
  81. package/dist/project/ProjectBundle.d.ts.map +1 -1
  82. package/dist/project/ProjectBundle.js +10 -12
  83. package/dist/project/ProjectPaths.d.ts +4 -4
  84. package/dist/project/ProjectPaths.d.ts.map +1 -1
  85. package/dist/project/ProjectProfile.d.ts +2 -2
  86. package/dist/project/ProjectProfile.d.ts.map +1 -1
  87. package/dist/project/ProjectProfile.js +3 -3
  88. package/dist/project/ProjectSignals.d.ts +6 -0
  89. package/dist/project/ProjectSignals.d.ts.map +1 -0
  90. package/dist/project/ProjectSignals.js +4 -0
  91. package/dist/project/ProjectStorage.d.ts +23 -0
  92. package/dist/project/ProjectStorage.d.ts.map +1 -0
  93. package/dist/project/ProjectStorage.js +59 -0
  94. package/dist/samples/MainThreadSampleLoader.d.ts +2 -2
  95. package/dist/samples/MainThreadSampleLoader.d.ts.map +1 -1
  96. package/dist/samples/MainThreadSampleLoader.js +2 -3
  97. package/dist/samples/MainThreadSampleManager.d.ts +4 -4
  98. package/dist/samples/MainThreadSampleManager.d.ts.map +1 -1
  99. package/dist/samples/OpenSampleAPI.d.ts +4 -2
  100. package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
  101. package/dist/samples/OpenSampleAPI.js +19 -2
  102. package/dist/samples/SampleAPI.d.ts +2 -2
  103. package/dist/samples/SampleAPI.d.ts.map +1 -1
  104. package/dist/samples/SampleImporter.d.ts +1 -1
  105. package/dist/samples/SampleImporter.d.ts.map +1 -1
  106. package/dist/samples/SampleProvider.d.ts +1 -1
  107. package/dist/samples/SampleProvider.d.ts.map +1 -1
  108. package/dist/samples/SampleStorage.d.ts +7 -5
  109. package/dist/samples/SampleStorage.d.ts.map +1 -1
  110. package/dist/samples/SampleStorage.js +31 -17
  111. package/dist/workers.js +2 -2
  112. package/dist/workers.js.map +4 -4
  113. package/package.json +14 -14
  114. package/dist/MidiDevices.d.ts.map +0 -1
  115. package/dist/Wav.d.ts +0 -6
  116. package/dist/Wav.d.ts.map +0 -1
  117. package/dist/Wav.js +0 -46
  118. /package/dist/{MidiDevices.d.ts → midi/MidiDevices.d.ts} +0 -0
@@ -10,6 +10,7 @@ import { CaptureDevices } from "../capture/CaptureDevices";
10
10
  import { EngineFacade } from "../EngineFacade";
11
11
  import { EngineWorklet } from "../EngineWorklet";
12
12
  import { AudioWorklets } from "../AudioWorklets";
13
+ import { MIDILearning } from "../midi/MIDILearning";
13
14
  export type RestartWorklet = {
14
15
  unload: Procedure<unknown>;
15
16
  load: Procedure<EngineWorklet>;
@@ -33,6 +34,7 @@ export declare class Project implements BoxAdaptersContext, Terminable, Terminab
33
34
  readonly userEditingManager: UserEditingManager;
34
35
  readonly parameterFieldAdapters: ParameterFieldAdapters;
35
36
  readonly liveStreamReceiver: LiveStreamReceiver;
37
+ readonly midiLearning: MIDILearning;
36
38
  readonly mixer: Mixer;
37
39
  readonly engine: EngineFacade;
38
40
  private constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { ProjectMigration } from "./ProjectMigration";
10
10
  import { CaptureDevices } from "../capture/CaptureDevices";
11
11
  import { EngineFacade } from "../EngineFacade";
12
12
  import { Recording } from "../capture/Recording";
13
+ import { MIDILearning } from "../midi/MIDILearning";
13
14
  // Main Entry Point for a Project
14
15
  export class Project {
15
16
  static new(env) {
@@ -75,6 +76,7 @@ export class Project {
75
76
  userEditingManager;
76
77
  parameterFieldAdapters;
77
78
  liveStreamReceiver;
79
+ midiLearning;
78
80
  mixer;
79
81
  engine = new EngineFacade();
80
82
  constructor(env, boxGraph, { rootBox, userInterfaceBox, masterBusBox, masterAudioUnit, timelineBox }) {
@@ -94,6 +96,7 @@ export class Project {
94
96
  this.userEditingManager.follow(this.userInterfaceBox);
95
97
  this.selection.switch(this.userInterfaceBox.selection);
96
98
  this.liveStreamReceiver = this.#terminator.own(new LiveStreamReceiver());
99
+ this.midiLearning = this.#terminator.own(new MIDILearning(this));
97
100
  this.captureDevices = this.#terminator.own(new CaptureDevices(this));
98
101
  this.mixer = new Mixer(this.rootBoxAdapter.audioUnits);
99
102
  console.debug(`Project was created on ${this.rootBoxAdapter.created.toString()}`);
@@ -165,5 +168,8 @@ export class Project {
165
168
  return output.toArrayBuffer();
166
169
  }
167
170
  copy() { return Project.load(this.#env, this.toArrayBuffer()); }
168
- terminate() { this.#terminator.terminate(); }
171
+ terminate() {
172
+ console.debug("Project terminated");
173
+ this.#terminator.terminate();
174
+ }
169
175
  }
@@ -3,7 +3,7 @@ import { ppqn } from "@opendaw/lib-dsp";
3
3
  import { Field, PointerField } from "@opendaw/lib-box";
4
4
  import { AudioUnitType, Pointers } from "@opendaw/studio-enums";
5
5
  import { AudioBusBox, AudioUnitBox, NoteEventBox, NoteEventCollectionBox, NoteRegionBox, TrackBox, ValueRegionBox } from "@opendaw/studio-boxes";
6
- import { AnyClipBox, AudioUnitBoxAdapter, EffectPointerType, IconSymbol, IndexedAdapterCollectionListener } from "@opendaw/studio-adapters";
6
+ import { AnyClipBox, AnyRegionBox, AudioUnitBoxAdapter, EffectPointerType, IconSymbol, IndexedAdapterCollectionListener } from "@opendaw/studio-adapters";
7
7
  import { Project } from "./Project";
8
8
  import { InstrumentFactory } from "../InstrumentFactory";
9
9
  import { InstrumentProduct } from "../InstrumentProduct";
@@ -54,5 +54,13 @@ export declare class ProjectApi {
54
54
  createTrackRegion(trackBox: TrackBox, position: ppqn, duration: ppqn, { name, hue }?: ClipRegionOptions): Option<NoteRegionBox> | Option<ValueRegionBox>;
55
55
  createNoteEvent({ owner, position, duration, velocity, pitch, chance, cent }: NoteEventParams): NoteEventBox;
56
56
  deleteAudioUnit(audioUnitBox: AudioUnitBox): void;
57
+ extractIntoNew(audioUnits: ReadonlyArray<AudioUnitBox>, option?: {
58
+ includeAux?: boolean;
59
+ includeBus?: boolean;
60
+ }): Project;
61
+ mergeInto(...sources: ReadonlyArray<{
62
+ source: Project | AnyRegionBox;
63
+ insertAt: ppqn;
64
+ }>): Promise<void>;
57
65
  }
58
66
  //# sourceMappingURL=ProjectApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectApi.d.ts","sourceRoot":"","sources":["../../src/project/ProjectApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProjectApi.d.ts","sourceRoot":"","sources":["../../src/project/ProjectApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAOH,KAAK,EACL,GAAG,EACH,QAAQ,EACR,MAAM,EAEN,YAAY,EAEf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAyB,KAAK,EAAc,YAAY,EAAc,MAAM,kBAAkB,CAAA;AACrG,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EACH,WAAW,EAEX,YAAY,EAMZ,YAAY,EACZ,sBAAsB,EACtB,aAAa,EAEb,QAAQ,EAGR,cAAc,EACjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACH,UAAU,EACV,YAAY,EACZ,mBAAmB,EAEnB,iBAAiB,EACjB,UAAU,EACV,gCAAgC,EAEnC,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAA;AAGtC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE;QAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;KAAE,CAAA;IAC7D,QAAQ,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,KAAK,EAAE,GAAG,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,MAAM,CAAC,EAAE,GAAG,CAAA;CACf,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,YAAY,CAAC,EAAE,IAAI,CAAA;IACnB,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,eAAe,CAAC,EAAE,sBAAsB,CAAA;IACxC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAGD,qBAAa,UAAU;;gBAGP,OAAO,EAAE,OAAO;IAE5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,YAAY;IAIhE,6BAA6B,CAAC,QAAQ,EAAE,gCAAgC,CAAC,mBAAmB,CAAC,GAAG,YAAY;IAI5G,gBAAgB,CAAC,EAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAC,EAAE,iBAAiB,EAChE,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,GAAE,iBAAsB,GAAG,iBAAiB;IAqBhF,cAAc,CAAC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,MAAM,GAAG,WAAW;IAsB1C,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,GAAE,GAA6B,GAAG,SAAS;IAI5H,eAAe,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,GAAE,GAA6B,GAAG,QAAQ;IAIjG,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,GAAE,GAA6B,GAAG,QAAQ;IAIlG,qBAAqB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAE,GAA6B,GAAG,QAAQ;IAI3I,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,EAAC,IAAI,EAAE,GAAG,EAAC,GAAE,iBAAsB,GAAG,MAAM,CAAC,UAAU,CAAC;IAgCvG,gBAAgB,CAAC,EACI,QAAQ,EACR,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,YAAY,EACxB,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,IAAI,EAAE,GAAG,EAClB,EAAE,gBAAgB,GAAG,aAAa;IAoBpD,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAC,IAAI,EAAE,GAAG,EAAC,GAAE,iBAAsB;IAkCzG,eAAe,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAC,EAAE,eAAe,GAAG,YAAY;IAe1G,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAOjD,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EACvC,MAAM,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO;IA8DpF,SAAS,CAAC,GAAG,OAAO,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,OAAO,GAAG,YAAY,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAyD1G"}
@@ -1,9 +1,10 @@
1
- import { asDefined, asInstanceOf, assert, clamp, Option, Strings, UUID } from "@opendaw/lib-std";
1
+ import { Arrays, asDefined, asInstanceOf, assert, ByteArrayInput, clamp, Option, Strings, UUID } from "@opendaw/lib-std";
2
2
  import { PPQN } from "@opendaw/lib-dsp";
3
- import { IndexedBox, StringField } from "@opendaw/lib-box";
3
+ import { IndexedBox, PointerField, StringField } from "@opendaw/lib-box";
4
4
  import { AudioUnitType } from "@opendaw/studio-enums";
5
- import { AudioBusBox, AudioUnitBox, CaptureAudioBox, CaptureMidiBox, NoteClipBox, NoteEventBox, NoteEventCollectionBox, NoteRegionBox, TrackBox, ValueClipBox, ValueEventCollectionBox, ValueRegionBox } from "@opendaw/studio-boxes";
5
+ import { AudioBusBox, AudioFileBox, AudioUnitBox, AuxSendBox, CaptureAudioBox, CaptureMidiBox, NoteClipBox, NoteEventBox, NoteEventCollectionBox, NoteRegionBox, SelectionBox, TrackBox, ValueClipBox, ValueEventCollectionBox, ValueRegionBox } from "@opendaw/studio-boxes";
6
6
  import { IconSymbol, TrackType } from "@opendaw/studio-adapters";
7
+ import { Project } from "./Project";
7
8
  import { ColorCodes } from "../ColorCodes";
8
9
  import { AudioUnitOrdering } from "../AudioUnitOrdering";
9
10
  // noinspection JSUnusedGlobalSymbols
@@ -177,6 +178,69 @@ export class ProjectApi {
177
178
  IndexedBox.removeOrder(rootBox.audioUnits, audioUnitBox.index.getValue());
178
179
  audioUnitBox.delete();
179
180
  }
181
+ // This version ignores selected items, buses and aux-sends. All outputs will be redirected to the primary output.
182
+ extractIntoNew(audioUnits, option = {}) {
183
+ console.time("extractIntoNew");
184
+ assert(Arrays.satisfy(audioUnits, (a, b) => a.graph === b.graph), "AudioUnits must share the same BoxGraph");
185
+ // TODO Implement include options.
186
+ assert(!option.includeAux && !option.includeBus, "Options are not yet implemented");
187
+ const targetProject = Project.new(this.#project.env);
188
+ const { boxGraph, masterBusBox, masterAudioUnit, rootBox } = targetProject;
189
+ const dependencies = audioUnits
190
+ .flatMap(box => Array.from(box.graph.dependenciesOf(box).boxes))
191
+ .filter(box => box.name !== SelectionBox.ClassName && box.name !== AuxSendBox.ClassName);
192
+ const uuidMap = UUID.newSet(({ source }) => source);
193
+ const allAdded = uuidMap.addMany([
194
+ ...audioUnits
195
+ .filter(({ output: { targetAddress } }) => targetAddress.nonEmpty())
196
+ .map(box => ({
197
+ source: box.output.targetAddress.unwrap().uuid,
198
+ target: masterBusBox.address.uuid
199
+ })),
200
+ ...audioUnits
201
+ .map(box => ({
202
+ source: box.collection.targetAddress.unwrap("AudioUnitBox was not connect to a RootBox").uuid,
203
+ target: rootBox.audioUnits.address.uuid
204
+ })),
205
+ ...audioUnits
206
+ .map(box => ({ source: box.address.uuid, target: UUID.generate() })),
207
+ ...dependencies
208
+ .map(({ address: { uuid }, name }) => ({ source: uuid, target: name === AudioFileBox.ClassName ? uuid : UUID.generate() }))
209
+ ]);
210
+ assert(allAdded, "Some mapping are redundant");
211
+ boxGraph.beginTransaction();
212
+ PointerField.decodeWith({
213
+ map: (_pointer, newAddress) => newAddress.map(address => uuidMap.opt(address.uuid).match({
214
+ none: () => address,
215
+ some: ({ target }) => address.moveTo(target)
216
+ }))
217
+ }, () => {
218
+ audioUnits
219
+ .toSorted((a, b) => a.index.getValue() - b.index.getValue())
220
+ .forEach((source, index) => {
221
+ const input = new ByteArrayInput(source.toArrayBuffer());
222
+ const key = source.name;
223
+ const uuid = uuidMap.get(source.address.uuid).target;
224
+ const copy = boxGraph.createBox(key, uuid, box => box.read(input));
225
+ copy.index.setValue(index);
226
+ });
227
+ masterAudioUnit.index.setValue(audioUnits.length);
228
+ dependencies
229
+ .forEach((source) => {
230
+ const input = new ByteArrayInput(source.toArrayBuffer());
231
+ const key = source.name;
232
+ const uuid = uuidMap.get(source.address.uuid).target;
233
+ boxGraph.createBox(key, uuid, box => box.read(input));
234
+ });
235
+ });
236
+ boxGraph.endTransaction();
237
+ boxGraph.verifyPointers();
238
+ console.timeEnd("extractIntoNew");
239
+ return targetProject;
240
+ }
241
+ mergeInto(...sources) {
242
+ return Promise.reject("Not implemented");
243
+ }
180
244
  #createAudioUnit(type, capture, index) {
181
245
  const { boxGraph, rootBox, masterBusBox } = this.#project;
182
246
  const insertIndex = index ?? this.#sortAudioUnitOrdering(type);
@@ -3,6 +3,6 @@ import { ProjectEnv } from "./ProjectEnv";
3
3
  import { ProjectProfile } from "./ProjectProfile";
4
4
  export declare namespace ProjectBundle {
5
5
  const encode: ({ uuid, project, meta, cover }: ProjectProfile, progress: MutableObservableValue<unitValue>) => Promise<ArrayBuffer>;
6
- const decode: (env: ProjectEnv, arrayBuffer: ArrayBuffer, exclude?: UUID.Format) => Promise<ProjectProfile>;
6
+ const decode: (env: ProjectEnv, arrayBuffer: ArrayBuffer, openProfileUUID?: UUID.Bytes) => Promise<ProjectProfile>;
7
7
  }
8
8
  //# sourceMappingURL=ProjectBundle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectBundle.d.ts","sourceRoot":"","sources":["../../src/project/ProjectBundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,sBAAsB,EAAiB,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAInH,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAM/C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAU,gCAA8B,cAAc,EAC5C,UAAU,sBAAsB,CAAC,SAAS,CAAC,KAAG,OAAO,CAAC,WAAW,CAuB7F,CAAA;IAEM,MAAM,MAAM,GAAU,KAAK,UAAU,EACf,aAAa,WAAW,EACxB,UAAU,IAAI,CAAC,MAAM,KAAG,OAAO,CAAC,cAAc,CA8B1E,CAAA;CAyBJ"}
1
+ {"version":3,"file":"ProjectBundle.d.ts","sourceRoot":"","sources":["../../src/project/ProjectBundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,sBAAsB,EAAiB,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAInH,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAM/C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAU,gCAA8B,cAAc,EAC5C,UAAU,sBAAsB,CAAC,SAAS,CAAC,KAAG,OAAO,CAAC,WAAW,CAuB7F,CAAA;IAEM,MAAM,MAAM,GAAU,KAAK,UAAU,EACf,aAAa,WAAW,EACxB,kBAAkB,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,cAAc,CA0BjF,CAAA;CAyBJ"}
@@ -31,35 +31,33 @@ export var ProjectBundle;
31
31
  progress.setValue(1.0);
32
32
  return blob.arrayBuffer();
33
33
  };
34
- ProjectBundle.decode = async (env, arrayBuffer, exclude) => {
34
+ ProjectBundle.decode = async (env, arrayBuffer, openProfileUUID) => {
35
35
  const { default: JSZip } = await import("jszip");
36
36
  const zip = await JSZip.loadAsync(arrayBuffer);
37
37
  if (await asDefined(zip.file("version")).async("text") !== "1") {
38
38
  return panic("Unknown bundle version");
39
39
  }
40
- const bundleUUID = UUID.validate(await asDefined(zip.file("uuid")).async("uint8array"));
41
- console.debug(UUID.toString(bundleUUID), exclude ? UUID.toString(exclude) : "none");
42
- if (isDefined(exclude) && UUID.equals(exclude, bundleUUID)) {
40
+ const bundleUUID = UUID.validateBytes(await asDefined(zip.file("uuid")).async("uint8array"));
41
+ console.debug(UUID.toString(bundleUUID), openProfileUUID ? UUID.toString(openProfileUUID) : "none");
42
+ if (isDefined(openProfileUUID) && UUID.equals(openProfileUUID, bundleUUID)) {
43
43
  return panic("Project is already open");
44
44
  }
45
45
  console.debug("loading samples...");
46
46
  const samples = asDefined(zip.folder("samples"), "Could not find samples");
47
47
  const promises = [];
48
48
  samples.forEach((path, file) => {
49
- if (!file.dir) {
50
- promises.push(file
51
- .async("arraybuffer")
52
- .then(arrayBuffer => WorkerAgents.Opfs
53
- .write(`${SampleStorage.Folder}/${path}`, new Uint8Array(arrayBuffer))));
49
+ if (file.dir) {
50
+ return;
54
51
  }
52
+ promises.push(file.async("arraybuffer")
53
+ .then(arrayBuffer => WorkerAgents.Opfs
54
+ .write(`${SampleStorage.Folder}/${path}`, new Uint8Array(arrayBuffer))));
55
55
  });
56
56
  await Promise.all(promises);
57
57
  const project = Project.load(env, await asDefined(zip.file(ProjectPaths.ProjectFile)).async("arraybuffer"));
58
58
  const meta = JSON.parse(await asDefined(zip.file(ProjectPaths.ProjectMetaFile)).async("text"));
59
59
  const coverFile = zip.file(ProjectPaths.ProjectCoverFile);
60
- const cover = isDefined(coverFile)
61
- ? Option.wrap(await coverFile.async("arraybuffer"))
62
- : Option.None;
60
+ const cover = Option.wrap(await coverFile?.async("arraybuffer"));
63
61
  return new ProjectProfile(bundleUUID, project, meta, cover);
64
62
  };
65
63
  const pipeSampleLoaderInto = async (loader, zip) => {
@@ -4,9 +4,9 @@ export declare namespace ProjectPaths {
4
4
  const ProjectFile = "project.od";
5
5
  const ProjectMetaFile = "meta.json";
6
6
  const ProjectCoverFile = "image.bin";
7
- const projectFile: (uuid: UUID.Format) => string;
8
- const projectMeta: (uuid: UUID.Format) => string;
9
- const projectCover: (uuid: UUID.Format) => string;
10
- const projectFolder: (uuid: UUID.Format) => string;
7
+ const projectFile: (uuid: UUID.Bytes) => string;
8
+ const projectMeta: (uuid: UUID.Bytes) => string;
9
+ const projectCover: (uuid: UUID.Bytes) => string;
10
+ const projectFolder: (uuid: UUID.Bytes) => string;
11
11
  }
12
12
  //# sourceMappingURL=ProjectPaths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectPaths.d.ts","sourceRoot":"","sources":["../../src/project/ProjectPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,yBAAiB,YAAY,CAAC;IACnB,MAAM,MAAM,gBAAgB,CAAA;IAC5B,MAAM,WAAW,eAAe,CAAA;IAChC,MAAM,eAAe,cAAc,CAAA;IACnC,MAAM,gBAAgB,cAAc,CAAA;IACpC,MAAM,WAAW,GAAI,MAAM,IAAI,CAAC,MAAM,KAAG,MAAmD,CAAA;IAC5F,MAAM,WAAW,GAAI,MAAM,IAAI,CAAC,MAAM,KAAG,MAAuD,CAAA;IAChG,MAAM,YAAY,GAAI,MAAM,IAAI,CAAC,MAAM,KAAG,MAAwD,CAAA;IAClG,MAAM,aAAa,GAAI,MAAM,IAAI,CAAC,MAAM,KAAG,MAA4C,CAAA;CACjG"}
1
+ {"version":3,"file":"ProjectPaths.d.ts","sourceRoot":"","sources":["../../src/project/ProjectPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,yBAAiB,YAAY,CAAC;IACnB,MAAM,MAAM,gBAAgB,CAAA;IAC5B,MAAM,WAAW,eAAe,CAAA;IAChC,MAAM,eAAe,cAAc,CAAA;IACnC,MAAM,gBAAgB,cAAc,CAAA;IACpC,MAAM,WAAW,GAAI,MAAM,IAAI,CAAC,KAAK,KAAG,MAAmD,CAAA;IAC3F,MAAM,WAAW,GAAI,MAAM,IAAI,CAAC,KAAK,KAAG,MAAuD,CAAA;IAC/F,MAAM,YAAY,GAAI,MAAM,IAAI,CAAC,KAAK,KAAG,MAAwD,CAAA;IACjG,MAAM,aAAa,GAAI,MAAM,IAAI,CAAC,KAAK,KAAG,MAA4C,CAAA;CAChG"}
@@ -3,8 +3,8 @@ import { ProjectMeta } from "./ProjectMeta";
3
3
  import { Project } from "./Project";
4
4
  export declare class ProjectProfile {
5
5
  #private;
6
- constructor(uuid: UUID.Format, project: Project, meta: ProjectMeta, cover: Option<ArrayBuffer>, hasBeenSaved?: boolean);
7
- get uuid(): UUID.Format;
6
+ constructor(uuid: UUID.Bytes, project: Project, meta: ProjectMeta, cover: Option<ArrayBuffer>, hasBeenSaved?: boolean);
7
+ get uuid(): UUID.Bytes;
8
8
  get project(): Project;
9
9
  get meta(): ProjectMeta;
10
10
  get cover(): Option<ArrayBuffer>;
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectProfile.d.ts","sourceRoot":"","sources":["../../src/project/ProjectProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,qBAAa,cAAc;;gBAYX,IAAI,EAAE,IAAI,CAAC,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAC1B,YAAY,GAAE,OAAe;IAUzC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAoB;IAC3C,IAAI,OAAO,IAAI,OAAO,CAAuB;IAC7C,IAAI,IAAI,IAAI,WAAW,CAAoB;IAC3C,IAAI,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC,CAAqB;IAE/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAqBhE,KAAK,IAAI,OAAO;IAChB,UAAU,IAAI,OAAO;IAErB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,YAAY;IAIhE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;IAK7C,cAAc,CAAC,GAAG,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI;IAOtF,gBAAgB,IAAI,IAAI;IAExB,QAAQ,IAAI,MAAM;CAcrB"}
1
+ {"version":3,"file":"ProjectProfile.d.ts","sourceRoot":"","sources":["../../src/project/ProjectProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,qBAAa,cAAc;;gBAYX,IAAI,EAAE,IAAI,CAAC,KAAK,EAChB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAC1B,YAAY,GAAE,OAAe;IAUzC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAoB;IAC1C,IAAI,OAAO,IAAI,OAAO,CAAuB;IAC7C,IAAI,IAAI,IAAI,WAAW,CAAoB;IAC3C,IAAI,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC,CAAqB;IAE/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAqBhE,KAAK,IAAI,OAAO;IAChB,UAAU,IAAI,OAAO;IAErB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,YAAY;IAIhE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;IAK7C,cAAc,CAAC,GAAG,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI;IAOtF,gBAAgB,IAAI,IAAI;IAExB,QAAQ,IAAI,MAAM;CAcrB"}
@@ -36,9 +36,9 @@ export class ProjectProfile {
36
36
  const uuid = UUID.generate();
37
37
  const project = this.project.copy();
38
38
  const meta = ProjectMeta.copy(this.meta);
39
- const session = new ProjectProfile(uuid, project, meta, Option.None, true);
40
- await ProjectProfile.#writeFiles(session);
41
- return Option.wrap(session);
39
+ const profile = new ProjectProfile(uuid, project, meta, Option.None, true);
40
+ await ProjectProfile.#writeFiles(profile);
41
+ return Option.wrap(profile);
42
42
  }
43
43
  else {
44
44
  return ProjectProfile.#writeFiles(this).then(() => {
@@ -0,0 +1,6 @@
1
+ export declare namespace ProjectSignals {
2
+ const StorageUpdated: Readonly<{
3
+ type: "project-storage-updated";
4
+ }>;
5
+ }
6
+ //# sourceMappingURL=ProjectSignals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectSignals.d.ts","sourceRoot":"","sources":["../../src/project/ProjectSignals.ts"],"names":[],"mappings":"AAAA,yBAAiB,cAAc,CAAC;IACrB,MAAM,cAAc;;MAAmD,CAAA;CACjF"}
@@ -0,0 +1,4 @@
1
+ export var ProjectSignals;
2
+ (function (ProjectSignals) {
3
+ ProjectSignals.StorageUpdated = Object.freeze({ type: "project-storage-updated" });
4
+ })(ProjectSignals || (ProjectSignals = {}));
@@ -0,0 +1,23 @@
1
+ import { Option, Progress, UUID } from "@opendaw/lib-std";
2
+ import { ProjectMeta } from "./ProjectMeta";
3
+ export declare namespace ProjectStorage {
4
+ type ListEntry = {
5
+ uuid: UUID.Bytes;
6
+ meta: ProjectMeta;
7
+ cover?: ArrayBuffer;
8
+ project?: ArrayBuffer;
9
+ };
10
+ type List = ReadonlyArray<ListEntry>;
11
+ const listProjects: ({ includeCover, includeProject, progress }?: {
12
+ includeCover?: boolean;
13
+ includeProject?: boolean;
14
+ progress?: Progress.Handler;
15
+ }) => Promise<List>;
16
+ const loadProject: (uuid: UUID.Bytes) => Promise<ArrayBuffer>;
17
+ const loadMeta: (uuid: UUID.Bytes) => Promise<ArrayBuffer>;
18
+ const loadCover: (uuid: UUID.Bytes) => Promise<Option<ArrayBuffer>>;
19
+ const listUsedSamples: () => Promise<Set<string>>;
20
+ const deleteProject: (uuid: UUID.Bytes) => Promise<void>;
21
+ const loadTrashedIds: () => Promise<Array<UUID.String>>;
22
+ }
23
+ //# sourceMappingURL=ProjectStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectStorage.d.ts","sourceRoot":"","sources":["../../src/project/ProjectStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAyB,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAI9E,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AAIzC,yBAAiB,cAAc,CAAC;IAC5B,KAAY,SAAS,GAAG;QACpB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAA;QAChB,IAAI,EAAE,WAAW,CAAA;QACjB,KAAK,CAAC,EAAE,WAAW,CAAA;QACnB,OAAO,CAAC,EAAE,WAAW,CAAA;KACxB,CAAA;IAED,KAAY,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IAEpC,MAAM,YAAY,GAAU,6CAA0C;QACzE,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAA;KACzB,KAAG,OAAO,CAAC,IAAI,CAcpB,CAAA;IAEM,MAAM,WAAW,GAAU,MAAM,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,WAAW,CAEvE,CAAA;IAEM,MAAM,QAAQ,GAAU,MAAM,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,WAAW,CAEpE,CAAA;IAEM,MAAM,SAAS,GAAU,MAAM,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAG7E,CAAA;IAEM,MAAM,eAAe,QAAa,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAa3D,CAAA;IAEM,MAAM,aAAa,GAAU,MAAM,IAAI,CAAC,KAAK,kBAMnD,CAAA;IAEM,MAAM,cAAc,QAAa,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAGjE,CAAA;CACJ"}
@@ -0,0 +1,59 @@
1
+ import { Option, safeExecute, tryCatch, UUID } from "@opendaw/lib-std";
2
+ import { AudioFileBox } from "@opendaw/studio-boxes";
3
+ import { ProjectDecoder } from "@opendaw/studio-adapters";
4
+ import { Promises } from "@opendaw/lib-runtime";
5
+ import { WorkerAgents } from "../WorkerAgents";
6
+ import { ProjectPaths } from "./ProjectPaths";
7
+ export var ProjectStorage;
8
+ (function (ProjectStorage) {
9
+ ProjectStorage.listProjects = async ({ includeCover, includeProject, progress } = {}) => {
10
+ return WorkerAgents.Opfs.list(ProjectPaths.Folder)
11
+ .then(files => Promise.all(files.filter(file => file.kind === "directory")
12
+ .map(async ({ name }, index, { length }) => {
13
+ safeExecute(progress, (index + 1) / length);
14
+ const uuid = UUID.parse(name);
15
+ const array = await WorkerAgents.Opfs.read(ProjectPaths.projectMeta(uuid));
16
+ return {
17
+ uuid,
18
+ meta: JSON.parse(new TextDecoder().decode(array)),
19
+ cover: includeCover ? (await ProjectStorage.loadCover(uuid)).unwrapOrUndefined() : undefined,
20
+ project: includeProject ? await ProjectStorage.loadProject(uuid) : undefined
21
+ };
22
+ })));
23
+ };
24
+ ProjectStorage.loadProject = async (uuid) => {
25
+ return WorkerAgents.Opfs.read(ProjectPaths.projectFile(uuid)).then(array => array.buffer);
26
+ };
27
+ ProjectStorage.loadMeta = async (uuid) => {
28
+ return WorkerAgents.Opfs.read(ProjectPaths.projectMeta(uuid)).then(array => array.buffer);
29
+ };
30
+ ProjectStorage.loadCover = async (uuid) => {
31
+ return WorkerAgents.Opfs.read(ProjectPaths.projectCover(uuid))
32
+ .then(array => Option.wrap(array.buffer), () => Option.None);
33
+ };
34
+ ProjectStorage.listUsedSamples = async () => {
35
+ const uuids = [];
36
+ const files = await WorkerAgents.Opfs.list(ProjectPaths.Folder);
37
+ for (const { name } of files.filter(file => file.kind === "directory")) {
38
+ const result = await WorkerAgents.Opfs.read(ProjectPaths.projectFile(UUID.parse(name)));
39
+ tryCatch(() => {
40
+ const { boxGraph } = ProjectDecoder.decode(result.buffer);
41
+ uuids.push(...boxGraph.boxes()
42
+ .filter(box => box instanceof AudioFileBox)
43
+ .map((box) => UUID.toString(box.address.uuid)));
44
+ });
45
+ }
46
+ return new Set(uuids);
47
+ };
48
+ ProjectStorage.deleteProject = async (uuid) => {
49
+ const array = await ProjectStorage.loadTrashedIds();
50
+ array.push(UUID.toString(uuid));
51
+ const trash = new TextEncoder().encode(JSON.stringify(array));
52
+ await WorkerAgents.Opfs.write(`${ProjectPaths.Folder}/trash.json`, trash);
53
+ await WorkerAgents.Opfs.delete(ProjectPaths.projectFolder(uuid));
54
+ };
55
+ ProjectStorage.loadTrashedIds = async () => {
56
+ const { status, value } = await Promises.tryCatch(WorkerAgents.Opfs.read(`${ProjectPaths.Folder}/trash.json`));
57
+ return status === "rejected" ? [] : JSON.parse(new TextDecoder().decode(value));
58
+ };
59
+ })(ProjectStorage || (ProjectStorage = {}));
@@ -4,10 +4,10 @@ import { AudioData, SampleLoader, SampleLoaderState, SampleMetaData } from "@ope
4
4
  import { MainThreadSampleManager } from "./MainThreadSampleManager";
5
5
  export declare class MainThreadSampleLoader implements SampleLoader {
6
6
  #private;
7
- constructor(manager: MainThreadSampleManager, uuid: UUID.Format);
7
+ constructor(manager: MainThreadSampleManager, uuid: UUID.Bytes);
8
8
  invalidate(): void;
9
9
  subscribe(observer: Observer<SampleLoaderState>): Subscription;
10
- get uuid(): UUID.Format;
10
+ get uuid(): UUID.Bytes;
11
11
  get data(): Option<AudioData>;
12
12
  get meta(): Option<SampleMetaData>;
13
13
  get peaks(): Option<Peaks>;
@@ -1 +1 @@
1
- {"version":3,"file":"MainThreadSampleLoader.d.ts","sourceRoot":"","sources":["../../src/samples/MainThreadSampleLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,QAAQ,EACR,MAAM,EAEN,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAEnG,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAA;AAGjE,qBAAa,sBAAuB,YAAW,YAAY;;gBAY3C,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM;IAQ/D,UAAU,IAAI,IAAI;IASlB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,YAAY;IAQ9D,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAoB;IAC3C,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAAoB;IACjD,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,CAAoB;IACtD,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAqB;IAC/C,IAAI,KAAK,IAAI,iBAAiB,CAAqB;IAEnD,QAAQ,IAAI,MAAM;CAgErB"}
1
+ {"version":3,"file":"MainThreadSampleLoader.d.ts","sourceRoot":"","sources":["../../src/samples/MainThreadSampleLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,QAAQ,EACR,MAAM,EAEN,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAEnG,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAA;AAGjE,qBAAa,sBAAuB,YAAW,YAAY;;gBAY3C,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK;IAQ9D,UAAU,IAAI,IAAI;IASlB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,YAAY;IAQ9D,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAoB;IAC1C,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAAoB;IACjD,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,CAAoB;IACtD,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAqB;IAC/C,IAAI,KAAK,IAAI,iBAAiB,CAAqB;IAEnD,QAAQ,IAAI,MAAM;CA8DrB"}
@@ -45,8 +45,7 @@ export class MainThreadSampleLoader {
45
45
  }
46
46
  #get() {
47
47
  let version = this.#version;
48
- SampleStorage.load(this.#uuid, this.#manager.context)
49
- .then(([data, peaks, meta]) => {
48
+ SampleStorage.loadSample(this.#uuid).then(([data, peaks, meta]) => {
50
49
  if (this.#version !== version) {
51
50
  console.warn(`Ignore obsolete version: ${this.#version} / ${version}`);
52
51
  return;
@@ -83,7 +82,7 @@ export class MainThreadSampleLoader {
83
82
  const [audio, meta] = fetchResult.value;
84
83
  const shifts = SamplePeaks.findBestFit(audio.numberOfFrames);
85
84
  const peaks = await WorkerAgents.Peak.generateAsync(peakProgress, shifts, audio.frames, audio.numberOfFrames, audio.numberOfChannels);
86
- const storeResult = await Promises.tryCatch(SampleStorage.store(this.#uuid, audio, peaks, meta));
85
+ const storeResult = await Promises.tryCatch(SampleStorage.saveSample(this.#uuid, audio, peaks, meta));
87
86
  if (this.#version !== version) {
88
87
  return;
89
88
  }
@@ -5,10 +5,10 @@ export declare class MainThreadSampleManager implements SampleManager, SamplePro
5
5
  #private;
6
6
  constructor(api: SampleProvider, context: AudioContext);
7
7
  get context(): AudioContext;
8
- fetch(uuid: UUID.Format, progress: Progress.Handler): Promise<[AudioData, SampleMetaData]>;
9
- remove(uuid: UUID.Format): void;
10
- invalidate(uuid: UUID.Format): void;
8
+ fetch(uuid: UUID.Bytes, progress: Progress.Handler): Promise<[AudioData, SampleMetaData]>;
9
+ remove(uuid: UUID.Bytes): void;
10
+ invalidate(uuid: UUID.Bytes): void;
11
11
  record(loader: SampleLoader): void;
12
- getOrCreate(uuid: UUID.Format): SampleLoader;
12
+ getOrCreate(uuid: UUID.Bytes): SampleLoader;
13
13
  }
14
14
  //# sourceMappingURL=MainThreadSampleManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MainThreadSampleManager.d.ts","sourceRoot":"","sources":["../../src/samples/MainThreadSampleManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAa,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAE/F,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAE/C,qBAAa,uBAAwB,YAAW,aAAa,EAAE,cAAc;;gBAK7D,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY;IAMtD,IAAI,OAAO,IAAI,YAAY,CAAuB;IAElD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAI1F,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM;IACxB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM;IAE5B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAElC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY;CAG/C"}
1
+ {"version":3,"file":"MainThreadSampleManager.d.ts","sourceRoot":"","sources":["../../src/samples/MainThreadSampleManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAa,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAE/F,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAE/C,qBAAa,uBAAwB,YAAW,aAAa,EAAE,cAAc;;gBAK7D,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY;IAMtD,IAAI,OAAO,IAAI,YAAY,CAAuB;IAElD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAIzF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;IACvB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;IAE3B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAElC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,YAAY;CAG9C"}
@@ -4,10 +4,12 @@ import { SampleAPI } from "@opendaw/studio-core";
4
4
  export declare class OpenSampleAPI implements SampleAPI {
5
5
  static readonly ApiRoot = "https://api.opendaw.studio/samples";
6
6
  static readonly FileRoot = "https://assets.opendaw.studio/samples";
7
+ static get(): OpenSampleAPI;
7
8
  static fromAudioBuffer(buffer: AudioBuffer): AudioData;
9
+ private constructor();
8
10
  all(): Promise<ReadonlyArray<Sample>>;
9
- get(uuid: UUID.Format): Promise<Sample>;
10
- load(context: AudioContext, uuid: UUID.Format, progress: Procedure<unitValue>): Promise<[AudioData, Sample]>;
11
+ get(uuid: UUID.Bytes): Promise<Sample>;
12
+ load(context: AudioContext, uuid: UUID.Bytes, progress: Procedure<unitValue>): Promise<[AudioData, Sample]>;
11
13
  upload(arrayBuffer: ArrayBuffer, metaData: SampleMetaData): Promise<void>;
12
14
  allowsUpload(): boolean;
13
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OpenSampleAPI.d.ts","sourceRoot":"","sources":["../../src/samples/OpenSampleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,SAAS,EAGT,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAY9C,qBAAa,aAAc,YAAW,SAAS;IAC3C,MAAM,CAAC,QAAQ,CAAC,OAAO,wCAAuC;IAC9D,MAAM,CAAC,QAAQ,CAAC,QAAQ,2CAA0C;IAElE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS;IAShD,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAKrC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQvC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAkC5G,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC/E,YAAY,IAAI,OAAO;CAC1B"}
1
+ {"version":3,"file":"OpenSampleAPI.d.ts","sourceRoot":"","sources":["../../src/samples/OpenSampleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAMH,SAAS,EAGT,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAY9C,qBAAa,aAAc,YAAW,SAAS;IAC3C,MAAM,CAAC,QAAQ,CAAC,OAAO,wCAAuC;IAC9D,MAAM,CAAC,QAAQ,CAAC,QAAQ,2CAA0C;IAGlE,MAAM,CAAC,GAAG,IAAI,aAAa;IAE3B,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS;IAStD,OAAO;IAED,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAKrC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAQtC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAkC3G,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC/E,YAAY,IAAI,OAAO;CAC1B"}
@@ -1,4 +1,13 @@
1
- import { Arrays, asDefined, DefaultObservableValue, panic, RuntimeNotifier, tryCatch, UUID } from "@opendaw/lib-std";
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Arrays, asDefined, DefaultObservableValue, Lazy, panic, RuntimeNotifier, tryCatch, UUID } from "@opendaw/lib-std";
2
11
  import { network, Promises } from "@opendaw/lib-runtime";
3
12
  const username = "openDAW";
4
13
  const password = "prototype";
@@ -8,10 +17,11 @@ const headers = {
8
17
  headers: { "Authorization": `Basic ${base64Credentials}` },
9
18
  credentials: "include"
10
19
  };
11
- // Standard openDAW samples
20
+ // Standard openDAW samples (considered to be non-removable)
12
21
  export class OpenSampleAPI {
13
22
  static ApiRoot = "https://api.opendaw.studio/samples";
14
23
  static FileRoot = "https://assets.opendaw.studio/samples";
24
+ static get() { return new OpenSampleAPI(); }
15
25
  static fromAudioBuffer(buffer) {
16
26
  return {
17
27
  frames: Arrays.create(channel => buffer.getChannelData(channel), buffer.numberOfChannels),
@@ -20,6 +30,7 @@ export class OpenSampleAPI {
20
30
  numberOfChannels: buffer.numberOfChannels
21
31
  };
22
32
  }
33
+ constructor() { }
23
34
  async all() {
24
35
  return Promises.retry(() => fetch(`${OpenSampleAPI.ApiRoot}/list.php`, headers)
25
36
  .then(x => x.json(), () => []));
@@ -107,3 +118,9 @@ export class OpenSampleAPI {
107
118
  }
108
119
  allowsUpload() { return false; }
109
120
  }
121
+ __decorate([
122
+ Lazy,
123
+ __metadata("design:type", Function),
124
+ __metadata("design:paramtypes", []),
125
+ __metadata("design:returntype", OpenSampleAPI)
126
+ ], OpenSampleAPI, "get", null);
@@ -2,8 +2,8 @@ import { AudioData, Sample, SampleMetaData } from "@opendaw/studio-adapters";
2
2
  import { Procedure, unitValue, UUID } from "@opendaw/lib-std";
3
3
  export interface SampleAPI {
4
4
  all(): Promise<ReadonlyArray<Sample>>;
5
- get(uuid: UUID.Format): Promise<Sample>;
6
- load(context: AudioContext, uuid: UUID.Format, progress: Procedure<unitValue>): Promise<[AudioData, Sample]>;
5
+ get(uuid: UUID.Bytes): Promise<Sample>;
6
+ load(context: AudioContext, uuid: UUID.Bytes, progress: Procedure<unitValue>): Promise<[AudioData, Sample]>;
7
7
  upload(arrayBuffer: ArrayBuffer, metaData: SampleMetaData): Promise<void>;
8
8
  allowsUpload(): boolean;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SampleAPI.d.ts","sourceRoot":"","sources":["../../src/samples/SampleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAE3D,MAAM,WAAW,SAAS;IACtB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5G,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,YAAY,IAAI,OAAO,CAAA;CAC1B"}
1
+ {"version":3,"file":"SampleAPI.d.ts","sourceRoot":"","sources":["../../src/samples/SampleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAE3D,MAAM,WAAW,SAAS;IACtB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IAC3G,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,YAAY,IAAI,OAAO,CAAA;CAC1B"}
@@ -2,7 +2,7 @@ import { Progress, UUID } from "@opendaw/lib-std";
2
2
  import { Sample } from "@opendaw/studio-adapters";
3
3
  export type SampleImporter = {
4
4
  importSample(sample: {
5
- uuid: UUID.Format;
5
+ uuid: UUID.Bytes;
6
6
  name: string;
7
7
  arrayBuffer: ArrayBuffer;
8
8
  progressHandler?: Progress.Handler;
@@ -1 +1 @@
1
- {"version":3,"file":"SampleImporter.d.ts","sourceRoot":"","sources":["../../src/samples/SampleImporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAA;AAE/C,MAAM,MAAM,cAAc,GAAG;IACzB,YAAY,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,eAAe,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAA;KACrC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACtB,CAAA"}
1
+ {"version":3,"file":"SampleImporter.d.ts","sourceRoot":"","sources":["../../src/samples/SampleImporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAA;AAE/C,MAAM,MAAM,cAAc,GAAG;IACzB,YAAY,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,eAAe,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAA;KACrC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACtB,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { Progress, UUID } from "@opendaw/lib-std";
2
2
  import { AudioData, SampleMetaData } from "@opendaw/studio-adapters";
3
3
  export interface SampleProvider {
4
- fetch(uuid: UUID.Format, progress: Progress.Handler): Promise<[AudioData, SampleMetaData]>;
4
+ fetch(uuid: UUID.Bytes, progress: Progress.Handler): Promise<[AudioData, SampleMetaData]>;
5
5
  }
6
6
  //# sourceMappingURL=SampleProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SampleProvider.d.ts","sourceRoot":"","sources":["../../src/samples/SampleProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAElE,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;CAC7F"}
1
+ {"version":3,"file":"SampleProvider.d.ts","sourceRoot":"","sources":["../../src/samples/SampleProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAElE,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;CAC5F"}