@gorilla-engine-sdk/ge-session-presets-lib 0.5.13

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.
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SessionAndPresetsErrors = SessionAndPresetsErrors;
37
+ const React = __importStar(require("react"));
38
+ const ge_dialogs_lib_1 = require("@gorilla-engine-sdk/ge-dialogs-lib");
39
+ const react_1 = require("react");
40
+ const SessionAndPresetsState_1 = require("./state/SessionAndPresetsState");
41
+ const SessionAndPresetsError_1 = require("./errors/SessionAndPresetsError");
42
+ const _1 = require(".");
43
+ function SessionAndPresetsErrors(props) {
44
+ const sessionAndPresetState = (0, SessionAndPresetsState_1.useSessionAndPresetsState)();
45
+ const defaultModalProps = {
46
+ width: 400,
47
+ height: 200,
48
+ title: 'An Error Occured!',
49
+ message: 'Error message',
50
+ cancelTrigger: true,
51
+ cancelTriggerLabel: 'Ok',
52
+ onCancelTrigger: onCancel,
53
+ approveTrigger: false,
54
+ closeTrigger: true,
55
+ };
56
+ const [modalProps, setModalProps] = (0, react_1.useState)({
57
+ ...defaultModalProps,
58
+ });
59
+ const modalPropsRef = (0, react_1.useRef)(modalProps);
60
+ modalPropsRef.current = modalProps;
61
+ const [showModal, hideModal] = (0, ge_dialogs_lib_1.useModal)(() => React.createElement(ge_dialogs_lib_1.DefaultModal, { ...modalPropsRef.current }), [true, false]);
62
+ function onCancel() {
63
+ hideModal();
64
+ }
65
+ (0, react_1.useEffect)(() => {
66
+ const e = sessionAndPresetState.error;
67
+ if (e) {
68
+ console.error(`${_1.GE_SESSION_PRESETS_LIB} SessionAndPresetsErrors: useEffect [sessionAndPresetState.error] ${sessionAndPresetState.error}`);
69
+ if (e instanceof SessionAndPresetsError_1.SessionAndPresetsError) {
70
+ console.error(`${_1.GE_SESSION_PRESETS_LIB} SessionAndPresetsErrors: useEffect [sessionAndPresetState.error] ${e.defaultTitle} ${e.defaultMessage}`);
71
+ /*console.log(e);
72
+ console.log(e.type);
73
+ console.log(e.stack);*/
74
+ setModalProps({
75
+ ...defaultModalProps,
76
+ title: e.defaultTitle,
77
+ message: e.defaultMessage,
78
+ });
79
+ showModal();
80
+ }
81
+ else {
82
+ const err = e;
83
+ setModalProps({
84
+ ...defaultModalProps,
85
+ title: 'An Error occured!',
86
+ message: err.message,
87
+ });
88
+ showModal();
89
+ }
90
+ }
91
+ }, [sessionAndPresetState.error]);
92
+ return React.createElement(React.Fragment, null);
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbkFuZFByZXNldEVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TZXNzaW9uQW5kUHJlc2V0RXJyb3JzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSwwREFpRUM7QUFuRkQsNkNBQThCO0FBRTlCLHVFQUkyQztBQUMzQyxpQ0FBbUQ7QUFDbkQsMkVBR3VDO0FBRXZDLDRFQUF3RTtBQUN4RSx3QkFBMEM7QUFJMUMsU0FBZ0IsdUJBQXVCLENBQUMsS0FBbUM7SUFDekUsTUFBTSxxQkFBcUIsR0FDekIsSUFBQSxrREFBeUIsR0FBRSxDQUFBO0lBRTdCLE1BQU0saUJBQWlCLEdBQUc7UUFDeEIsS0FBSyxFQUFFLEdBQUc7UUFDVixNQUFNLEVBQUUsR0FBRztRQUVYLEtBQUssRUFBRSxtQkFBbUI7UUFDMUIsT0FBTyxFQUFFLGVBQWU7UUFFeEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixlQUFlLEVBQUUsUUFBUTtRQUN6QixjQUFjLEVBQUUsS0FBSztRQUNyQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFBO0lBQ0QsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxJQUFBLGdCQUFRLEVBQW9CO1FBQzlELEdBQUcsaUJBQWlCO0tBQ3JCLENBQUMsQ0FBQTtJQUVGLE1BQU0sYUFBYSxHQUFHLElBQUEsY0FBTSxFQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3hDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFBO0lBRWxDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBQSx5QkFBUSxFQUNyQyxHQUFHLEVBQUUsQ0FBQyxvQkFBQyw2QkFBWSxPQUFLLGFBQWEsQ0FBQyxPQUFPLEdBQUksRUFDakQsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQ2QsQ0FBQTtJQUNELFNBQVMsUUFBUTtRQUNmLFNBQVMsRUFBRSxDQUFBO0lBQ2IsQ0FBQztJQUVELElBQUEsaUJBQVMsRUFBQyxHQUFHLEVBQUU7UUFDYixNQUFNLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUE7UUFDckMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQ1gsR0FBRyx5QkFBc0IscUVBQXFFLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUM1SCxDQUFBO1lBQ0QsSUFBSSxDQUFDLFlBQVksK0NBQXNCLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxDQUFDLEtBQUssQ0FDWCxHQUFHLHlCQUFzQixxRUFBcUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQ25JLENBQUE7Z0JBQ0Q7O3VDQUV1QjtnQkFFdkIsYUFBYSxDQUFDO29CQUNaLEdBQUcsaUJBQWlCO29CQUNwQixLQUFLLEVBQUUsQ0FBQyxDQUFDLFlBQVk7b0JBQ3JCLE9BQU8sRUFBRSxDQUFDLENBQUMsY0FBYztpQkFDMUIsQ0FBQyxDQUFBO2dCQUNGLFNBQVMsRUFBRSxDQUFBO1lBQ2IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sR0FBRyxHQUFVLENBQUMsQ0FBQTtnQkFDcEIsYUFBYSxDQUFDO29CQUNaLEdBQUcsaUJBQWlCO29CQUNwQixLQUFLLEVBQUUsbUJBQW1CO29CQUMxQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87aUJBQ3JCLENBQUMsQ0FBQTtnQkFDRixTQUFTLEVBQUUsQ0FBQTtZQUNiLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUVqQyxPQUFPLHlDQUFLLENBQUE7QUFDZCxDQUFDIn0=
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+ type SessionAndPresetsWrapper = {
3
+ children?: React.ReactNode;
4
+ };
5
+ /**
6
+ * Orchestrator component that handles DAW session callbacks, preset
7
+ * directory scanning, file-system watching, and initial preset loading.
8
+ *
9
+ * Must be placed **inside** {@link SessionAndPresetsStateProvider}. Wrap
10
+ * your plugin UI with this component so that presets and sessions are ready
11
+ * before your UI renders.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <SessionAndPresetsStateProvider config={config} instrument={instrument}>
16
+ * <SessionAndPresetsWrapper>
17
+ * <App />
18
+ * </SessionAndPresetsWrapper>
19
+ * </SessionAndPresetsStateProvider>
20
+ * ```
21
+ */
22
+ declare function SessionAndPresetsWrapper(props: SessionAndPresetsWrapper): React.JSX.Element;
23
+ export default SessionAndPresetsWrapper;
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const React = __importStar(require("react"));
37
+ const fs = require("fs-extra");
38
+ const util = require('util');
39
+ const react_1 = require("react");
40
+ const SessionAndPresetsState_1 = require("./state/SessionAndPresetsState");
41
+ const useSessionAndPresets_1 = require("./hooks/useSessionAndPresets");
42
+ const SessionAndPresetErrors_1 = require("./SessionAndPresetErrors");
43
+ const SessionAndPresetsError_1 = require("./errors/SessionAndPresetsError");
44
+ const _1 = require(".");
45
+ /**
46
+ * Orchestrator component that handles DAW session callbacks, preset
47
+ * directory scanning, file-system watching, and initial preset loading.
48
+ *
49
+ * Must be placed **inside** {@link SessionAndPresetsStateProvider}. Wrap
50
+ * your plugin UI with this component so that presets and sessions are ready
51
+ * before your UI renders.
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * <SessionAndPresetsStateProvider config={config} instrument={instrument}>
56
+ * <SessionAndPresetsWrapper>
57
+ * <App />
58
+ * </SessionAndPresetsWrapper>
59
+ * </SessionAndPresetsStateProvider>
60
+ * ```
61
+ */
62
+ function SessionAndPresetsWrapper(props) {
63
+ const sessionAndPresetState = (0, SessionAndPresetsState_1.useSessionAndPresetsState)();
64
+ const sessionAndPresetStateRef = (0, react_1.useRef)(sessionAndPresetState);
65
+ sessionAndPresetStateRef.current = sessionAndPresetState;
66
+ const dispatch = (0, SessionAndPresetsState_1.useSessionAndPresetsStateDispatch)();
67
+ const sessionAndPresetsConfig = (0, SessionAndPresetsState_1.useSessionAndPresetsConfig)();
68
+ const sessionAndPresetsConfigRef = (0, react_1.useRef)(sessionAndPresetsConfig);
69
+ sessionAndPresetsConfigRef.current = sessionAndPresetsConfig;
70
+ const [initialized, setInitialized] = (0, react_1.useState)(false);
71
+ const initializedRef = (0, react_1.useRef)(initialized);
72
+ initializedRef.current = initialized;
73
+ const presetManager = (0, SessionAndPresetsState_1.useSessionAndPresetsManager)();
74
+ const { saveSession, loadSession, loadPresets, loadPresetFromSource } = (0, useSessionAndPresets_1.useSessionAndPresets)();
75
+ /**
76
+ * When presetManager is ready/available.
77
+ * - if handleSession = true - attaches listeners for save & loadSession
78
+ * - sets watcher to user-preset-dir to re-load presets on changes
79
+ * - triggeres loadPresets logic
80
+ */
81
+ (0, react_1.useEffect)(() => {
82
+ if (sessionAndPresetsConfigRef.current.debug)
83
+ console.debug(`${_1.GE_SESSION_PRESETS_LIB} SessionAndPresetsWrapper: useEffect [presetManager] `);
84
+ if (presetManager && presetManager.config.handleSession) {
85
+ // Session load callback
86
+ GorillaEngine.setSessionLoadCallback((stateString) => {
87
+ if (sessionAndPresetsConfigRef.current.debug)
88
+ console.debug(`${_1.GE_SESSION_PRESETS_LIB} SessionAndPresetsWrapper: GorillaEngine.setSessionLoadCallback`);
89
+ const session = loadSession(JSON.parse(stateString));
90
+ //return JSON.stringify(session)
91
+ return stateString;
92
+ }, {});
93
+ // Session save callback
94
+ GorillaEngine.setSessionSaveCallback((additionalStateString) => {
95
+ return saveSession(additionalStateString);
96
+ }, {});
97
+ }
98
+ const fb = async () => {
99
+ if (presetManager.config.handlePresets && presetManager.config.autoLoadPresets) {
100
+ const presetLoacations = [
101
+ {
102
+ type: sessionAndPresetsConfig.factoryPresetType,
103
+ path: sessionAndPresetsConfig.factoryPresetPath,
104
+ },
105
+ {
106
+ type: sessionAndPresetsConfig.userPresetType,
107
+ path: sessionAndPresetsConfig.userPresetPath,
108
+ },
109
+ ];
110
+ // load presets via hook
111
+ await loadPresets(presetLoacations);
112
+ // add watch to presets dir
113
+ fs.watch(sessionAndPresetsConfig.userPresetPath, { recursive: true }, (eventType, fileName) => {
114
+ if (!fileName.includes('.DS_Store')) {
115
+ // re-load content via hook
116
+ loadPresets(presetLoacations);
117
+ }
118
+ });
119
+ }
120
+ return;
121
+ };
122
+ if (presetManager) {
123
+ fb();
124
+ }
125
+ }, [presetManager]);
126
+ /**
127
+ * When presets are loaded
128
+ * - checks if we have to handle a session or a new instantiation scenario
129
+ * - loads session if available
130
+ * - otherwise loads default preset
131
+ */
132
+ (0, react_1.useEffect)(() => {
133
+ if (sessionAndPresetState.presets && sessionAndPresetState.instrument) {
134
+ if (sessionAndPresetsConfigRef.current.debug)
135
+ console.debug(`${_1.GE_SESSION_PRESETS_LIB} SessionAndPresetsWrapper: useEffect [sessionAndPresetState.presets] - presetManager.sessionInvolved: ${presetManager?.sessionInvolved}`);
136
+ }
137
+ // if already initialised we don't need to run buildup-logic
138
+ if (initialized)
139
+ return;
140
+ if (sessionAndPresetState.presets &&
141
+ sessionAndPresetState.presets.length > 0 &&
142
+ sessionAndPresetState.instrument &&
143
+ !presetManager.sessionInvolved) {
144
+ // if loadInitialPreset=true in config
145
+ if ((sessionAndPresetsConfigRef.current.loadInitialPreset && !presetManager.isLoadingSession) ||
146
+ !presetManager.loadedSession) {
147
+ // Pick the first preset as fallback
148
+ let initialPreset = sessionAndPresetStateRef.current.presets[0];
149
+ // if initialPresetPath is set & successfully validated
150
+ if (sessionAndPresetStateRef.current.initialPresetPath) {
151
+ const initialPresetPath = sessionAndPresetStateRef.current.initialPresetPath;
152
+ const presetItem = sessionAndPresetStateRef.current.presets.find((preset) => preset.filePath === initialPresetPath);
153
+ if (fs.existsSync(initialPresetPath) &&
154
+ presetItem &&
155
+ presetItem.type === sessionAndPresetsConfigRef.current.factoryPresetType) {
156
+ initialPreset = presetItem;
157
+ }
158
+ else {
159
+ // if an initialPresetPath is provided but preset can not be found, lets inform about it!
160
+ const e = new SessionAndPresetsError_1.SessionAndPresetsError(SessionAndPresetsError_1.SessionAndPresetsErrorTypes.initialPresetLoading, 'Loading Initial Preset Failed!', `No preset found for initialPresetPath ${initialPresetPath}`, { path: initialPresetPath });
161
+ dispatch({
162
+ type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setError,
163
+ payload: { error: e },
164
+ });
165
+ }
166
+ }
167
+ console.debug(`${_1.GE_SESSION_PRESETS_LIB} SessionAndPresetsWrapper: useEffect [sessionAndPresetState.presets] - load initial preset: ${initialPreset.filePath}`);
168
+ loadPresetFromSource(initialPreset.filePath, true); //await
169
+ }
170
+ else {
171
+ console.debug(`${_1.GE_SESSION_PRESETS_LIB} SessionAndPresetsWrapper: useEffect [sessionAndPresetState.presets] - do nothing - presetManager.sessionInvolved: ${presetManager.sessionInvolved}`);
172
+ }
173
+ setInitialized(true);
174
+ }
175
+ }, [sessionAndPresetState.presets, sessionAndPresetState.instrument]);
176
+ return (React.createElement(React.Fragment, null,
177
+ sessionAndPresetsConfig.handleErrors && React.createElement(SessionAndPresetErrors_1.SessionAndPresetsErrors, null),
178
+ props.children));
179
+ //return <>{initialized && <>{props.children}</>}</>
180
+ }
181
+ exports.default = SessionAndPresetsWrapper;
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbkFuZFByZXNldHNXcmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1Nlc3Npb25BbmRQcmVzZXRzV3JhcHBlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBK0I7QUFFL0IsK0JBQWdDO0FBRWhDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUU3QixpQ0FBb0Q7QUFDcEQsMkVBT3dDO0FBR3hDLHVFQUFvRTtBQUVwRSxxRUFBbUU7QUFFbkUsNEVBR3lDO0FBQ3pDLHdCQUEyQztBQU0zQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQVMsd0JBQXdCLENBQUMsS0FBK0I7SUFDL0QsTUFBTSxxQkFBcUIsR0FBMkIsSUFBQSxrREFBeUIsR0FBRSxDQUFDO0lBQ2xGLE1BQU0sd0JBQXdCLEdBQUcsSUFBQSxjQUFNLEVBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMvRCx3QkFBd0IsQ0FBQyxPQUFPLEdBQUcscUJBQXFCLENBQUM7SUFFekQsTUFBTSxRQUFRLEdBQUcsSUFBQSwwREFBaUMsR0FBRSxDQUFDO0lBRXJELE1BQU0sdUJBQXVCLEdBQTRCLElBQUEsbURBQTBCLEdBQUUsQ0FBQztJQUN0RixNQUFNLDBCQUEwQixHQUFHLElBQUEsY0FBTSxFQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDbkUsMEJBQTBCLENBQUMsT0FBTyxHQUFHLHVCQUF1QixDQUFDO0lBRTdELE1BQU0sQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEdBQUcsSUFBQSxnQkFBUSxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE1BQU0sY0FBYyxHQUFHLElBQUEsY0FBTSxFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDO0lBRXJDLE1BQU0sYUFBYSxHQUFtQixJQUFBLG9EQUEyQixHQUFF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
@@ -0,0 +1,2 @@
1
+ import { SessionAndPresetsConfig } from './types/SessionAndPresetsConfig';
2
+ export declare const defaultSessionAndPresetsConfig: SessionAndPresetsConfig;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultSessionAndPresetsConfig = void 0;
4
+ exports.defaultSessionAndPresetsConfig = {
5
+ presetFileSuffix: ".patch",
6
+ factoryPresetType: 'FACTORY',
7
+ userPresetType: 'USER',
8
+ handleSession: true,
9
+ handlePresets: true,
10
+ autoLoadPresets: true,
11
+ loadInitialPreset: true,
12
+ handleErrors: true,
13
+ flagPresetChanged: false,
14
+ retainUIScale: true,
15
+ blockAAXInitialSession: false,
16
+ debug: false
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdFNlc3Npb25BbmRQcmVzZXRzQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RlZmF1bHRTZXNzaW9uQW5kUHJlc2V0c0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLDhCQUE4QixHQUE0QjtJQUNyRSxnQkFBZ0IsRUFBRSxRQUFRO0lBQzFCLGlCQUFpQixFQUFFLFNBQVM7SUFDNUIsY0FBYyxFQUFFLE1BQU07SUFFdEIsYUFBYSxFQUFFLElBQUk7SUFDbkIsYUFBYSxFQUFFLElBQUk7SUFFbkIsZUFBZSxFQUFFLElBQUk7SUFDckIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixZQUFZLEVBQUUsSUFBSTtJQUNsQixpQkFBaUIsRUFBQyxLQUFLO0lBRXZCLGFBQWEsRUFBRSxJQUFJO0lBQ25CLHNCQUFzQixFQUFFLEtBQUs7SUFFN0IsS0FBSyxFQUFFLEtBQUs7Q0FDYixDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ import { SessionAndPresetsState } from './state/SessionAndPresetsState';
2
+ export declare const defaultSessionAndPresetsState: SessionAndPresetsState;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultSessionAndPresetsState = void 0;
4
+ exports.defaultSessionAndPresetsState = {
5
+ presets: [],
6
+ presetIndex: -1,
7
+ presetChanged: false,
8
+ instrument: undefined,
9
+ initialPresetPath: undefined,
10
+ };
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdFNlc3Npb25BbmRQcmVzZXRzU3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmYXVsdFNlc3Npb25BbmRQcmVzZXRzU3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRWEsUUFBQSw2QkFBNkIsR0FBMkI7SUFDbkUsT0FBTyxFQUFFLEVBQUU7SUFDWCxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsYUFBYSxFQUFFLEtBQUs7SUFDcEIsVUFBVSxFQUFFLFNBQVM7SUFDckIsaUJBQWlCLEVBQUUsU0FBUztDQUM3QixDQUFDIn0=
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Enumeration of all error types that can be thrown by the session and preset
3
+ * management system. Use this to distinguish error categories in your error
4
+ * handling code.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * try {
9
+ * await loadPresetFromSource(filePath);
10
+ * } catch (err) {
11
+ * if (err instanceof SessionAndPresetsError) {
12
+ * if (err.type === SessionAndPresetsErrorTypes.presetFileNotFound) {
13
+ * // show "preset not found" UI
14
+ * }
15
+ * }
16
+ * }
17
+ * ```
18
+ */
19
+ export declare enum SessionAndPresetsErrorTypes {
20
+ /** Catch-all for errors that do not match any specific category */
21
+ unspecific = "unspecific",
22
+ /** Application-specific custom error */
23
+ custom = "custom",
24
+ /** Error while scanning or reading the preset directory */
25
+ presetsLoading = "presetsLoading",
26
+ /** Error while loading a single preset */
27
+ presetLoading = "presetLoading",
28
+ /** The instrument state stored in the preset is in an unexpected format */
29
+ presetInstrumentFormat = "presetInstrumentFormat",
30
+ /** Failed to load the initial (default) preset on startup */
31
+ initialPresetLoading = "initialPresetLoading",
32
+ /** Error while creating an in-memory preset object */
33
+ presetCreation = "presetCreation",
34
+ /** Error while writing a preset to disk */
35
+ presetSaving = "presetSaving",
36
+ /** The requested preset file does not exist at the expected path */
37
+ presetFileNotFound = "presetFileNotFound",
38
+ /** Operation attempted before an instrument was loaded */
39
+ noInstrumentLoaded = "noInstrumentLoaded",
40
+ /** Error during DAW session restore */
41
+ loadingSession = "loadingSession",
42
+ /** Failed to apply the instrument parameter state from a preset */
43
+ applyInstrumentState = "applyInstrumentState"
44
+ }
45
+ /**
46
+ * Typed error class thrown by the session and preset management system.
47
+ *
48
+ * Every `SessionAndPresetsError` carries a {@link type} for programmatic
49
+ * handling, a short {@link defaultTitle} for display in error dialogs, a
50
+ * human-readable {@link defaultMessage}, and optional {@link details} for
51
+ * debugging.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * throw new SessionAndPresetsError(
56
+ * SessionAndPresetsErrorTypes.presetFileNotFound,
57
+ * 'Unable to load preset',
58
+ * `The preset file does not exist: ${filePath}`,
59
+ * { filePath }
60
+ * );
61
+ * ```
62
+ */
63
+ export declare class SessionAndPresetsError extends Error {
64
+ /** Identifies the category of error — use {@link SessionAndPresetsErrorTypes} or a custom string */
65
+ readonly type: SessionAndPresetsErrorTypes | string;
66
+ /** Short, user-facing title suitable for an error dialog header */
67
+ readonly defaultTitle: string;
68
+ /** Detailed, user-facing message describing what went wrong */
69
+ readonly defaultMessage: string;
70
+ /** Optional additional debugging context (file paths, raw error, etc.) */
71
+ readonly details: any;
72
+ constructor(type: SessionAndPresetsErrorTypes | string, defaultTitle: string, defaultMessage: string, details?: any);
73
+ }
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionAndPresetsError = exports.SessionAndPresetsErrorTypes = void 0;
4
+ /**
5
+ * Enumeration of all error types that can be thrown by the session and preset
6
+ * management system. Use this to distinguish error categories in your error
7
+ * handling code.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * try {
12
+ * await loadPresetFromSource(filePath);
13
+ * } catch (err) {
14
+ * if (err instanceof SessionAndPresetsError) {
15
+ * if (err.type === SessionAndPresetsErrorTypes.presetFileNotFound) {
16
+ * // show "preset not found" UI
17
+ * }
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ var SessionAndPresetsErrorTypes;
23
+ (function (SessionAndPresetsErrorTypes) {
24
+ /** Catch-all for errors that do not match any specific category */
25
+ SessionAndPresetsErrorTypes["unspecific"] = "unspecific";
26
+ /** Application-specific custom error */
27
+ SessionAndPresetsErrorTypes["custom"] = "custom";
28
+ /** Error while scanning or reading the preset directory */
29
+ SessionAndPresetsErrorTypes["presetsLoading"] = "presetsLoading";
30
+ /** Error while loading a single preset */
31
+ SessionAndPresetsErrorTypes["presetLoading"] = "presetLoading";
32
+ /** The instrument state stored in the preset is in an unexpected format */
33
+ SessionAndPresetsErrorTypes["presetInstrumentFormat"] = "presetInstrumentFormat";
34
+ /** Failed to load the initial (default) preset on startup */
35
+ SessionAndPresetsErrorTypes["initialPresetLoading"] = "initialPresetLoading";
36
+ /** Error while creating an in-memory preset object */
37
+ SessionAndPresetsErrorTypes["presetCreation"] = "presetCreation";
38
+ /** Error while writing a preset to disk */
39
+ SessionAndPresetsErrorTypes["presetSaving"] = "presetSaving";
40
+ /** The requested preset file does not exist at the expected path */
41
+ SessionAndPresetsErrorTypes["presetFileNotFound"] = "presetFileNotFound";
42
+ /** Operation attempted before an instrument was loaded */
43
+ SessionAndPresetsErrorTypes["noInstrumentLoaded"] = "noInstrumentLoaded";
44
+ /** Error during DAW session restore */
45
+ SessionAndPresetsErrorTypes["loadingSession"] = "loadingSession";
46
+ /** Failed to apply the instrument parameter state from a preset */
47
+ SessionAndPresetsErrorTypes["applyInstrumentState"] = "applyInstrumentState";
48
+ })(SessionAndPresetsErrorTypes || (exports.SessionAndPresetsErrorTypes = SessionAndPresetsErrorTypes = {}));
49
+ /**
50
+ * Typed error class thrown by the session and preset management system.
51
+ *
52
+ * Every `SessionAndPresetsError` carries a {@link type} for programmatic
53
+ * handling, a short {@link defaultTitle} for display in error dialogs, a
54
+ * human-readable {@link defaultMessage}, and optional {@link details} for
55
+ * debugging.
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * throw new SessionAndPresetsError(
60
+ * SessionAndPresetsErrorTypes.presetFileNotFound,
61
+ * 'Unable to load preset',
62
+ * `The preset file does not exist: ${filePath}`,
63
+ * { filePath }
64
+ * );
65
+ * ```
66
+ */
67
+ class SessionAndPresetsError extends Error {
68
+ /** Identifies the category of error — use {@link SessionAndPresetsErrorTypes} or a custom string */
69
+ type;
70
+ /** Short, user-facing title suitable for an error dialog header */
71
+ defaultTitle;
72
+ /** Detailed, user-facing message describing what went wrong */
73
+ defaultMessage;
74
+ /** Optional additional debugging context (file paths, raw error, etc.) */
75
+ details;
76
+ constructor(type, defaultTitle, defaultMessage, details) {
77
+ super(defaultTitle);
78
+ Object.setPrototypeOf(this, SessionAndPresetsError.prototype);
79
+ Error.captureStackTrace?.(this, this.constructor);
80
+ this.name = 'SessionAndPresetsError';
81
+ this.type = type;
82
+ this.defaultTitle = defaultTitle;
83
+ this.defaultMessage = defaultMessage;
84
+ this.details = details;
85
+ }
86
+ }
87
+ exports.SessionAndPresetsError = SessionAndPresetsError;
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbkFuZFByZXNldHNFcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvU2Vzc2lvbkFuZFByZXNldHNFcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxJQUFZLDJCQXlCWDtBQXpCRCxXQUFZLDJCQUEyQjtJQUNyQyxtRUFBbUU7SUFDbkUsd0RBQXlCLENBQUE7SUFDekIsd0NBQXdDO0lBQ3hDLGdEQUFpQixDQUFBO0lBQ2pCLDJEQUEyRDtJQUMzRCxnRUFBaUMsQ0FBQTtJQUNqQywwQ0FBMEM7SUFDMUMsOERBQStCLENBQUE7SUFDL0IsMkVBQTJFO0lBQzNFLGdGQUFpRCxDQUFBO0lBQ2pELDZEQUE2RDtJQUM3RCw0RUFBNkMsQ0FBQTtJQUM3QyxzREFBc0Q7SUFDdEQsZ0VBQWlDLENBQUE7SUFDakMsMkNBQTJDO0lBQzNDLDREQUE2QixDQUFBO0lBQzdCLG9FQUFvRTtJQUNwRSx3RUFBeUMsQ0FBQTtJQUN6QywwREFBMEQ7SUFDMUQsd0VBQXlDLENBQUE7SUFDekMsdUNBQXVDO0lBQ3ZDLGdFQUFpQyxDQUFBO0lBQ2pDLG1FQUFtRTtJQUNuRSw0RUFBNkMsQ0FBQTtBQUMvQyxDQUFDLEVBekJXLDJCQUEyQiwyQ0FBM0IsMkJBQTJCLFFBeUJ0QztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsS0FBSztJQUMvQyxvR0FBb0c7SUFDcEYsSUFBSSxDQUF1QztJQUMzRCxtRUFBbUU7SUFDbkQsWUFBWSxDQUFTO0lBQ3JDLCtEQUErRDtJQUMvQyxjQUFjLENBQVM7SUFDdkMsMEVBQTBFO0lBQzFELE9BQU8sQ0FBTTtJQUU3QixZQUNFLElBQTBDLEVBQzFDLFlBQW9CLEVBQ3BCLGNBQXNCLEVBQ3RCLE9BQWE7UUFFYixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFcEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO1FBRXJDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBRXJDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7Q0FDRjtBQTlCRCx3REE4QkMifQ==
@@ -0,0 +1,125 @@
1
+ import { Preset } from '../types/Preset';
2
+ /**
3
+ * The return value of {@link useSessionAndPresets}.
4
+ *
5
+ * Provides functions for loading and saving sessions, scanning and navigating
6
+ * presets, and creating or deleting user presets. All functions dispatch state
7
+ * updates through the {@link SessionAndPresetsStateProvider} context, so any
8
+ * component subscribed to that context will re-render when relevant state
9
+ * changes.
10
+ */
11
+ type UseSessionAndPresetsReturnValue = {
12
+ /**
13
+ * Save Session for DAW
14
+ * @param additionalStateString
15
+ * @returns
16
+ */
17
+ saveSession: (additionalStateString: string) => string;
18
+ /**
19
+ * Load Session from DAW
20
+ * @param stateJSON
21
+ * @returns
22
+ */
23
+ loadSession: (stateJSON: JSON) => Promise<any>;
24
+ /**
25
+ * Load Presets from an array of Directories
26
+ * @param dirs
27
+ * @returns
28
+ */
29
+ loadPresets: (dirs: any[]) => Promise<any>;
30
+ /**
31
+ * Get preset by it's uuid
32
+ * @param uuid
33
+ * @returns
34
+ */
35
+ getPreset: (uuid: string) => Preset;
36
+ /**
37
+ * Get the current loaded preset-item
38
+ * @returns the currently loaded preset item
39
+ */
40
+ getLoadedPreset: () => Preset;
41
+ /**
42
+ * Load Preset from Object
43
+ * @param presetObj
44
+ * @param sessionRestore
45
+ * @returns
46
+ */
47
+ loadPreset: (presetObj: any, sessionRestore?: boolean) => Promise<void>;
48
+ /**
49
+ * Load Preset from file
50
+ * @param filePath
51
+ * @param isInitialPreset
52
+ * @returns
53
+ */
54
+ loadPresetFromSource: (filePath: string, isInitialPreset: boolean, instStateToRetain?: any[]) => Promise<void>;
55
+ /**
56
+ * Create a Preset-Object
57
+ * @returns
58
+ */
59
+ createPreset: () => any;
60
+ /**
61
+ * Save Preset to path
62
+ * @param filePath Path to the new file
63
+ * @returns
64
+ */
65
+ savePreset: (filePath: string) => Promise<any>;
66
+ saveAsPreset: (filePath: string) => Promise<any>;
67
+ /**
68
+ * Delete Preset at given path
69
+ * @param filePath
70
+ * @returns
71
+ */
72
+ deletePreset: (filePath: string) => Promise<any>;
73
+ /**
74
+ * Reset an instrument property back to value provided by Preset
75
+ * @param propertyName
76
+ * @returns
77
+ */
78
+ resetInstrumentProperty: (propertyName: string) => void;
79
+ /**
80
+ * Load previous Preset
81
+ * @returns
82
+ */
83
+ prevPreset: () => void;
84
+ /**
85
+ * Load next Preset
86
+ * @returns
87
+ */
88
+ nextPreset: () => void;
89
+ /**
90
+ * Load a random Preset
91
+ * @returns
92
+ */
93
+ randomize: () => void;
94
+ /**
95
+ * Load a random preset within the same category as the current one
96
+ * @returns
97
+ */
98
+ randomizeInCategory: () => void;
99
+ };
100
+ /**
101
+ * Primary hook for interacting with the session and preset system.
102
+ *
103
+ * Must be called from within a component tree that is wrapped by
104
+ * {@link SessionAndPresetsStateProvider} and {@link SessionAndPresetsWrapper}.
105
+ *
106
+ * @returns An object with functions for session I/O and preset management.
107
+ * See {@link UseSessionAndPresetsReturnValue} for the full list.
108
+ *
109
+ * @example
110
+ * ```tsx
111
+ * function PresetToolbar() {
112
+ * const { prevPreset, nextPreset, getLoadedPreset } = useSessionAndPresets();
113
+ *
114
+ * return (
115
+ * <geLabel width={200} height={30}>
116
+ * <geButton x={0} width={30} height={30} text="<" onClick={prevPreset} />
117
+ * <geLabel x={35} width={130} height={30} text={getLoadedPreset()?.name ?? ''} />
118
+ * <geButton x={170} width={30} height={30} text=">" onClick={nextPreset} />
119
+ * </geLabel>
120
+ * );
121
+ * }
122
+ * ```
123
+ */
124
+ export declare function useSessionAndPresets(): UseSessionAndPresetsReturnValue;
125
+ export {};