@audiofab-io/fv1-core 0.2.3 → 0.4.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.
Files changed (130) hide show
  1. package/blocks/ATL_DEVELOPER_REFERENCE.md +156 -0
  2. package/blocks/control/constant.atl +36 -0
  3. package/blocks/control/entropy_lfo.atl +74 -0
  4. package/blocks/control/envelope.atl +121 -0
  5. package/blocks/control/invert.atl +33 -0
  6. package/blocks/control/pot.atl +150 -0
  7. package/blocks/control/power.atl +77 -0
  8. package/blocks/control/ramp_lfo.atl +122 -0
  9. package/blocks/control/scale_offset.atl +84 -0
  10. package/blocks/control/sincos_lfo.atl +126 -0
  11. package/blocks/control/smoother.atl +48 -0
  12. package/blocks/control/tremolizer.atl +55 -0
  13. package/blocks/effects/delay/micro_stutter.atl +77 -0
  14. package/blocks/effects/delay/mn3011.atl +281 -0
  15. package/blocks/effects/delay/simple_delay.atl +96 -0
  16. package/blocks/effects/delay/triple_tap_delay.atl +176 -0
  17. package/blocks/effects/lo-fi/bit_mangler.atl +74 -0
  18. package/blocks/effects/lo-fi/chiptune.atl +311 -0
  19. package/blocks/effects/lo-fi/tape_degrade.atl +181 -0
  20. package/blocks/effects/modulation/chorus.atl +141 -0
  21. package/blocks/effects/modulation/chorus_4voice.atl +188 -0
  22. package/blocks/effects/modulation/flanger.atl +184 -0
  23. package/blocks/effects/modulation/guitar_synth.atl +350 -0
  24. package/blocks/effects/modulation/harmonic_trem.atl +129 -0
  25. package/blocks/effects/modulation/organ_synth.atl +326 -0
  26. package/blocks/effects/modulation/phaser.atl +300 -0
  27. package/blocks/effects/pitch/octave_up_down.atl +80 -0
  28. package/blocks/effects/pitch/pitch_offset.atl +149 -0
  29. package/blocks/effects/pitch/pitch_offset_dual.atl +197 -0
  30. package/blocks/effects/pitch/pitch_shift.atl +115 -0
  31. package/blocks/effects/pitch/sub_octave.atl +100 -0
  32. package/blocks/effects/reverb/ducking_reverb.atl +145 -0
  33. package/blocks/effects/reverb/min_reverb.atl +132 -0
  34. package/blocks/effects/reverb/plate_reverb.atl +344 -0
  35. package/blocks/effects/reverb/room_reverb.atl +293 -0
  36. package/blocks/effects/reverb/smear.atl +90 -0
  37. package/blocks/effects/reverb/spring_reverb.atl +353 -0
  38. package/blocks/filter/1p_high_pass.atl +63 -0
  39. package/blocks/filter/1p_low_pass.atl +59 -0
  40. package/blocks/filter/auto_wah.atl +207 -0
  41. package/blocks/filter/bbd_loss.atl +79 -0
  42. package/blocks/filter/shelving_high_pass.atl +76 -0
  43. package/blocks/filter/shelving_low_pass.atl +76 -0
  44. package/blocks/filter/svf_2p.atl +116 -0
  45. package/blocks/gain_mix/crossfade.atl +93 -0
  46. package/blocks/gain_mix/crossfade2.atl +86 -0
  47. package/blocks/gain_mix/crossfade3.atl +71 -0
  48. package/blocks/gain_mix/gainboost.atl +54 -0
  49. package/blocks/gain_mix/mixer2.atl +76 -0
  50. package/blocks/gain_mix/mixer3.atl +109 -0
  51. package/blocks/gain_mix/mixer4.atl +152 -0
  52. package/blocks/gain_mix/volume.atl +51 -0
  53. package/blocks/io/adc.atl +53 -0
  54. package/blocks/io/dac.atl +61 -0
  55. package/blocks/other/stickynote.atl +24 -0
  56. package/blocks/other/tone_gen_adjustable.atl +137 -0
  57. package/blocks/other/tone_gen_fixed.atl +109 -0
  58. package/dist/blockDiagram/blocks/BlockDirectoryLoader.d.ts +13 -0
  59. package/dist/blockDiagram/blocks/BlockDirectoryLoader.d.ts.map +1 -0
  60. package/dist/blockDiagram/blocks/BlockDirectoryLoader.js +44 -0
  61. package/dist/blockDiagram/blocks/BlockDirectoryLoader.js.map +1 -0
  62. package/dist/blockDiagram/blocks/BlockRegistry.d.ts +48 -0
  63. package/dist/blockDiagram/blocks/BlockRegistry.d.ts.map +1 -0
  64. package/dist/blockDiagram/blocks/BlockRegistry.js +109 -0
  65. package/dist/blockDiagram/blocks/BlockRegistry.js.map +1 -0
  66. package/dist/blockDiagram/blocks/TemplateBlock.d.ts +20 -0
  67. package/dist/blockDiagram/blocks/TemplateBlock.d.ts.map +1 -0
  68. package/dist/blockDiagram/blocks/TemplateBlock.js +82 -0
  69. package/dist/blockDiagram/blocks/TemplateBlock.js.map +1 -0
  70. package/dist/blockDiagram/blocks/base/BaseBlock.d.ts +248 -0
  71. package/dist/blockDiagram/blocks/base/BaseBlock.d.ts.map +1 -0
  72. package/dist/blockDiagram/blocks/base/BaseBlock.js +402 -0
  73. package/dist/blockDiagram/blocks/base/BaseBlock.js.map +1 -0
  74. package/dist/blockDiagram/builtinBlocks.d.ts +9 -0
  75. package/dist/blockDiagram/builtinBlocks.d.ts.map +1 -0
  76. package/dist/blockDiagram/builtinBlocks.js +4912 -0
  77. package/dist/blockDiagram/builtinBlocks.js.map +1 -0
  78. package/dist/blockDiagram/compiler/BlockTemplate.d.ts +37 -0
  79. package/dist/blockDiagram/compiler/BlockTemplate.d.ts.map +1 -0
  80. package/dist/blockDiagram/compiler/BlockTemplate.js +860 -0
  81. package/dist/blockDiagram/compiler/BlockTemplate.js.map +1 -0
  82. package/dist/blockDiagram/compiler/CodeOptimizer.d.ts +75 -0
  83. package/dist/blockDiagram/compiler/CodeOptimizer.d.ts.map +1 -0
  84. package/dist/blockDiagram/compiler/CodeOptimizer.js +443 -0
  85. package/dist/blockDiagram/compiler/CodeOptimizer.js.map +1 -0
  86. package/dist/blockDiagram/compiler/GraphCompiler.d.ts +63 -0
  87. package/dist/blockDiagram/compiler/GraphCompiler.d.ts.map +1 -0
  88. package/dist/blockDiagram/compiler/GraphCompiler.js +656 -0
  89. package/dist/blockDiagram/compiler/GraphCompiler.js.map +1 -0
  90. package/dist/blockDiagram/compiler/TopologicalSort.d.ts +63 -0
  91. package/dist/blockDiagram/compiler/TopologicalSort.d.ts.map +1 -0
  92. package/dist/blockDiagram/compiler/TopologicalSort.js +268 -0
  93. package/dist/blockDiagram/compiler/TopologicalSort.js.map +1 -0
  94. package/dist/blockDiagram/index.d.ts +30 -0
  95. package/dist/blockDiagram/index.d.ts.map +1 -0
  96. package/dist/blockDiagram/index.js +29 -0
  97. package/dist/blockDiagram/index.js.map +1 -0
  98. package/dist/blockDiagram/types/Block.d.ts +178 -0
  99. package/dist/blockDiagram/types/Block.d.ts.map +1 -0
  100. package/dist/blockDiagram/types/Block.js +5 -0
  101. package/dist/blockDiagram/types/Block.js.map +1 -0
  102. package/dist/blockDiagram/types/CodeGenContext.d.ts +235 -0
  103. package/dist/blockDiagram/types/CodeGenContext.d.ts.map +1 -0
  104. package/dist/blockDiagram/types/CodeGenContext.js +554 -0
  105. package/dist/blockDiagram/types/CodeGenContext.js.map +1 -0
  106. package/dist/blockDiagram/types/Connection.d.ts +17 -0
  107. package/dist/blockDiagram/types/Connection.d.ts.map +1 -0
  108. package/dist/blockDiagram/types/Connection.js +5 -0
  109. package/dist/blockDiagram/types/Connection.js.map +1 -0
  110. package/dist/blockDiagram/types/Graph.d.ts +28 -0
  111. package/dist/blockDiagram/types/Graph.d.ts.map +1 -0
  112. package/dist/blockDiagram/types/Graph.js +24 -0
  113. package/dist/blockDiagram/types/Graph.js.map +1 -0
  114. package/dist/blockDiagram/types/IR.d.ts +79 -0
  115. package/dist/blockDiagram/types/IR.d.ts.map +1 -0
  116. package/dist/blockDiagram/types/IR.js +6 -0
  117. package/dist/blockDiagram/types/IR.js.map +1 -0
  118. package/dist/blockDiagram/utils/SpinCADConverter.d.ts +17 -0
  119. package/dist/blockDiagram/utils/SpinCADConverter.d.ts.map +1 -0
  120. package/dist/blockDiagram/utils/SpinCADConverter.js +307 -0
  121. package/dist/blockDiagram/utils/SpinCADConverter.js.map +1 -0
  122. package/dist/effect/compileEffect.d.ts +51 -0
  123. package/dist/effect/compileEffect.d.ts.map +1 -0
  124. package/dist/effect/compileEffect.js +133 -0
  125. package/dist/effect/compileEffect.js.map +1 -0
  126. package/dist/index.d.ts +2 -0
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +2 -0
  129. package/dist/index.js.map +1 -1
  130. package/package.json +17 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphCompiler.js","sourceRoot":"","sources":["../../../src/blockDiagram/compiler/GraphCompiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Topological sort for block execution order
3
+ * Ensures blocks are processed in dependency order
4
+ */
5
+ import { BlockGraph } from '../types/Graph.js';
6
+ export interface TopologicalSortResult {
7
+ success: boolean;
8
+ order?: string[];
9
+ feedbackConnections?: Set<string>;
10
+ error?: string;
11
+ }
12
+ export declare class TopologicalSort {
13
+ /**
14
+ * Perform topological sort on the block graph using reverse traversal from outputs
15
+ *
16
+ * Algorithm:
17
+ * 1. Identify and exclude feedback connections to break cycles
18
+ * 2. Find all terminal nodes (blocks with no outgoing connections)
19
+ * 3. For each terminal node, traverse backwards through parents
20
+ * 4. Generate code for leaf nodes (no inputs) first, working forward
21
+ * 5. Each block is generated only once
22
+ * 6. Feedback loops are detected by tracking visiting blocks in current path
23
+ */
24
+ sort(graph: BlockGraph): TopologicalSortResult;
25
+ /**
26
+ * Identify feedback connections by detecting which connections create cycles.
27
+ * Uses a heuristic approach: connections that target "feedback" or "fb" ports
28
+ * are candidates, and we verify they're part of a cycle.
29
+ */
30
+ private identifyFeedbackConnections;
31
+ /**
32
+ * Build a map of blockId -> blocks that provide inputs to it (parents)
33
+ * @param graph The block graph
34
+ * @param feedbackConnections Set of connection IDs to exclude (these are feedback paths)
35
+ */
36
+ private buildParentMap;
37
+ /**
38
+ * Build a map of blockId -> blocks that consume its outputs (children)
39
+ * @param graph The block graph
40
+ * @param feedbackConnections Set of connection IDs to exclude (these are feedback paths)
41
+ */
42
+ private buildChildMap;
43
+ /**
44
+ * Build a map of blockId -> blocks it depends on
45
+ * A block depends on all blocks that connect to its inputs
46
+ * @param graph The block graph
47
+ * @param feedbackConnections Set of connection IDs to exclude (these are feedback paths)
48
+ *
49
+ * Feedback connections are EXCLUDED from the dependency map to break cycles.
50
+ * They are handled separately to ensure proper execution order.
51
+ */
52
+ private buildDependencyMap;
53
+ /**
54
+ * Check if the graph has cycles using DFS
55
+ * Used internally for feedback detection
56
+ */
57
+ private hasCyclesInternal;
58
+ /**
59
+ * Detect if graph has cycles
60
+ */
61
+ hasCycles(graph: BlockGraph): boolean;
62
+ }
63
+ //# sourceMappingURL=TopologicalSort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopologicalSort.d.ts","sourceRoot":"","sources":["../../../src/blockDiagram/compiler/TopologicalSort.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAe;IACxB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,qBAAqB;IAgG9C;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAqCnC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA+BtB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA+BrB;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;CAIxC"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Topological sort for block execution order
3
+ * Ensures blocks are processed in dependency order
4
+ */
5
+ export class TopologicalSort {
6
+ /**
7
+ * Perform topological sort on the block graph using reverse traversal from outputs
8
+ *
9
+ * Algorithm:
10
+ * 1. Identify and exclude feedback connections to break cycles
11
+ * 2. Find all terminal nodes (blocks with no outgoing connections)
12
+ * 3. For each terminal node, traverse backwards through parents
13
+ * 4. Generate code for leaf nodes (no inputs) first, working forward
14
+ * 5. Each block is generated only once
15
+ * 6. Feedback loops are detected by tracking visiting blocks in current path
16
+ */
17
+ sort(graph) {
18
+ // Identify potential feedback connections by detecting cycles
19
+ const feedbackConnections = this.identifyFeedbackConnections(graph);
20
+ // Build parent map INCLUDING feedback connections (we need to visit all parents)
21
+ const allParents = this.buildParentMap(graph, new Set());
22
+ // Build child map EXCLUDING feedback connections (to find true terminal nodes)
23
+ const children = this.buildChildMap(graph, feedbackConnections);
24
+ // Track generated blocks and current path (for feedback detection)
25
+ const generated = new Set();
26
+ const sorted = [];
27
+ /**
28
+ * Recursively visit a block and its parents, generating code in dependency order
29
+ * @param blockId The block to visit
30
+ * @param visiting Blocks currently being visited in this path (for feedback detection)
31
+ */
32
+ const visitReverse = (blockId, visiting) => {
33
+ // Already generated? Skip it
34
+ if (generated.has(blockId)) {
35
+ return;
36
+ }
37
+ // Visiting again in same path? Feedback loop - skip it
38
+ if (visiting.has(blockId)) {
39
+ return;
40
+ }
41
+ // Mark as visiting for this path
42
+ const newVisiting = new Set(visiting);
43
+ newVisiting.add(blockId);
44
+ // First, recursively visit all parents (blocks providing inputs)
45
+ // This includes feedback connections, so we visit the entire feedback path
46
+ const parentBlocks = allParents.get(blockId) || [];
47
+ for (const parentId of parentBlocks) {
48
+ visitReverse(parentId, newVisiting);
49
+ }
50
+ // All parents have been generated, now generate this block
51
+ if (!generated.has(blockId)) {
52
+ generated.add(blockId);
53
+ sorted.push(blockId);
54
+ }
55
+ };
56
+ // Find all terminal nodes (blocks with no children - no outgoing connections)
57
+ // Use children map that excludes feedback, so feedback path blocks aren't terminals
58
+ // BUT: Exclude completely disconnected blocks (no connections at all)
59
+ const terminalNodes = [];
60
+ for (const block of graph.blocks) {
61
+ const blockChildren = children.get(block.id) || [];
62
+ if (blockChildren.length === 0) {
63
+ // Check if this block has ANY connections before treating it as a terminal
64
+ const hasConnections = graph.connections.some(c => c.from.blockId === block.id || c.to.blockId === block.id);
65
+ // Only add to terminals if it has at least some connections
66
+ if (hasConnections) {
67
+ terminalNodes.push(block.id);
68
+ }
69
+ }
70
+ }
71
+ // Process each terminal node, traversing backwards
72
+ for (const terminalId of terminalNodes) {
73
+ visitReverse(terminalId, new Set());
74
+ }
75
+ // Handle any orphaned blocks (not connected to terminal nodes)
76
+ // BUT: Skip completely disconnected blocks (no connections at all)
77
+ for (const block of graph.blocks) {
78
+ if (!generated.has(block.id)) {
79
+ // Check if this block has ANY connections (input or output)
80
+ const hasConnections = graph.connections.some(c => c.from.blockId === block.id || c.to.blockId === block.id);
81
+ // Only process orphaned blocks that have at least some connections
82
+ if (hasConnections) {
83
+ visitReverse(block.id, new Set());
84
+ }
85
+ // Completely disconnected blocks are silently skipped
86
+ }
87
+ }
88
+ return {
89
+ success: true,
90
+ order: sorted,
91
+ feedbackConnections
92
+ };
93
+ }
94
+ /**
95
+ * Identify feedback connections by detecting which connections create cycles.
96
+ * Uses a heuristic approach: connections that target "feedback" or "fb" ports
97
+ * are candidates, and we verify they're part of a cycle.
98
+ */
99
+ identifyFeedbackConnections(graph) {
100
+ const feedbackConnections = new Set();
101
+ // First pass: Mark connections to ports with "feedback" in the name as candidates
102
+ const feedbackCandidates = new Set();
103
+ for (const conn of graph.connections) {
104
+ const portId = conn.to.portId.toLowerCase();
105
+ if (portId.includes('feedback') || portId.includes('fb') || portId === 'fb_in') {
106
+ feedbackCandidates.add(conn.id);
107
+ }
108
+ }
109
+ // Second pass: Test each candidate - if removing it breaks the cycle, it's a feedback connection
110
+ for (const candidateId of feedbackCandidates) {
111
+ const testGraph = {
112
+ ...graph,
113
+ connections: graph.connections.filter(c => c.id !== candidateId)
114
+ };
115
+ if (!this.hasCyclesInternal(testGraph)) {
116
+ // Removing this connection breaks a cycle, so it's a feedback connection
117
+ feedbackConnections.add(candidateId);
118
+ }
119
+ }
120
+ // If we still have cycles, try removing self-loops
121
+ if (this.hasCyclesInternal(graph)) {
122
+ for (const conn of graph.connections) {
123
+ if (conn.from.blockId === conn.to.blockId) {
124
+ feedbackConnections.add(conn.id);
125
+ }
126
+ }
127
+ }
128
+ return feedbackConnections;
129
+ }
130
+ /**
131
+ * Build a map of blockId -> blocks that provide inputs to it (parents)
132
+ * @param graph The block graph
133
+ * @param feedbackConnections Set of connection IDs to exclude (these are feedback paths)
134
+ */
135
+ buildParentMap(graph, feedbackConnections) {
136
+ const map = new Map();
137
+ // Initialize map for all blocks
138
+ for (const block of graph.blocks) {
139
+ map.set(block.id, []);
140
+ }
141
+ // Add parent relationships based on connections
142
+ for (const connection of graph.connections) {
143
+ // Ignore self-loops
144
+ if (connection.from.blockId === connection.to.blockId) {
145
+ continue;
146
+ }
147
+ // Skip feedback connections
148
+ if (feedbackConnections.has(connection.id)) {
149
+ continue;
150
+ }
151
+ // connection.from is a parent of connection.to
152
+ const parentList = map.get(connection.to.blockId) || [];
153
+ if (!parentList.includes(connection.from.blockId)) {
154
+ parentList.push(connection.from.blockId);
155
+ }
156
+ map.set(connection.to.blockId, parentList);
157
+ }
158
+ return map;
159
+ }
160
+ /**
161
+ * Build a map of blockId -> blocks that consume its outputs (children)
162
+ * @param graph The block graph
163
+ * @param feedbackConnections Set of connection IDs to exclude (these are feedback paths)
164
+ */
165
+ buildChildMap(graph, feedbackConnections) {
166
+ const map = new Map();
167
+ // Initialize map for all blocks
168
+ for (const block of graph.blocks) {
169
+ map.set(block.id, []);
170
+ }
171
+ // Add child relationships based on connections
172
+ for (const connection of graph.connections) {
173
+ // Ignore self-loops
174
+ if (connection.from.blockId === connection.to.blockId) {
175
+ continue;
176
+ }
177
+ // Skip feedback connections
178
+ if (feedbackConnections.has(connection.id)) {
179
+ continue;
180
+ }
181
+ // connection.to is a child of connection.from
182
+ const childList = map.get(connection.from.blockId) || [];
183
+ if (!childList.includes(connection.to.blockId)) {
184
+ childList.push(connection.to.blockId);
185
+ }
186
+ map.set(connection.from.blockId, childList);
187
+ }
188
+ return map;
189
+ }
190
+ /**
191
+ * Build a map of blockId -> blocks it depends on
192
+ * A block depends on all blocks that connect to its inputs
193
+ * @param graph The block graph
194
+ * @param feedbackConnections Set of connection IDs to exclude (these are feedback paths)
195
+ *
196
+ * Feedback connections are EXCLUDED from the dependency map to break cycles.
197
+ * They are handled separately to ensure proper execution order.
198
+ */
199
+ buildDependencyMap(graph, feedbackConnections) {
200
+ const map = new Map();
201
+ // Initialize map for all blocks
202
+ for (const block of graph.blocks) {
203
+ map.set(block.id, []);
204
+ }
205
+ // Add dependencies based on connections
206
+ for (const connection of graph.connections) {
207
+ // Ignore self-loops (block connected to itself)
208
+ // These are valid for delay/memory-based blocks
209
+ if (connection.from.blockId === connection.to.blockId) {
210
+ continue;
211
+ }
212
+ // Skip feedback connections - they don't create forward dependencies
213
+ if (feedbackConnections.has(connection.id)) {
214
+ continue;
215
+ }
216
+ // Normal forward connection: destination depends on source
217
+ const deps = map.get(connection.to.blockId) || [];
218
+ if (!deps.includes(connection.from.blockId)) {
219
+ deps.push(connection.from.blockId);
220
+ }
221
+ map.set(connection.to.blockId, deps);
222
+ }
223
+ return map;
224
+ }
225
+ /**
226
+ * Check if the graph has cycles using DFS
227
+ * Used internally for feedback detection
228
+ */
229
+ hasCyclesInternal(graph) {
230
+ const visited = new Set();
231
+ const visiting = new Set();
232
+ const dependencies = this.buildDependencyMap(graph, new Set()); // No feedback exclusions
233
+ const visit = (blockId) => {
234
+ if (visited.has(blockId)) {
235
+ return false; // No cycle on this path
236
+ }
237
+ if (visiting.has(blockId)) {
238
+ return true; // Cycle detected!
239
+ }
240
+ visiting.add(blockId);
241
+ const deps = dependencies.get(blockId) || [];
242
+ for (const depId of deps) {
243
+ if (visit(depId)) {
244
+ return true;
245
+ }
246
+ }
247
+ visiting.delete(blockId);
248
+ visited.add(blockId);
249
+ return false;
250
+ };
251
+ for (const block of graph.blocks) {
252
+ if (!visited.has(block.id)) {
253
+ if (visit(block.id)) {
254
+ return true;
255
+ }
256
+ }
257
+ }
258
+ return false;
259
+ }
260
+ /**
261
+ * Detect if graph has cycles
262
+ */
263
+ hasCycles(graph) {
264
+ const result = this.sort(graph);
265
+ return !result.success;
266
+ }
267
+ }
268
+ //# sourceMappingURL=TopologicalSort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopologicalSort.js","sourceRoot":"","sources":["../../../src/blockDiagram/compiler/TopologicalSort.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Public entry point for the block-diagram compiler and registry.
3
+ *
4
+ * Typical browser usage:
5
+ * import { BlockRegistry, BUILTIN_BLOCKS, GraphCompiler } from '@audiofab-io/fv1-core/blockDiagram';
6
+ * const registry = new BlockRegistry();
7
+ * registry.loadManifest(BUILTIN_BLOCKS);
8
+ * const compiler = new GraphCompiler(registry);
9
+ * const result = compiler.compile(graph, { regCount: 32, progSize: 128, delaySize: 32768 });
10
+ *
11
+ * Node consumers can additionally pull in `loadBlocksFromDirectory` to
12
+ * extend the registry with user-supplied ATL directories.
13
+ */
14
+ export { BlockRegistry, blockRegistry } from './blocks/BlockRegistry.js';
15
+ export { TemplateBlock } from './blocks/TemplateBlock.js';
16
+ export { BaseBlock } from './blocks/base/BaseBlock.js';
17
+ export { BUILTIN_BLOCKS } from './builtinBlocks.js';
18
+ export { GraphCompiler } from './compiler/GraphCompiler.js';
19
+ export type { CompilationResult, CompilationStatistics } from './compiler/GraphCompiler.js';
20
+ export { BlockTemplate } from './compiler/BlockTemplate.js';
21
+ export { CodeOptimizer, OptimizationLevel } from './compiler/CodeOptimizer.js';
22
+ export { TopologicalSort } from './compiler/TopologicalSort.js';
23
+ export type { IBlockDefinition, BlockMetadata, Block, CodeGenContext, } from './types/Block.js';
24
+ export type { BlockGraph } from './types/Graph.js';
25
+ export { createEmptyGraph } from './types/Graph.js';
26
+ export type { Connection } from './types/Connection.js';
27
+ export type { BlockTemplateDefinition, IRNode, IRSection } from './types/IR.js';
28
+ export { CodeGenerationContext } from './types/CodeGenContext.js';
29
+ export { SpinCADConverter } from './utils/SpinCADConverter.js';
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blockDiagram/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,YAAY,EACR,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,cAAc,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Public entry point for the block-diagram compiler and registry.
3
+ *
4
+ * Typical browser usage:
5
+ * import { BlockRegistry, BUILTIN_BLOCKS, GraphCompiler } from '@audiofab-io/fv1-core/blockDiagram';
6
+ * const registry = new BlockRegistry();
7
+ * registry.loadManifest(BUILTIN_BLOCKS);
8
+ * const compiler = new GraphCompiler(registry);
9
+ * const result = compiler.compile(graph, { regCount: 32, progSize: 128, delaySize: 32768 });
10
+ *
11
+ * Node consumers can additionally pull in `loadBlocksFromDirectory` to
12
+ * extend the registry with user-supplied ATL directories.
13
+ */
14
+ // Registry
15
+ export { BlockRegistry, blockRegistry } from './blocks/BlockRegistry.js';
16
+ export { TemplateBlock } from './blocks/TemplateBlock.js';
17
+ export { BaseBlock } from './blocks/base/BaseBlock.js';
18
+ // Built-in block manifest (generated from blocks/**/*.atl at build time)
19
+ export { BUILTIN_BLOCKS } from './builtinBlocks.js';
20
+ // Compiler
21
+ export { GraphCompiler } from './compiler/GraphCompiler.js';
22
+ export { BlockTemplate } from './compiler/BlockTemplate.js';
23
+ export { CodeOptimizer, OptimizationLevel } from './compiler/CodeOptimizer.js';
24
+ export { TopologicalSort } from './compiler/TopologicalSort.js';
25
+ export { createEmptyGraph } from './types/Graph.js';
26
+ export { CodeGenerationContext } from './types/CodeGenContext.js';
27
+ // Utilities
28
+ export { SpinCADConverter } from './utils/SpinCADConverter.js';
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blockDiagram/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,yEAAyE;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAUhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Core type definitions for FV-1 block diagram programming
3
+ */
4
+ export interface BlockPosition {
5
+ x: number;
6
+ y: number;
7
+ }
8
+ export interface BlockPort {
9
+ id: string;
10
+ name: string;
11
+ type: 'audio' | 'control';
12
+ required?: boolean;
13
+ parameter?: string;
14
+ }
15
+ export interface BlockParameter {
16
+ id: string;
17
+ name: string;
18
+ type: 'number' | 'select' | 'boolean' | 'string';
19
+ default: any;
20
+ min?: number;
21
+ max?: number;
22
+ step?: number;
23
+ options?: Array<{
24
+ label: string;
25
+ value: any;
26
+ }>;
27
+ description?: string;
28
+ multiline?: boolean;
29
+ displayMin?: number;
30
+ displayMax?: number;
31
+ displayStep?: number;
32
+ displayDecimals?: number;
33
+ displayUnit?: string;
34
+ toDisplay?: (codeValue: number) => number;
35
+ fromDisplay?: (displayValue: number) => number;
36
+ conversion?: string;
37
+ visibleIf?: string;
38
+ }
39
+ export interface BlockMetadata {
40
+ type: string;
41
+ category: string;
42
+ subcategory?: string;
43
+ name: string;
44
+ description: string;
45
+ color: string;
46
+ icon?: string;
47
+ width: number;
48
+ height: number;
49
+ inputs: BlockPort[];
50
+ outputs: BlockPort[];
51
+ parameters: BlockParameter[];
52
+ hasCustomLabel?: boolean;
53
+ }
54
+ export interface Block {
55
+ id: string;
56
+ type: string;
57
+ position: BlockPosition;
58
+ parameters: Record<string, any>;
59
+ }
60
+ export interface ValidationResult {
61
+ valid: boolean;
62
+ error?: string;
63
+ warnings?: string[];
64
+ }
65
+ export interface CodeGenContext {
66
+ isOutputConnected(blockId: string, portId: string): boolean;
67
+ getInputRegister(blockId: string, portId: string): string | null;
68
+ isInputZeroBypassed(blockId: string, portId: string): boolean;
69
+ getInputZeroValue(blockId: string, portId: string): number;
70
+ registerHeaderEqu(name: string): void;
71
+ hasHeaderEqu(name: string): boolean;
72
+ allocateRegister(blockId: string, portId: string): string;
73
+ getScratchRegister(): string;
74
+ resetScratchRegisters(): void;
75
+ pushHeaderComment(...lines: string[]): void;
76
+ pushInitCode(...lines: string[]): void;
77
+ pushInputCode(...lines: string[]): void;
78
+ pushMainCode(...lines: string[]): void;
79
+ pushOutputCode(...lines: string[]): void;
80
+ allocateMemory(blockId: string, size: number): {
81
+ name: string;
82
+ address: number;
83
+ size: number;
84
+ };
85
+ registerEqu(name: string, value: string | number): string;
86
+ getStandardConstant(value: number): string;
87
+ hasEqu(name: string): boolean;
88
+ getEquDeclarations(): Array<{
89
+ name: string;
90
+ value: string;
91
+ }>;
92
+ getRegisterAliases(): Array<{
93
+ alias: string;
94
+ register: string;
95
+ }>;
96
+ getParameter(blockId: string, parameterId: string): any;
97
+ getBlock(blockId: string): any;
98
+ getCurrentBlock(): string | null;
99
+ pushIR(node: any): void;
100
+ getIR(): any[];
101
+ getShortId(blockId: string): string;
102
+ getVariable(name: string): string | undefined;
103
+ setVariable(name: string, value: string): void;
104
+ getUsedRegisterCount(): number;
105
+ getUsedMemorySize(): number;
106
+ getMemoryBlocks(): Array<{
107
+ name: string;
108
+ address: number;
109
+ size: number;
110
+ }>;
111
+ addError(message: string): void;
112
+ getErrors(): string[];
113
+ }
114
+ export interface ValidationContext {
115
+ hasInput(blockId: string, portId: string): boolean;
116
+ getInputs(blockId: string): string[];
117
+ getBlock(blockId: string): Block | undefined;
118
+ }
119
+ /**
120
+ * Base interface that all block definitions must implement
121
+ */
122
+ export interface IBlockDefinition {
123
+ readonly type: string;
124
+ readonly category: string;
125
+ readonly subcategory?: string;
126
+ readonly name: string;
127
+ readonly description: string;
128
+ readonly color: string;
129
+ readonly icon?: string;
130
+ readonly width: number;
131
+ readonly height: number;
132
+ readonly inputs: BlockPort[];
133
+ readonly outputs: BlockPort[];
134
+ readonly parameters: BlockParameter[];
135
+ /**
136
+ * Generate FV-1 assembly code for this block
137
+ * Blocks should push code to appropriate sections using ctx.pushInitCode(),
138
+ * ctx.pushInputCode(), ctx.pushMainCode(), or ctx.pushOutputCode()
139
+ * @param ctx Code generation context providing resource allocation and code sections
140
+ */
141
+ generateCode(ctx: CodeGenContext): void;
142
+ /**
143
+ * Validate this block's configuration and connections
144
+ * @param ctx Validation context
145
+ * @returns Validation result
146
+ */
147
+ validate(ctx: ValidationContext): ValidationResult;
148
+ /**
149
+ * Get metadata about this block type
150
+ */
151
+ getMetadata(): BlockMetadata;
152
+ /**
153
+ * Convert a code value to display value for a specific parameter
154
+ * @param parameterId The parameter ID
155
+ * @param codeValue The code value to convert
156
+ * @returns The display value
157
+ */
158
+ getDisplayValue(parameterId: string, codeValue: number): number;
159
+ /**
160
+ * Convert a display value to code value for a specific parameter
161
+ * @param parameterId The parameter ID
162
+ * @param displayValue The display value to convert
163
+ * @returns The code value
164
+ */
165
+ getCodeValue(parameterId: string, displayValue: number): number;
166
+ /**
167
+ * Get custom label text for this block instance (optional)
168
+ * @param parameters The current parameter values
169
+ * @returns Custom label text or null if no custom label
170
+ */
171
+ getCustomLabel?(parameters: Record<string, any>): string | null;
172
+ /**
173
+ * Get the raw ATL template string for this block instance (optional)
174
+ * @returns The raw ATL string or undefined
175
+ */
176
+ getRawTemplate?(): string | undefined;
177
+ }
178
+ //# sourceMappingURL=Block.d.ts.map