@open-audio-stack/core 0.1.46 → 0.1.48
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { Package } from './Package.js';
|
|
3
3
|
import { Manager } from './Manager.js';
|
|
4
|
-
import { archiveExtract, dirCreate, dirDelete, dirEmpty, dirIs, dirMove, dirRead, fileCreate, fileCreateJson, fileCreateYaml, fileExists, fileHash, fileInstall, fileOpen, fileReadJson, fileReadYaml, filesMove, isAdmin, runCliAsAdmin, } from '../helpers/file.js';
|
|
4
|
+
import { archiveExtract, dirCreate, dirDelete, dirEmpty, dirIs, dirMove, dirRead, fileCreate, fileCreateJson, fileCreateYaml, fileExec, fileExists, fileHash, fileInstall, fileOpen, fileReadJson, fileReadYaml, filesMove, isAdmin, runCliAsAdmin, } from '../helpers/file.js';
|
|
5
5
|
import { isValidVersion, pathGetSlug, pathGetVersion, toSlug } from '../helpers/utils.js';
|
|
6
6
|
import { commandExists, getArchitecture, getSystem, isTests } from '../helpers/utilsLocal.js';
|
|
7
7
|
import { apiBuffer } from '../helpers/api.js';
|
|
@@ -296,6 +296,48 @@ export class ManagerLocal extends Manager {
|
|
|
296
296
|
dirCreate(dirTarget);
|
|
297
297
|
dirMove(dirSource, dirTarget);
|
|
298
298
|
fileCreateJson(path.join(dirTarget, 'index.json'), pkgVersion);
|
|
299
|
+
// Ensure executable permissions for likely executables inside moved app/project/preset
|
|
300
|
+
try {
|
|
301
|
+
const movedFiles = dirRead(path.join(dirTarget, '**', '*')).filter(f => !dirIs(f));
|
|
302
|
+
movedFiles.forEach((movedFile) => {
|
|
303
|
+
const ext = path.extname(movedFile).slice(1).toLowerCase();
|
|
304
|
+
if (['', 'elf', 'exe'].includes(ext)) {
|
|
305
|
+
try {
|
|
306
|
+
fileExec(movedFile);
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
this.log(`Failed to set exec on ${movedFile}:`, err);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
catch (err) {
|
|
315
|
+
this.log('Error while setting executable permissions:', err);
|
|
316
|
+
}
|
|
317
|
+
// Also handle macOS .app bundles: set exec on binaries in Contents/MacOS
|
|
318
|
+
try {
|
|
319
|
+
const appDirs = dirRead(path.join(dirTarget, '**', '*.app')).filter(d => dirIs(d));
|
|
320
|
+
appDirs.forEach((appDir) => {
|
|
321
|
+
try {
|
|
322
|
+
const macosBinPattern = path.join(appDir, 'Contents', 'MacOS', '**', '*');
|
|
323
|
+
const macosFiles = dirRead(macosBinPattern).filter(f => !dirIs(f));
|
|
324
|
+
macosFiles.forEach((binFile) => {
|
|
325
|
+
try {
|
|
326
|
+
fileExec(binFile);
|
|
327
|
+
}
|
|
328
|
+
catch (err) {
|
|
329
|
+
this.log(`Failed to set exec on app binary ${binFile}:`, err);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
catch (err) {
|
|
334
|
+
this.log(`Error scanning .app contents for ${appDir}:`, err);
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
catch (err) {
|
|
339
|
+
this.log(err);
|
|
340
|
+
}
|
|
299
341
|
}
|
|
300
342
|
}
|
|
301
343
|
}
|
|
@@ -385,14 +427,16 @@ export class ManagerLocal extends Manager {
|
|
|
385
427
|
try {
|
|
386
428
|
const openPath = openableFile.open;
|
|
387
429
|
const fileExt = path.extname(openPath).slice(1).toLowerCase();
|
|
388
|
-
let
|
|
389
|
-
if (this.type === RegistryType.
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
430
|
+
let packageDir;
|
|
431
|
+
if (this.type === RegistryType.Plugins) {
|
|
432
|
+
// For plugins, use type-specific subdirectories
|
|
433
|
+
const formatDir = pluginFormatDir[fileExt] || 'Plugin';
|
|
434
|
+
packageDir = path.join(this.typeDir, formatDir, slug, versionNum);
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
// For apps/projects/presets, files are in direct package directory
|
|
438
|
+
packageDir = path.join(this.typeDir, slug, versionNum);
|
|
439
|
+
}
|
|
396
440
|
let fullPath;
|
|
397
441
|
if (path.isAbsolute(openPath)) {
|
|
398
442
|
fullPath = openPath;
|
|
@@ -1,18 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin categories are derived from the official Steinberg VST3 Plug-in
|
|
3
|
+
* Type definitions (plugType) provided by the VST3 SDK.
|
|
4
|
+
*
|
|
5
|
+
* The VST3 SDK defines a large set of hierarchical category strings
|
|
6
|
+
* (e.g. "Fx|Dynamics", "Fx|EQ", "Instrument|Synth") which serve multiple
|
|
7
|
+
* purposes including host routing, UI grouping, and capability flags.
|
|
8
|
+
*
|
|
9
|
+
* This project intentionally normalizes and consolidates those categories
|
|
10
|
+
* into a smaller, format-agnostic set suitable for a plugin registry and
|
|
11
|
+
* tagging system. Not all VST3 plugType values map 1:1 to public categories.
|
|
12
|
+
*
|
|
13
|
+
* Authoritative source (VST3 SDK):
|
|
14
|
+
* https://steinbergmedia.github.io/vst3_doc/vstinterfaces/group__plugType.html
|
|
15
|
+
*/
|
|
1
16
|
export declare enum PluginCategoryEffect {
|
|
2
|
-
|
|
3
|
-
|
|
17
|
+
Delay = "delay",
|
|
18
|
+
Distortion = "distortion",
|
|
19
|
+
Dynamics = "dynamics",
|
|
4
20
|
Eq = "eq",
|
|
5
21
|
Filter = "filter",
|
|
6
|
-
|
|
22
|
+
Modulation = "modulation",
|
|
23
|
+
Pitch = "pitch",
|
|
24
|
+
Reverb = "reverb",
|
|
25
|
+
Spatial = "spatial",
|
|
26
|
+
Utility = "utility"
|
|
7
27
|
}
|
|
8
28
|
export declare enum PluginCategoryInstrument {
|
|
9
|
-
|
|
29
|
+
Bass = "bass",
|
|
30
|
+
Brass = "brass",
|
|
31
|
+
Drum = "drum",
|
|
32
|
+
Fx = "fx",
|
|
10
33
|
Guitar = "guitar",
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
34
|
+
Piano = "piano",
|
|
35
|
+
Sampler = "sampler",
|
|
36
|
+
Strings = "strings",
|
|
37
|
+
Synth = "synth",
|
|
38
|
+
Voice = "voice",
|
|
39
|
+
Woodwinds = "woodwinds"
|
|
16
40
|
}
|
|
17
41
|
export interface PluginCategoryOption {
|
|
18
42
|
description: string;
|
|
@@ -1,94 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin categories are derived from the official Steinberg VST3 Plug-in
|
|
3
|
+
* Type definitions (plugType) provided by the VST3 SDK.
|
|
4
|
+
*
|
|
5
|
+
* The VST3 SDK defines a large set of hierarchical category strings
|
|
6
|
+
* (e.g. "Fx|Dynamics", "Fx|EQ", "Instrument|Synth") which serve multiple
|
|
7
|
+
* purposes including host routing, UI grouping, and capability flags.
|
|
8
|
+
*
|
|
9
|
+
* This project intentionally normalizes and consolidates those categories
|
|
10
|
+
* into a smaller, format-agnostic set suitable for a plugin registry and
|
|
11
|
+
* tagging system. Not all VST3 plugType values map 1:1 to public categories.
|
|
12
|
+
*
|
|
13
|
+
* Authoritative source (VST3 SDK):
|
|
14
|
+
* https://steinbergmedia.github.io/vst3_doc/vstinterfaces/group__plugType.html
|
|
15
|
+
*/
|
|
1
16
|
export var PluginCategoryEffect;
|
|
2
17
|
(function (PluginCategoryEffect) {
|
|
3
|
-
PluginCategoryEffect["
|
|
4
|
-
PluginCategoryEffect["
|
|
18
|
+
PluginCategoryEffect["Delay"] = "delay";
|
|
19
|
+
PluginCategoryEffect["Distortion"] = "distortion";
|
|
20
|
+
PluginCategoryEffect["Dynamics"] = "dynamics";
|
|
5
21
|
PluginCategoryEffect["Eq"] = "eq";
|
|
6
22
|
PluginCategoryEffect["Filter"] = "filter";
|
|
23
|
+
PluginCategoryEffect["Modulation"] = "modulation";
|
|
24
|
+
PluginCategoryEffect["Pitch"] = "pitch";
|
|
7
25
|
PluginCategoryEffect["Reverb"] = "reverb";
|
|
26
|
+
PluginCategoryEffect["Spatial"] = "spatial";
|
|
27
|
+
PluginCategoryEffect["Utility"] = "utility";
|
|
8
28
|
})(PluginCategoryEffect || (PluginCategoryEffect = {}));
|
|
9
29
|
export var PluginCategoryInstrument;
|
|
10
30
|
(function (PluginCategoryInstrument) {
|
|
11
|
-
PluginCategoryInstrument["
|
|
31
|
+
PluginCategoryInstrument["Bass"] = "bass";
|
|
32
|
+
PluginCategoryInstrument["Brass"] = "brass";
|
|
33
|
+
PluginCategoryInstrument["Drum"] = "drum";
|
|
34
|
+
PluginCategoryInstrument["Fx"] = "fx";
|
|
12
35
|
PluginCategoryInstrument["Guitar"] = "guitar";
|
|
13
|
-
PluginCategoryInstrument["
|
|
14
|
-
PluginCategoryInstrument["
|
|
15
|
-
PluginCategoryInstrument["
|
|
16
|
-
PluginCategoryInstrument["
|
|
17
|
-
PluginCategoryInstrument["
|
|
36
|
+
PluginCategoryInstrument["Piano"] = "piano";
|
|
37
|
+
PluginCategoryInstrument["Sampler"] = "sampler";
|
|
38
|
+
PluginCategoryInstrument["Strings"] = "strings";
|
|
39
|
+
PluginCategoryInstrument["Synth"] = "synth";
|
|
40
|
+
PluginCategoryInstrument["Voice"] = "voice";
|
|
41
|
+
PluginCategoryInstrument["Woodwinds"] = "woodwinds";
|
|
18
42
|
})(PluginCategoryInstrument || (PluginCategoryInstrument = {}));
|
|
19
43
|
export const pluginCategoryEffects = [
|
|
20
44
|
{
|
|
21
|
-
|
|
22
|
-
value: PluginCategoryEffect.
|
|
23
|
-
|
|
24
|
-
tags: ['
|
|
45
|
+
name: 'Delay',
|
|
46
|
+
value: PluginCategoryEffect.Delay,
|
|
47
|
+
description: 'Echoes and rhythmic repeats.',
|
|
48
|
+
tags: ['Delay', 'Echo', 'Tape Delay', 'Ping Pong Delay', 'Multi-Tap Delay'],
|
|
25
49
|
},
|
|
26
50
|
{
|
|
27
|
-
|
|
28
|
-
value: PluginCategoryEffect.
|
|
29
|
-
|
|
30
|
-
tags: ['
|
|
51
|
+
name: 'Distortion',
|
|
52
|
+
value: PluginCategoryEffect.Distortion,
|
|
53
|
+
description: 'Add saturation, grit, or harmonic color.',
|
|
54
|
+
tags: ['Distortion', 'Saturation', 'Overdrive', 'Fuzz', 'Amp', 'Amplifier', 'Exciter', 'Waveshaper'],
|
|
31
55
|
},
|
|
32
56
|
{
|
|
33
|
-
|
|
57
|
+
name: 'Dynamics',
|
|
58
|
+
value: PluginCategoryEffect.Dynamics,
|
|
59
|
+
description: 'Control dynamics and signal level.',
|
|
60
|
+
tags: ['Dynamics', 'Compressor', 'Limiter', 'Expander', 'Gate', 'Noise Gate'],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'EQ',
|
|
34
64
|
value: PluginCategoryEffect.Eq,
|
|
35
|
-
|
|
36
|
-
tags: ['EQ', 'Equalizer', '
|
|
65
|
+
description: 'Shape and balance frequency content.',
|
|
66
|
+
tags: ['EQ', 'Equalizer', 'Parametric EQ', 'Graphic EQ', 'Tone Control'],
|
|
37
67
|
},
|
|
38
68
|
{
|
|
39
|
-
description: 'Adjust tone and sculpt frequencies.',
|
|
40
|
-
value: PluginCategoryEffect.Filter,
|
|
41
69
|
name: 'Filter',
|
|
42
|
-
|
|
70
|
+
value: PluginCategoryEffect.Filter,
|
|
71
|
+
description: 'Sculpt sound using frequency filtering.',
|
|
72
|
+
tags: ['Filter', 'Lowpass', 'Highpass', 'Bandpass', 'Notch', 'Resonant', 'Auto Filter'],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'Modulation',
|
|
76
|
+
value: PluginCategoryEffect.Modulation,
|
|
77
|
+
description: 'Create motion, width, and modulation.',
|
|
78
|
+
tags: ['Modulation', 'Chorus', 'Flanger', 'Phaser', 'Tremolo', 'Vibrato', 'Rotary', 'Ensemble'],
|
|
43
79
|
},
|
|
44
80
|
{
|
|
45
|
-
|
|
81
|
+
name: 'Pitch',
|
|
82
|
+
value: PluginCategoryEffect.Pitch,
|
|
83
|
+
description: 'Pitch shifting and harmonic processing.',
|
|
84
|
+
tags: ['Pitch', 'Pitch Shifter', 'Harmonizer', 'Vocoder', 'Octaver', 'Formant'],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'Reverb',
|
|
46
88
|
value: PluginCategoryEffect.Reverb,
|
|
47
|
-
|
|
48
|
-
tags: ['Reverb', '
|
|
89
|
+
description: 'Simulate space, depth, and ambience.',
|
|
90
|
+
tags: ['Reverb', 'Room', 'Hall', 'Plate', 'Spring', 'Convolution', 'Ambience'],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'Spatial',
|
|
94
|
+
value: PluginCategoryEffect.Spatial,
|
|
95
|
+
description: 'Stereo positioning and spatial control.',
|
|
96
|
+
tags: ['Spatial', 'Stereo', 'Panner', 'Width', 'Imager', 'Mid/Side', 'Binaural'],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'Utility',
|
|
100
|
+
value: PluginCategoryEffect.Utility,
|
|
101
|
+
description: 'Analysis, routing, and signal tools.',
|
|
102
|
+
tags: ['Utility', 'Gain', 'Trim', 'Analyzer', 'Meter', 'Phase', 'Mono', 'Polarity'],
|
|
49
103
|
},
|
|
50
104
|
];
|
|
51
105
|
export const pluginCategoryInstruments = [
|
|
52
106
|
{
|
|
53
|
-
|
|
54
|
-
value: PluginCategoryInstrument.
|
|
107
|
+
name: 'Bass',
|
|
108
|
+
value: PluginCategoryInstrument.Bass,
|
|
109
|
+
description: 'Bass instruments.',
|
|
110
|
+
tags: ['Bass'],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'Brass',
|
|
114
|
+
value: PluginCategoryInstrument.Brass,
|
|
115
|
+
description: 'Brass instruments.',
|
|
116
|
+
tags: ['Brass'],
|
|
117
|
+
},
|
|
118
|
+
{
|
|
55
119
|
name: 'Drums',
|
|
56
|
-
|
|
120
|
+
value: PluginCategoryInstrument.Drum,
|
|
121
|
+
description: 'Drum and percussion instruments.',
|
|
122
|
+
tags: ['Drums', 'Drum Kit', 'Percussion'],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'FX Instrument',
|
|
126
|
+
value: PluginCategoryInstrument.Fx,
|
|
127
|
+
description: 'Sound-effect or experimental instruments.',
|
|
128
|
+
tags: ['FX', 'Sound Effects'],
|
|
57
129
|
},
|
|
58
130
|
{
|
|
59
|
-
description: '',
|
|
60
|
-
value: PluginCategoryInstrument.Guitar,
|
|
61
131
|
name: 'Guitar',
|
|
62
|
-
|
|
132
|
+
value: PluginCategoryInstrument.Guitar,
|
|
133
|
+
description: 'Guitar instruments.',
|
|
134
|
+
tags: ['Guitar'],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'Piano / Keys',
|
|
138
|
+
value: PluginCategoryInstrument.Piano,
|
|
139
|
+
description: 'Piano and keyboard instruments.',
|
|
140
|
+
tags: ['Piano', 'Keys', 'Keyboard'],
|
|
63
141
|
},
|
|
64
142
|
{
|
|
65
|
-
|
|
66
|
-
value: PluginCategoryInstrument.
|
|
67
|
-
|
|
68
|
-
tags: ['
|
|
143
|
+
name: 'Sampler',
|
|
144
|
+
value: PluginCategoryInstrument.Sampler,
|
|
145
|
+
description: 'Sample-based instruments.',
|
|
146
|
+
tags: ['Sampler', 'Sample'],
|
|
69
147
|
},
|
|
70
148
|
{
|
|
71
|
-
|
|
72
|
-
value: PluginCategoryInstrument.
|
|
73
|
-
|
|
74
|
-
tags: ['
|
|
149
|
+
name: 'Strings',
|
|
150
|
+
value: PluginCategoryInstrument.Strings,
|
|
151
|
+
description: 'String instruments.',
|
|
152
|
+
tags: ['Strings', 'String Ensemble'],
|
|
75
153
|
},
|
|
76
154
|
{
|
|
77
|
-
|
|
78
|
-
value: PluginCategoryInstrument.
|
|
79
|
-
|
|
80
|
-
tags: ['
|
|
155
|
+
name: 'Synth',
|
|
156
|
+
value: PluginCategoryInstrument.Synth,
|
|
157
|
+
description: 'Sound synthesis instruments.',
|
|
158
|
+
tags: ['Synth', 'Synthesizer'],
|
|
81
159
|
},
|
|
82
160
|
{
|
|
83
|
-
|
|
84
|
-
value: PluginCategoryInstrument.
|
|
85
|
-
|
|
86
|
-
tags: ['
|
|
161
|
+
name: 'Voice',
|
|
162
|
+
value: PluginCategoryInstrument.Voice,
|
|
163
|
+
description: 'Vocal and choir instruments.',
|
|
164
|
+
tags: ['Voice', 'Vocal', 'Choir'],
|
|
87
165
|
},
|
|
88
166
|
{
|
|
89
|
-
|
|
90
|
-
value: PluginCategoryInstrument.
|
|
91
|
-
|
|
92
|
-
tags: ['
|
|
167
|
+
name: 'Woodwinds',
|
|
168
|
+
value: PluginCategoryInstrument.Woodwinds,
|
|
169
|
+
description: 'Woodwind instruments.',
|
|
170
|
+
tags: ['Woodwinds'],
|
|
93
171
|
},
|
|
94
172
|
];
|