@opendaw/studio-core 0.0.41 → 0.0.43

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 (161) hide show
  1. package/dist/AssetService.d.ts +18 -0
  2. package/dist/AssetService.d.ts.map +1 -0
  3. package/dist/AssetService.js +49 -0
  4. package/dist/EngineWorklet.d.ts.map +1 -1
  5. package/dist/EngineWorklet.js +18 -1
  6. package/dist/FilePickerAcceptTypes.d.ts +1 -0
  7. package/dist/FilePickerAcceptTypes.d.ts.map +1 -1
  8. package/dist/FilePickerAcceptTypes.js +6 -0
  9. package/dist/InstrumentBox.d.ts +2 -2
  10. package/dist/InstrumentBox.d.ts.map +1 -1
  11. package/dist/InstrumentFactories.d.ts +13 -4
  12. package/dist/InstrumentFactories.d.ts.map +1 -1
  13. package/dist/InstrumentFactories.js +38 -18
  14. package/dist/InstrumentFactory.d.ts +3 -2
  15. package/dist/InstrumentFactory.d.ts.map +1 -1
  16. package/dist/InstrumentOptions.d.ts +2 -1
  17. package/dist/InstrumentOptions.d.ts.map +1 -1
  18. package/dist/OpenDAWHeaders.d.ts +3 -0
  19. package/dist/OpenDAWHeaders.d.ts.map +1 -0
  20. package/dist/OpenDAWHeaders.js +8 -0
  21. package/dist/RecordingWorklet.js +1 -1
  22. package/dist/Storage.d.ts +14 -0
  23. package/dist/Storage.d.ts.map +1 -0
  24. package/dist/Storage.js +32 -0
  25. package/dist/capture/index.d.ts +6 -0
  26. package/dist/capture/index.d.ts.map +1 -0
  27. package/dist/capture/index.js +5 -0
  28. package/dist/cloud/CloudAuthManager.d.ts.map +1 -0
  29. package/dist/{clouds → cloud}/CloudAuthManager.js +3 -2
  30. package/dist/{clouds → cloud}/CloudBackup.d.ts +1 -1
  31. package/dist/cloud/CloudBackup.d.ts.map +1 -0
  32. package/dist/{clouds → cloud}/CloudBackup.js +6 -4
  33. package/dist/cloud/CloudBackupProjects.d.ts.map +1 -0
  34. package/dist/cloud/CloudBackupSamples.d.ts.map +1 -0
  35. package/dist/{clouds → cloud}/CloudBackupSamples.js +5 -6
  36. package/dist/cloud/CloudBackupSoundfont.d.ts +13 -0
  37. package/dist/cloud/CloudBackupSoundfont.d.ts.map +1 -0
  38. package/dist/cloud/CloudBackupSoundfont.js +120 -0
  39. package/dist/cloud/CloudHandler.d.ts.map +1 -0
  40. package/dist/cloud/CloudService.d.ts.map +1 -0
  41. package/dist/cloud/DropboxHandler.d.ts.map +1 -0
  42. package/dist/cloud/GoogleDriveHandler.d.ts.map +1 -0
  43. package/dist/cloud/index.d.ts +4 -0
  44. package/dist/cloud/index.d.ts.map +1 -0
  45. package/dist/cloud/index.js +3 -0
  46. package/dist/dawproject/DawProjectExporter.test.js +2 -1
  47. package/dist/dawproject/DawProjectService.d.ts +11 -0
  48. package/dist/dawproject/DawProjectService.d.ts.map +1 -0
  49. package/dist/dawproject/DawProjectService.js +63 -0
  50. package/dist/dawproject/index.d.ts +5 -0
  51. package/dist/dawproject/index.d.ts.map +1 -0
  52. package/dist/dawproject/index.js +4 -0
  53. package/dist/env.d.ts +6 -0
  54. package/dist/env.d.ts.map +1 -0
  55. package/dist/env.js +9 -0
  56. package/dist/index.d.ts +11 -32
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +11 -32
  59. package/dist/midi/index.d.ts +3 -0
  60. package/dist/midi/index.d.ts.map +1 -0
  61. package/dist/midi/index.js +2 -0
  62. package/dist/processors.js +3 -3
  63. package/dist/processors.js.map +4 -4
  64. package/dist/project/Project.d.ts +2 -1
  65. package/dist/project/Project.d.ts.map +1 -1
  66. package/dist/project/Project.js +1 -0
  67. package/dist/project/ProjectApi.d.ts +1 -1
  68. package/dist/project/ProjectApi.d.ts.map +1 -1
  69. package/dist/project/ProjectApi.js +3 -2
  70. package/dist/project/ProjectBundle.d.ts.map +1 -1
  71. package/dist/project/ProjectBundle.js +67 -18
  72. package/dist/project/ProjectEnv.d.ts +2 -1
  73. package/dist/project/ProjectEnv.d.ts.map +1 -1
  74. package/dist/project/ProjectStorage.d.ts +3 -2
  75. package/dist/project/ProjectStorage.d.ts.map +1 -1
  76. package/dist/project/ProjectStorage.js +2 -3
  77. package/dist/project/index.d.ts +10 -0
  78. package/dist/project/index.d.ts.map +1 -0
  79. package/dist/project/index.js +9 -0
  80. package/dist/samples/DefaultSampleLoader.js +2 -2
  81. package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
  82. package/dist/samples/OpenSampleAPI.js +4 -11
  83. package/dist/samples/SampleService.d.ts +12 -0
  84. package/dist/samples/SampleService.d.ts.map +1 -0
  85. package/dist/samples/SampleService.js +51 -0
  86. package/dist/samples/SampleStorage.d.ts +11 -10
  87. package/dist/samples/SampleStorage.d.ts.map +1 -1
  88. package/dist/samples/SampleStorage.js +32 -39
  89. package/dist/samples/index.d.ts +1 -1
  90. package/dist/samples/index.d.ts.map +1 -1
  91. package/dist/samples/index.js +1 -1
  92. package/dist/soundfont/DefaultSoundfontLoader.d.ts +15 -0
  93. package/dist/soundfont/DefaultSoundfontLoader.d.ts.map +1 -0
  94. package/dist/soundfont/DefaultSoundfontLoader.js +69 -0
  95. package/dist/soundfont/DefaultSoundfontLoaderManager.d.ts +11 -0
  96. package/dist/soundfont/DefaultSoundfontLoaderManager.d.ts.map +1 -0
  97. package/dist/soundfont/DefaultSoundfontLoaderManager.js +17 -0
  98. package/dist/soundfont/OpenSoundfontAPI.d.ts +13 -0
  99. package/dist/soundfont/OpenSoundfontAPI.d.ts.map +1 -0
  100. package/dist/soundfont/OpenSoundfontAPI.js +63 -0
  101. package/dist/soundfont/SoundfontProvider.d.ts +6 -0
  102. package/dist/soundfont/SoundfontProvider.d.ts.map +1 -0
  103. package/dist/soundfont/SoundfontService.d.ts +14 -0
  104. package/dist/soundfont/SoundfontService.d.ts.map +1 -0
  105. package/dist/soundfont/SoundfontService.js +69 -0
  106. package/dist/soundfont/SoundfontStorage.d.ts +21 -0
  107. package/dist/soundfont/SoundfontStorage.d.ts.map +1 -0
  108. package/dist/soundfont/SoundfontStorage.js +40 -0
  109. package/dist/soundfont/index.d.ts +7 -0
  110. package/dist/soundfont/index.d.ts.map +1 -0
  111. package/dist/soundfont/index.js +6 -0
  112. package/dist/sync-log/index.d.ts +4 -0
  113. package/dist/sync-log/index.d.ts.map +1 -0
  114. package/dist/sync-log/index.js +3 -0
  115. package/dist/ui/index.d.ts +2 -0
  116. package/dist/ui/index.d.ts.map +1 -0
  117. package/dist/ui/index.js +1 -0
  118. package/dist/utils/index.d.ts +2 -0
  119. package/dist/utils/index.d.ts.map +1 -0
  120. package/dist/utils/index.js +1 -0
  121. package/dist/workers-main.js +2 -2
  122. package/dist/workers-main.js.map +3 -3
  123. package/dist/ysync/YMapper.d.ts.map +1 -0
  124. package/dist/{yjs → ysync}/YService.d.ts +1 -2
  125. package/dist/ysync/YService.d.ts.map +1 -0
  126. package/dist/{yjs → ysync}/YService.js +3 -4
  127. package/dist/ysync/YSync.d.ts.map +1 -0
  128. package/dist/{yjs → ysync}/YSync.js +1 -1
  129. package/dist/ysync/index.d.ts +4 -0
  130. package/dist/ysync/index.d.ts.map +1 -0
  131. package/dist/ysync/index.js +3 -0
  132. package/package.json +15 -17
  133. package/dist/clouds/CloudAuthManager.d.ts.map +0 -1
  134. package/dist/clouds/CloudBackup.d.ts.map +0 -1
  135. package/dist/clouds/CloudBackupProjects.d.ts.map +0 -1
  136. package/dist/clouds/CloudBackupSamples.d.ts.map +0 -1
  137. package/dist/clouds/CloudHandler.d.ts.map +0 -1
  138. package/dist/clouds/CloudService.d.ts.map +0 -1
  139. package/dist/clouds/DropboxHandler.d.ts.map +0 -1
  140. package/dist/clouds/GoogleDriveHandler.d.ts.map +0 -1
  141. package/dist/samples/SampleImporter.d.ts +0 -11
  142. package/dist/samples/SampleImporter.d.ts.map +0 -1
  143. package/dist/yjs/YMapper.d.ts.map +0 -1
  144. package/dist/yjs/YService.d.ts.map +0 -1
  145. package/dist/yjs/YSync.d.ts.map +0 -1
  146. /package/dist/{clouds → cloud}/CloudAuthManager.d.ts +0 -0
  147. /package/dist/{clouds → cloud}/CloudBackupProjects.d.ts +0 -0
  148. /package/dist/{clouds → cloud}/CloudBackupProjects.js +0 -0
  149. /package/dist/{clouds → cloud}/CloudBackupSamples.d.ts +0 -0
  150. /package/dist/{clouds → cloud}/CloudHandler.d.ts +0 -0
  151. /package/dist/{clouds → cloud}/CloudHandler.js +0 -0
  152. /package/dist/{clouds → cloud}/CloudService.d.ts +0 -0
  153. /package/dist/{clouds → cloud}/CloudService.js +0 -0
  154. /package/dist/{clouds → cloud}/DropboxHandler.d.ts +0 -0
  155. /package/dist/{clouds → cloud}/DropboxHandler.js +0 -0
  156. /package/dist/{clouds → cloud}/GoogleDriveHandler.d.ts +0 -0
  157. /package/dist/{clouds → cloud}/GoogleDriveHandler.js +0 -0
  158. /package/dist/{samples/SampleImporter.js → soundfont/SoundfontProvider.js} +0 -0
  159. /package/dist/{yjs → ysync}/YMapper.d.ts +0 -0
  160. /package/dist/{yjs → ysync}/YMapper.js +0 -0
  161. /package/dist/{yjs → ysync}/YSync.d.ts +0 -0
@@ -0,0 +1,120 @@
1
+ import { Arrays, Errors, panic, Progress, RuntimeNotifier, UUID } from "@opendaw/lib-std";
2
+ import { network, Promises } from "@opendaw/lib-runtime";
3
+ import { OpenSoundfontAPI, SoundfontStorage } from "../soundfont";
4
+ export class CloudBackupSoundfonts {
5
+ static RemotePath = "soundfonts";
6
+ static RemoteCatalogPath = `${this.RemotePath}/index.json`;
7
+ static areSoundfontsEqual = ({ uuid: a }, { uuid: b }) => a === b;
8
+ static pathFor(uuid) { return `${this.RemotePath}/${uuid}.wav`; }
9
+ static async start(cloudHandler, progress, log) {
10
+ log("Collecting all soundfont domains...");
11
+ const [stock, local, cloud] = await Promise.all([
12
+ OpenSoundfontAPI.get().all(),
13
+ SoundfontStorage.get().list(),
14
+ cloudHandler.download(CloudBackupSoundfonts.RemoteCatalogPath)
15
+ .then(json => JSON.parse(new TextDecoder().decode(json)))
16
+ .catch(reason => reason instanceof Errors.FileNotFound ? Arrays.empty() : panic(reason))
17
+ ]);
18
+ return new CloudBackupSoundfonts(cloudHandler, { stock, local, cloud }, log).#start(progress);
19
+ }
20
+ #cloudHandler;
21
+ #soundfontDomains;
22
+ #log;
23
+ constructor(cloudHandler, soundfontDomains, log) {
24
+ this.#cloudHandler = cloudHandler;
25
+ this.#soundfontDomains = soundfontDomains;
26
+ this.#log = log;
27
+ }
28
+ async #start(progress) {
29
+ const trashed = await SoundfontStorage.get().loadTrashedIds();
30
+ const [uploadProgress, trashProgress, downloadProgress] = Progress.splitWithWeights(progress, [0.45, 0.10, 0.45]);
31
+ await this.#upload(uploadProgress);
32
+ await this.#trash(trashed, trashProgress);
33
+ await this.#download(trashed, downloadProgress);
34
+ }
35
+ async #upload(progress) {
36
+ const { stock, local, cloud } = this.#soundfontDomains;
37
+ const maybeUnsyncedSoundfonts = Arrays.subtract(local, stock, CloudBackupSoundfonts.areSoundfontsEqual);
38
+ const unsyncedSoundfonts = Arrays.subtract(maybeUnsyncedSoundfonts, cloud, CloudBackupSoundfonts.areSoundfontsEqual);
39
+ if (unsyncedSoundfonts.length === 0) {
40
+ this.#log("No unsynced soundfonts found.");
41
+ progress(1.0);
42
+ return;
43
+ }
44
+ const uploadedSoundfonts = await Promises.sequentialAll(unsyncedSoundfonts.map((soundfont, index, { length }) => async () => {
45
+ progress((index + 1) / length);
46
+ this.#log(`Uploading soundfont '${soundfont.name}'`);
47
+ const arrayBuffer = await SoundfontStorage.get().load(UUID.parse(soundfont.uuid))
48
+ .then(([file, _meta]) => file);
49
+ const path = CloudBackupSoundfonts.pathFor(soundfont.uuid);
50
+ await Promises.approvedRetry(() => this.#cloudHandler.upload(path, arrayBuffer), error => ({
51
+ headline: "Upload failed",
52
+ message: `Failed to upload soundfont '${soundfont.name}'. '${error}'`,
53
+ approveText: "Retry",
54
+ cancelText: "Cancel"
55
+ }));
56
+ return soundfont;
57
+ }));
58
+ const catalog = Arrays.merge(cloud, uploadedSoundfonts, CloudBackupSoundfonts.areSoundfontsEqual);
59
+ await this.#uploadCatalog(catalog);
60
+ progress(1.0);
61
+ }
62
+ async #trash(trashed, progress) {
63
+ const { cloud } = this.#soundfontDomains;
64
+ const obsolete = Arrays.intersect(cloud, trashed, (soundfont, uuid) => soundfont.uuid === uuid);
65
+ if (obsolete.length === 0) {
66
+ progress(1.0);
67
+ return;
68
+ }
69
+ const approved = await RuntimeNotifier.approve({
70
+ headline: "Delete Soundfonts?",
71
+ message: `Found ${obsolete.length} locally deleted soundfonts. Delete from cloud as well?`,
72
+ approveText: "Yes",
73
+ cancelText: "No"
74
+ });
75
+ if (!approved) {
76
+ progress(1.0);
77
+ return;
78
+ }
79
+ const result = await Promises.sequentialAll(obsolete.map((soundfont, index, { length }) => async () => {
80
+ progress((index + 1) / length);
81
+ this.#log(`Deleting '${soundfont.name}'`);
82
+ await this.#cloudHandler.delete(CloudBackupSoundfonts.pathFor(soundfont.uuid));
83
+ return soundfont;
84
+ }));
85
+ const catalog = cloud.slice();
86
+ result.forEach((soundfont) => Arrays.removeIf(catalog, ({ uuid }) => soundfont.uuid === uuid));
87
+ await this.#uploadCatalog(catalog);
88
+ progress(1.0);
89
+ }
90
+ async #download(trashed, progress) {
91
+ const { cloud, local } = this.#soundfontDomains;
92
+ const missingLocally = Arrays.subtract(cloud, local, CloudBackupSoundfonts.areSoundfontsEqual);
93
+ const download = Arrays.subtract(missingLocally, trashed, (soundfont, uuid) => soundfont.uuid === uuid);
94
+ if (download.length === 0) {
95
+ this.#log("No soundfonts to download.");
96
+ progress(1.0);
97
+ return;
98
+ }
99
+ await Promises.sequentialAll(download.map((soundfont, index, { length }) => async () => {
100
+ progress((index + 1) / length);
101
+ this.#log(`Downloading soundfont '${soundfont.name}'`);
102
+ const path = CloudBackupSoundfonts.pathFor(soundfont.uuid);
103
+ const buffer = await Promises.guardedRetry(() => this.#cloudHandler.download(path), network.DefaultRetry);
104
+ await SoundfontStorage.get().save({
105
+ uuid: UUID.parse(soundfont.uuid),
106
+ file: buffer,
107
+ meta: soundfont
108
+ });
109
+ return soundfont;
110
+ }));
111
+ this.#log("Download soundfonts complete.");
112
+ progress(1.0);
113
+ }
114
+ async #uploadCatalog(catalog) {
115
+ this.#log("Uploading soundfonts catalog...");
116
+ const jsonString = JSON.stringify(catalog, null, 2);
117
+ const buffer = new TextEncoder().encode(jsonString).buffer;
118
+ return this.#cloudHandler.upload(CloudBackupSoundfonts.RemoteCatalogPath, buffer);
119
+ }
120
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudHandler.d.ts","sourceRoot":"","sources":["../../src/cloud/CloudHandler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudService.d.ts","sourceRoot":"","sources":["../../src/cloud/CloudService.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,aAAa,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropboxHandler.d.ts","sourceRoot":"","sources":["../../src/cloud/DropboxHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,qBAAa,cAAe,YAAW,YAAY;;gBAKnC,WAAW,EAAE,MAAM;IAEzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAe5C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAO3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgC5C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoogleDriveHandler.d.ts","sourceRoot":"","sources":["../../src/cloud/GoogleDriveHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAmB3C,qBAAa,kBAAmB,YAAW,YAAY;;gBAKvC,WAAW,EAAE,MAAM;IAEzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAe5C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAmK5C"}
@@ -0,0 +1,4 @@
1
+ export * from "./CloudAuthManager";
2
+ export * from "./CloudHandler";
3
+ export * from "./CloudBackup";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from "./CloudAuthManager";
2
+ export * from "./CloudHandler";
3
+ export * from "./CloudBackup";
@@ -35,7 +35,8 @@ describe("DawProjectExport", () => {
35
35
  }
36
36
  remove(_uuid) { return panic("Method not implemented."); }
37
37
  invalidate(_uuid) { return panic("Method not implemented."); }
38
- }
38
+ },
39
+ soundfontManager: InaccessibleProperty
39
40
  }, arrayBuffer);
40
41
  const schema = DawProjectExporter.write(project, {
41
42
  write: (path, buffer) => {
@@ -0,0 +1,11 @@
1
+ import { Option } from "@opendaw/lib-std";
2
+ import { ProjectSkeleton } from "@opendaw/studio-adapters";
3
+ import { ProjectProfile } from "../project";
4
+ import { SampleService } from "../samples";
5
+ export declare class DawProjectService {
6
+ readonly sampleService: SampleService;
7
+ constructor(sampleService: SampleService);
8
+ importDawproject(): Promise<Option<ProjectSkeleton>>;
9
+ exportDawproject(profile: ProjectProfile): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=DawProjectService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DawProjectService.d.ts","sourceRoot":"","sources":["../../src/dawproject/DawProjectService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAyB,MAAM,kBAAkB,CAAA;AAKlF,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAA;AAIxD,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAA;AACzC,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAA;AAExC,qBAAa,iBAAiB;IACd,QAAQ,CAAC,aAAa,EAAE,aAAa;gBAA5B,aAAa,EAAE,aAAa;IAE3C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IA2BpD,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBjE"}
@@ -0,0 +1,63 @@
1
+ import { Errors, isDefined, Option, panic, RuntimeNotifier } from "@opendaw/lib-std";
2
+ import { Promises } from "@opendaw/lib-runtime";
3
+ import { Files } from "@opendaw/lib-dom";
4
+ import { Xml } from "@opendaw/lib-xml";
5
+ import { MetaDataSchema } from "@opendaw/lib-dawproject";
6
+ import { DawProject } from "./DawProject";
7
+ import { FilePickerAcceptTypes } from "../FilePickerAcceptTypes";
8
+ import { DawProjectImport } from "./DawProjectImport";
9
+ export class DawProjectService {
10
+ sampleService;
11
+ constructor(sampleService) {
12
+ this.sampleService = sampleService;
13
+ }
14
+ async importDawproject() {
15
+ const { status, value, error } = await Promises.tryCatch(Files.open({ types: [FilePickerAcceptTypes.DawprojectFileType] }));
16
+ if (status === "rejected") {
17
+ if (Errors.isAbort(error)) {
18
+ return Option.None;
19
+ }
20
+ return panic(String(error));
21
+ }
22
+ const file = value.at(0);
23
+ if (!isDefined(file)) {
24
+ return Option.None;
25
+ }
26
+ const arrayBuffer = await file.arrayBuffer();
27
+ const { project: projectSchema, resources } = await DawProject.decode(arrayBuffer);
28
+ const importResult = await Promises.tryCatch(DawProjectImport.read(projectSchema, resources));
29
+ if (importResult.status === "rejected") {
30
+ await RuntimeNotifier.info({ headline: "Import Error", message: String(importResult.error) });
31
+ return Option.None;
32
+ }
33
+ const { skeleton, audioIds } = importResult.value;
34
+ await Promise.all(audioIds
35
+ .map(uuid => resources.fromUUID(uuid))
36
+ .map(resource => this.sampleService.importFile({
37
+ uuid: resource.uuid,
38
+ name: resource.name,
39
+ arrayBuffer: resource.buffer
40
+ })));
41
+ return Option.wrap(skeleton);
42
+ }
43
+ async exportDawproject(profile) {
44
+ const { project, meta } = profile;
45
+ const { status, error, value: zip } = await Promises.tryCatch(DawProject.encode(project, Xml.element({
46
+ title: meta.name,
47
+ year: new Date().getFullYear().toString(),
48
+ website: "https://opendaw.studio"
49
+ }, MetaDataSchema)));
50
+ if (status === "rejected") {
51
+ return RuntimeNotifier.info({ headline: "Export Error", message: String(error) });
52
+ }
53
+ else {
54
+ const { status, error } = await Promises.tryCatch(Files.save(zip, { types: [FilePickerAcceptTypes.DawprojectFileType] }));
55
+ if (status === "rejected" && !Errors.isAbort(error)) {
56
+ throw error;
57
+ }
58
+ else {
59
+ return;
60
+ }
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./DawProject";
2
+ export * from "./DawProjectExporter";
3
+ export * from "./DawProjectImport";
4
+ export * from "./DawProjectService";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dawproject/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from "./DawProject";
2
+ export * from "./DawProjectExporter";
3
+ export * from "./DawProjectImport";
4
+ export * from "./DawProjectService";
package/dist/env.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare const VITE_GOOGLE_CLIENT_ID: string;
2
+ export declare const VITE_DROPBOX_CLIENT_ID: string;
3
+ export declare const VITE_VJS_USE_LOCAL_SERVER: string;
4
+ export declare const VITE_VJS_LOCAL_SERVER_URL: string;
5
+ export declare const VITE_VJS_ONLINE_SERVER_URL: string;
6
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,EAAgC,MAAM,CAAA;AACxE,eAAO,MAAM,sBAAsB,EAAiC,MAAM,CAAA;AAC1E,eAAO,MAAM,yBAAyB,EAAoC,MAAM,CAAA;AAChF,eAAO,MAAM,yBAAyB,EAAoC,MAAM,CAAA;AAChF,eAAO,MAAM,0BAA0B,EAAqC,MAAM,CAAA"}
package/dist/env.js ADDED
@@ -0,0 +1,9 @@
1
+ // This works in both Vite and Next.js
2
+ const env = typeof window !== "undefined" && import.meta.env
3
+ ? import.meta.env // Vite (browser)
4
+ : process.env; // Next.js (gets replaced at build time)
5
+ export const VITE_GOOGLE_CLIENT_ID = env.VITE_GOOGLE_CLIENT_ID;
6
+ export const VITE_DROPBOX_CLIENT_ID = env.VITE_DROPBOX_CLIENT_ID;
7
+ export const VITE_VJS_USE_LOCAL_SERVER = env.VITE_VJS_USE_LOCAL_SERVER;
8
+ export const VITE_VJS_LOCAL_SERVER_URL = env.VITE_VJS_LOCAL_SERVER_URL;
9
+ export const VITE_VJS_ONLINE_SERVER_URL = env.VITE_VJS_ONLINE_SERVER_URL;
package/dist/index.d.ts CHANGED
@@ -1,35 +1,14 @@
1
- export * from "./capture/Capture";
2
- export * from "./capture/CaptureAudio";
3
- export * from "./capture/CaptureMidi";
4
- export * from "./capture/CaptureDevices";
5
- export * from "./capture/Recording";
6
- export * from "./dawproject/DawProject";
7
- export * from "./dawproject/DawProjectExporter";
8
- export * from "./dawproject/DawProjectImport";
9
- export * from "./dawproject/DawProjectImport";
10
- export * from "./midi/MidiDevices";
11
- export * from "./midi/MIDILearning";
12
- export * from "./project/Project";
13
- export * from "./project/ProjectApi";
14
- export * from "./project/ProjectBundle";
15
- export * from "./project/ProjectEnv";
16
- export * from "./project/ProjectMeta";
17
- export * from "./project/ProjectPaths";
18
- export * from "./project/ProjectProfile";
19
- export * from "./project/ProjectSignals";
20
- export * from "./project/ProjectStorage";
21
- export * from "./samples/index";
22
- export * from "./sync-log/Commit";
23
- export * from "./sync-log/SyncLogReader";
24
- export * from "./sync-log/SyncLogWriter";
25
- export * from "./clouds/CloudAuthManager";
26
- export * from "./clouds/CloudHandler";
27
- export * from "./clouds/CloudBackup";
28
- export * from "./ui/TimelineRange";
29
- export * from "./utils/AutofitUtils";
30
- export * from "./yjs/YService";
31
- export * from "./yjs/YSync";
32
- export * from "./yjs/YMapper";
1
+ export * from "./capture";
2
+ export * from "./cloud";
3
+ export * from "./dawproject";
4
+ export * from "./midi";
5
+ export * from "./project";
6
+ export * from "./samples";
7
+ export * from "./soundfont";
8
+ export * from "./sync-log";
9
+ export * from "./ui";
10
+ export * from "./utils";
11
+ export * from "./ysync";
33
12
  export * from "./AudioDevices";
34
13
  export * from "./AudioOfflineRenderer";
35
14
  export * from "./AudioUnitOrdering";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,+BAA+B,CAAA;AAE7C,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AAExC,cAAc,iBAAiB,CAAA;AAE/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AAExC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AAEpC,cAAc,oBAAoB,CAAA;AAElC,cAAc,sBAAsB,CAAA;AAEpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAE7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,MAAM,CAAA;AACpB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AAEvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
package/dist/index.js CHANGED
@@ -1,35 +1,14 @@
1
- export * from "./capture/Capture";
2
- export * from "./capture/CaptureAudio";
3
- export * from "./capture/CaptureMidi";
4
- export * from "./capture/CaptureDevices";
5
- export * from "./capture/Recording";
6
- export * from "./dawproject/DawProject";
7
- export * from "./dawproject/DawProjectExporter";
8
- export * from "./dawproject/DawProjectImport";
9
- export * from "./dawproject/DawProjectImport";
10
- export * from "./midi/MidiDevices";
11
- export * from "./midi/MIDILearning";
12
- export * from "./project/Project";
13
- export * from "./project/ProjectApi";
14
- export * from "./project/ProjectBundle";
15
- export * from "./project/ProjectEnv";
16
- export * from "./project/ProjectMeta";
17
- export * from "./project/ProjectPaths";
18
- export * from "./project/ProjectProfile";
19
- export * from "./project/ProjectSignals";
20
- export * from "./project/ProjectStorage";
21
- export * from "./samples/index";
22
- export * from "./sync-log/Commit";
23
- export * from "./sync-log/SyncLogReader";
24
- export * from "./sync-log/SyncLogWriter";
25
- export * from "./clouds/CloudAuthManager";
26
- export * from "./clouds/CloudHandler";
27
- export * from "./clouds/CloudBackup";
28
- export * from "./ui/TimelineRange";
29
- export * from "./utils/AutofitUtils";
30
- export * from "./yjs/YService";
31
- export * from "./yjs/YSync";
32
- export * from "./yjs/YMapper";
1
+ export * from "./capture";
2
+ export * from "./cloud";
3
+ export * from "./dawproject";
4
+ export * from "./midi";
5
+ export * from "./project";
6
+ export * from "./samples";
7
+ export * from "./soundfont";
8
+ export * from "./sync-log";
9
+ export * from "./ui";
10
+ export * from "./utils";
11
+ export * from "./ysync";
33
12
  export * from "./AudioDevices";
34
13
  export * from "./AudioOfflineRenderer";
35
14
  export * from "./AudioUnitOrdering";
@@ -0,0 +1,3 @@
1
+ export * from "./MidiDevices";
2
+ export * from "./MIDILearning";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/midi/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./MidiDevices";
2
+ export * from "./MIDILearning";