@audiofab-io/fv1-core 0.5.0 → 0.6.0

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.
@@ -3,31 +3,68 @@
3
3
  *
4
4
  * A `.spnbank` file is a small JSON manifest describing the eight program
5
5
  * slots of an Easy Spin pedal. Each slot points at a workspace-relative
6
- * `.spn` (FV-1 assembly) or `.spndiagram` (block diagram) file. The manifest
7
- * is the unit of "program the whole pedal" — tooling resolves each slot to a
8
- * compiled binary at programming time.
6
+ * `.spn` (FV-1 assembly) or `.spndiagram` (block diagram) file, and may
7
+ * optionally carry presentation metadata (display name, description, pot
8
+ * labels) that override what would otherwise be derived from the source
9
+ * file or its sibling `.json`.
9
10
  *
10
11
  * Slot indices in the manifest are 1-based (slot 1..8) for human readability.
11
12
  * The runtime API uses 0-based indices via `bankSlotIndex0()`.
12
13
  *
13
14
  * Round-trip:
14
15
  * parseSpnBankJson(serializeSpnBankJson(b)) === b // structurally equal
16
+ *
17
+ * Format versions:
18
+ * v1 — { name?, slots: [{ slot, path }] }
19
+ * v2 — adds top-level metadata (version, description, author, license)
20
+ * and per-slot metadata (name, description, controls). v2 files
21
+ * carry `"version": "2.0"`. Parsers tolerate v1 files (no version
22
+ * field) and read just the basic fields, leaving extras at default.
15
23
  */
24
+ /** Per-pot label for a bank slot. */
25
+ export interface SpnBankSlotControl {
26
+ /** Pot index, 0..2. */
27
+ pot: 0 | 1 | 2;
28
+ /** Short display name (e.g. "Decay"). */
29
+ name: string;
30
+ /** Optional longer description (tooltip-friendly). */
31
+ description?: string;
32
+ /** Optional unit suffix (e.g. "ms", "Hz"). */
33
+ unit?: string;
34
+ }
16
35
  /** A single entry in a `.spnbank` file. */
17
36
  export interface SpnBankSlot {
18
37
  /** 1-based slot number (1..8). */
19
38
  slot: number;
20
- /** Workspace-relative path to a `.spn` or `.spndiagram` file. Empty
21
- * string indicates an unassigned slot. */
39
+ /** Path (relative to the bank file's directory, or absolute) to a
40
+ * `.spn` or `.spndiagram` file. Empty string indicates an unassigned slot. */
22
41
  path: string;
42
+ /** Optional display name override. Defaults to the file's basename. */
43
+ name?: string;
44
+ /** Optional description (free-form text). */
45
+ description?: string;
46
+ /** Optional pot label overrides. When present, these take precedence over
47
+ * any controls metadata that might exist in a sibling `.json` or in the
48
+ * source `.spndiagram`'s metadata block. */
49
+ controls?: SpnBankSlotControl[];
23
50
  }
24
51
  /** Parsed `.spnbank` file. */
25
52
  export interface SpnBankFile {
26
- /** Display name. Defaults to the filename's basename when not set. */
53
+ /** Schema version. v2 files set this to "2.0"; v1 files have no version field. */
54
+ version?: string;
55
+ /** Display name for the bank. Defaults to the filename's basename when not set. */
27
56
  name?: string;
57
+ /** Optional bank-level description. */
58
+ description?: string;
59
+ /** Optional bank author / credit. */
60
+ author?: string;
61
+ /** Optional licence string for the bank itself. */
62
+ license?: string;
28
63
  /** Always exactly `PROGRAM_SLOT_COUNT` (8) entries, in slot-number order. */
29
64
  slots: SpnBankSlot[];
30
65
  }
66
+ /** Current schema version emitted by `serializeSpnBankJson`. */
67
+ export declare const SPNBANK_SCHEMA_VERSION = "2.0";
31
68
  /** True if a slot has no assigned program. */
32
69
  export declare function isSlotEmpty(slot: SpnBankSlot): boolean;
33
70
  /** Build an empty bank. All slots unassigned. */
@@ -38,6 +75,10 @@ export declare function createEmptyBank(name?: string): SpnBankFile;
38
75
  * back to defaults so tooling can render a usable editor over a corrupt or
39
76
  * empty file.
40
77
  *
78
+ * Backwards-compatible: v1 files (no `version` field, slots with just
79
+ * `{ slot, path }`) parse cleanly and round-trip through serialize without
80
+ * losing fields.
81
+ *
41
82
  * @param text Raw file contents.
42
83
  * @param fallbackName Display name to use when the file's `name` field is
43
84
  * missing — typically the file basename without `.spnbank`.
@@ -45,7 +86,8 @@ export declare function createEmptyBank(name?: string): SpnBankFile;
45
86
  export declare function parseSpnBankJson(text: string, fallbackName?: string): SpnBankFile;
46
87
  /**
47
88
  * Serialise a `.spnbank` file to JSON text. Output is pretty-printed with
48
- * 2-space indentation and a trailing newline.
89
+ * 2-space indentation and a trailing newline. Optional fields are omitted
90
+ * when not set, keeping diffs minimal for simple banks.
49
91
  */
50
92
  export declare function serializeSpnBankJson(bank: SpnBankFile): string;
51
93
  /** Convenience: 0-based index for a slot. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spnbank/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ;+CAC2C;IAC3C,IAAI,EAAE,MAAM,CAAA;CACb;AAED,8BAA8B;AAC9B,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEtD;AAED,iDAAiD;AACjD,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAQ1D;AA6BD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAoBjF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAM9D;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAExD;AAED,sFAAsF;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spnbank/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,qCAAqC;AACrC,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACd,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ;mFAC+E;IAC/E,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;iDAE6C;IAC7C,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAChC;AAED,8BAA8B;AAC9B,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,QAAQ,CAAA;AAE3C,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEtD;AAED,iDAAiD;AACjD,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAS1D;AAuDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CA8BjF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAuB9D;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAExD;AAED,sFAAsF;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA"}
@@ -3,17 +3,27 @@
3
3
  *
4
4
  * A `.spnbank` file is a small JSON manifest describing the eight program
5
5
  * slots of an Easy Spin pedal. Each slot points at a workspace-relative
6
- * `.spn` (FV-1 assembly) or `.spndiagram` (block diagram) file. The manifest
7
- * is the unit of "program the whole pedal" — tooling resolves each slot to a
8
- * compiled binary at programming time.
6
+ * `.spn` (FV-1 assembly) or `.spndiagram` (block diagram) file, and may
7
+ * optionally carry presentation metadata (display name, description, pot
8
+ * labels) that override what would otherwise be derived from the source
9
+ * file or its sibling `.json`.
9
10
  *
10
11
  * Slot indices in the manifest are 1-based (slot 1..8) for human readability.
11
12
  * The runtime API uses 0-based indices via `bankSlotIndex0()`.
12
13
  *
13
14
  * Round-trip:
14
15
  * parseSpnBankJson(serializeSpnBankJson(b)) === b // structurally equal
16
+ *
17
+ * Format versions:
18
+ * v1 — { name?, slots: [{ slot, path }] }
19
+ * v2 — adds top-level metadata (version, description, author, license)
20
+ * and per-slot metadata (name, description, controls). v2 files
21
+ * carry `"version": "2.0"`. Parsers tolerate v1 files (no version
22
+ * field) and read just the basic fields, leaving extras at default.
15
23
  */
16
24
  import { PROGRAM_SLOT_COUNT } from '../pedal/constants.js';
25
+ /** Current schema version emitted by `serializeSpnBankJson`. */
26
+ export const SPNBANK_SCHEMA_VERSION = '2.0';
17
27
  /** True if a slot has no assigned program. */
18
28
  export function isSlotEmpty(slot) {
19
29
  return !slot.path;
@@ -21,6 +31,7 @@ export function isSlotEmpty(slot) {
21
31
  /** Build an empty bank. All slots unassigned. */
22
32
  export function createEmptyBank(name) {
23
33
  return {
34
+ version: SPNBANK_SCHEMA_VERSION,
24
35
  name,
25
36
  slots: Array.from({ length: PROGRAM_SLOT_COUNT }, (_, i) => ({
26
37
  slot: i + 1,
@@ -28,6 +39,29 @@ export function createEmptyBank(name) {
28
39
  })),
29
40
  };
30
41
  }
42
+ function readControls(input) {
43
+ if (!Array.isArray(input))
44
+ return undefined;
45
+ const out = [];
46
+ for (const entry of input) {
47
+ if (typeof entry !== 'object' || entry === null)
48
+ continue;
49
+ const e = entry;
50
+ const pot = typeof e.pot === 'number' ? e.pot : NaN;
51
+ if (pot !== 0 && pot !== 1 && pot !== 2)
52
+ continue;
53
+ const name = typeof e.name === 'string' ? e.name : '';
54
+ if (!name)
55
+ continue;
56
+ const control = { pot: pot, name };
57
+ if (typeof e.description === 'string' && e.description)
58
+ control.description = e.description;
59
+ if (typeof e.unit === 'string' && e.unit)
60
+ control.unit = e.unit;
61
+ out.push(control);
62
+ }
63
+ return out.length > 0 ? out : undefined;
64
+ }
31
65
  function normaliseSlots(input) {
32
66
  const empty = () => Array.from({ length: PROGRAM_SLOT_COUNT }, (_, i) => ({ slot: i + 1, path: '' }));
33
67
  if (!Array.isArray(input))
@@ -40,18 +74,27 @@ function normaliseSlots(input) {
40
74
  continue;
41
75
  const e = entry;
42
76
  const slot = typeof e.slot === 'number' ? e.slot : NaN;
43
- const path = typeof e.path === 'string' ? e.path : '';
44
77
  if (!Number.isFinite(slot))
45
78
  continue;
46
79
  if (slot < 1 || slot > PROGRAM_SLOT_COUNT)
47
80
  continue;
48
- bySlot.set(slot, path);
81
+ const partial = {
82
+ path: typeof e.path === 'string' ? e.path : '',
83
+ };
84
+ if (typeof e.name === 'string' && e.name)
85
+ partial.name = e.name;
86
+ if (typeof e.description === 'string' && e.description)
87
+ partial.description = e.description;
88
+ const controls = readControls(e.controls);
89
+ if (controls)
90
+ partial.controls = controls;
91
+ bySlot.set(slot, partial);
49
92
  }
50
93
  const result = empty();
51
94
  for (const slot of result) {
52
- const path = bySlot.get(slot.slot);
53
- if (path !== undefined)
54
- slot.path = path;
95
+ const partial = bySlot.get(slot.slot);
96
+ if (partial)
97
+ Object.assign(slot, partial);
55
98
  }
56
99
  return result;
57
100
  }
@@ -61,6 +104,10 @@ function normaliseSlots(input) {
61
104
  * back to defaults so tooling can render a usable editor over a corrupt or
62
105
  * empty file.
63
106
  *
107
+ * Backwards-compatible: v1 files (no `version` field, slots with just
108
+ * `{ slot, path }`) parse cleanly and round-trip through serialize without
109
+ * losing fields.
110
+ *
64
111
  * @param text Raw file contents.
65
112
  * @param fallbackName Display name to use when the file's `name` field is
66
113
  * missing — typically the file basename without `.spnbank`.
@@ -79,20 +126,57 @@ export function parseSpnBankJson(text, fallbackName) {
79
126
  if (typeof raw !== 'object' || raw === null) {
80
127
  return createEmptyBank(fallbackName);
81
128
  }
129
+ // Build the bank with its keys in the same order the serialiser emits
130
+ // them so parse→serialise round-trips produce identical JSON output.
131
+ // JS preserves insertion order, so we add slots last and use a partial-
132
+ // object pattern to avoid pinning `slots` as the first key.
82
133
  const obj = raw;
134
+ const bank = {};
135
+ if (typeof obj.version === 'string' && obj.version)
136
+ bank.version = obj.version;
83
137
  const name = typeof obj.name === 'string' && obj.name ? obj.name : fallbackName;
84
- const slots = normaliseSlots(obj.slots);
85
- return { name, slots };
138
+ if (name !== undefined)
139
+ bank.name = name;
140
+ if (typeof obj.description === 'string' && obj.description)
141
+ bank.description = obj.description;
142
+ if (typeof obj.author === 'string' && obj.author)
143
+ bank.author = obj.author;
144
+ if (typeof obj.license === 'string' && obj.license)
145
+ bank.license = obj.license;
146
+ bank.slots = normaliseSlots(obj.slots);
147
+ return bank;
86
148
  }
87
149
  /**
88
150
  * Serialise a `.spnbank` file to JSON text. Output is pretty-printed with
89
- * 2-space indentation and a trailing newline.
151
+ * 2-space indentation and a trailing newline. Optional fields are omitted
152
+ * when not set, keeping diffs minimal for simple banks.
90
153
  */
91
154
  export function serializeSpnBankJson(bank) {
92
- const json = {
93
- ...(bank.name ? { name: bank.name } : {}),
94
- slots: bank.slots,
95
- };
155
+ // Stamp newly-written banks with the current schema version so future
156
+ // tooling can detect older files. Files that never had a version stay
157
+ // unversioned only if the caller deliberately clears it.
158
+ const version = bank.version ?? SPNBANK_SCHEMA_VERSION;
159
+ // Build slots without empty optional fields to keep on-disk output clean.
160
+ const slots = bank.slots.map(slot => {
161
+ const out = { slot: slot.slot, path: slot.path };
162
+ if (slot.name)
163
+ out.name = slot.name;
164
+ if (slot.description)
165
+ out.description = slot.description;
166
+ if (slot.controls && slot.controls.length > 0)
167
+ out.controls = slot.controls;
168
+ return out;
169
+ });
170
+ const json = { version };
171
+ if (bank.name)
172
+ json.name = bank.name;
173
+ if (bank.description)
174
+ json.description = bank.description;
175
+ if (bank.author)
176
+ json.author = bank.author;
177
+ if (bank.license)
178
+ json.license = bank.license;
179
+ json.slots = slots;
96
180
  return JSON.stringify(json, null, 2) + '\n';
97
181
  }
98
182
  /** Convenience: 0-based index for a slot. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/spnbank/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/spnbank/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@audiofab-io/fv1-core",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "FV-1 DSP toolchain: assembler, simulator, Intel HEX parser, and block-diagram compiler",
5
5
  "type": "module",
6
6
  "sideEffects": false,