@beatbax/engine 0.1.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 (174) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/audio/bufferedRenderer.d.ts +32 -0
  3. package/dist/audio/bufferedRenderer.d.ts.map +1 -0
  4. package/dist/audio/bufferedRenderer.js +309 -0
  5. package/dist/audio/bufferedRenderer.js.map +1 -0
  6. package/dist/audio/pcmRenderer.d.ts +25 -0
  7. package/dist/audio/pcmRenderer.d.ts.map +1 -0
  8. package/dist/audio/pcmRenderer.js +1288 -0
  9. package/dist/audio/pcmRenderer.js.map +1 -0
  10. package/dist/audio/playback.d.ts +57 -0
  11. package/dist/audio/playback.d.ts.map +1 -0
  12. package/dist/audio/playback.js +794 -0
  13. package/dist/audio/playback.js.map +1 -0
  14. package/dist/chips/gameboy/apu.d.ts +9 -0
  15. package/dist/chips/gameboy/apu.d.ts.map +1 -0
  16. package/dist/chips/gameboy/apu.js +27 -0
  17. package/dist/chips/gameboy/apu.js.map +1 -0
  18. package/dist/chips/gameboy/noise.d.ts +6 -0
  19. package/dist/chips/gameboy/noise.d.ts.map +1 -0
  20. package/dist/chips/gameboy/noise.js +155 -0
  21. package/dist/chips/gameboy/noise.js.map +1 -0
  22. package/dist/chips/gameboy/packet.d.ts +3 -0
  23. package/dist/chips/gameboy/packet.d.ts.map +1 -0
  24. package/dist/chips/gameboy/packet.js +3 -0
  25. package/dist/chips/gameboy/packet.js.map +1 -0
  26. package/dist/chips/gameboy/periodTables.d.ts +16 -0
  27. package/dist/chips/gameboy/periodTables.d.ts.map +1 -0
  28. package/dist/chips/gameboy/periodTables.js +29 -0
  29. package/dist/chips/gameboy/periodTables.js.map +1 -0
  30. package/dist/chips/gameboy/pulse.d.ts +12 -0
  31. package/dist/chips/gameboy/pulse.d.ts.map +1 -0
  32. package/dist/chips/gameboy/pulse.js +275 -0
  33. package/dist/chips/gameboy/pulse.js.map +1 -0
  34. package/dist/chips/gameboy/wave.d.ts +8 -0
  35. package/dist/chips/gameboy/wave.d.ts.map +1 -0
  36. package/dist/chips/gameboy/wave.js +146 -0
  37. package/dist/chips/gameboy/wave.js.map +1 -0
  38. package/dist/effects/index.d.ts +7 -0
  39. package/dist/effects/index.d.ts.map +1 -0
  40. package/dist/effects/index.js +1028 -0
  41. package/dist/effects/index.js.map +1 -0
  42. package/dist/effects/types.d.ts +8 -0
  43. package/dist/effects/types.d.ts.map +1 -0
  44. package/dist/effects/types.js +2 -0
  45. package/dist/effects/types.js.map +1 -0
  46. package/dist/expand/refExpander.d.ts +14 -0
  47. package/dist/expand/refExpander.d.ts.map +1 -0
  48. package/dist/expand/refExpander.js +130 -0
  49. package/dist/expand/refExpander.js.map +1 -0
  50. package/dist/export/index.d.ts +5 -0
  51. package/dist/export/index.d.ts.map +1 -0
  52. package/dist/export/index.js +5 -0
  53. package/dist/export/index.js.map +1 -0
  54. package/dist/export/jsonExport.d.ts +9 -0
  55. package/dist/export/jsonExport.d.ts.map +1 -0
  56. package/dist/export/jsonExport.js +184 -0
  57. package/dist/export/jsonExport.js.map +1 -0
  58. package/dist/export/midiExport.d.ts +9 -0
  59. package/dist/export/midiExport.d.ts.map +1 -0
  60. package/dist/export/midiExport.js +390 -0
  61. package/dist/export/midiExport.js.map +1 -0
  62. package/dist/export/ugeWriter.d.ts +33 -0
  63. package/dist/export/ugeWriter.d.ts.map +1 -0
  64. package/dist/export/ugeWriter.js +1997 -0
  65. package/dist/export/ugeWriter.js.map +1 -0
  66. package/dist/export/wavWriter.d.ts +24 -0
  67. package/dist/export/wavWriter.d.ts.map +1 -0
  68. package/dist/export/wavWriter.js +126 -0
  69. package/dist/export/wavWriter.js.map +1 -0
  70. package/dist/import/index.d.ts +5 -0
  71. package/dist/import/index.d.ts.map +1 -0
  72. package/dist/import/index.js +8 -0
  73. package/dist/import/index.js.map +1 -0
  74. package/dist/import/remoteCache.d.ts +60 -0
  75. package/dist/import/remoteCache.d.ts.map +1 -0
  76. package/dist/import/remoteCache.js +194 -0
  77. package/dist/import/remoteCache.js.map +1 -0
  78. package/dist/import/uge/uge.reader.d.ts +27 -0
  79. package/dist/import/uge/uge.reader.d.ts.map +1 -0
  80. package/dist/import/uge/uge.reader.js +545 -0
  81. package/dist/import/uge/uge.reader.js.map +1 -0
  82. package/dist/import/urlUtils.d.ts +50 -0
  83. package/dist/import/urlUtils.d.ts.map +1 -0
  84. package/dist/import/urlUtils.js +87 -0
  85. package/dist/import/urlUtils.js.map +1 -0
  86. package/dist/index.d.ts +18 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +318 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/instruments/instrumentState.d.ts +15 -0
  91. package/dist/instruments/instrumentState.d.ts.map +1 -0
  92. package/dist/instruments/instrumentState.js +24 -0
  93. package/dist/instruments/instrumentState.js.map +1 -0
  94. package/dist/parser/ast.d.ts +22 -0
  95. package/dist/parser/ast.d.ts.map +1 -0
  96. package/dist/parser/ast.js +5 -0
  97. package/dist/parser/ast.js.map +1 -0
  98. package/dist/parser/index.d.ts +14 -0
  99. package/dist/parser/index.d.ts.map +1 -0
  100. package/dist/parser/index.js +10 -0
  101. package/dist/parser/index.js.map +1 -0
  102. package/dist/parser/peggy/generated/parser.d.ts +8 -0
  103. package/dist/parser/peggy/generated/parser.d.ts.map +1 -0
  104. package/dist/parser/peggy/generated/parser.js +6269 -0
  105. package/dist/parser/peggy/generated/parser.js.map +1 -0
  106. package/dist/parser/peggy/index.d.ts +3 -0
  107. package/dist/parser/peggy/index.d.ts.map +1 -0
  108. package/dist/parser/peggy/index.js +555 -0
  109. package/dist/parser/peggy/index.js.map +1 -0
  110. package/dist/parser/structured.d.ts +16 -0
  111. package/dist/parser/structured.d.ts.map +1 -0
  112. package/dist/parser/structured.js +232 -0
  113. package/dist/parser/structured.js.map +1 -0
  114. package/dist/parser/tokenizer.d.ts +12 -0
  115. package/dist/parser/tokenizer.d.ts.map +1 -0
  116. package/dist/parser/tokenizer.js +14 -0
  117. package/dist/parser/tokenizer.js.map +1 -0
  118. package/dist/patterns/expand.d.ts +32 -0
  119. package/dist/patterns/expand.d.ts.map +1 -0
  120. package/dist/patterns/expand.js +184 -0
  121. package/dist/patterns/expand.js.map +1 -0
  122. package/dist/patterns/index.d.ts +2 -0
  123. package/dist/patterns/index.d.ts.map +1 -0
  124. package/dist/patterns/index.js +2 -0
  125. package/dist/patterns/index.js.map +1 -0
  126. package/dist/scheduler/index.d.ts +6 -0
  127. package/dist/scheduler/index.d.ts.map +1 -0
  128. package/dist/scheduler/index.js +9 -0
  129. package/dist/scheduler/index.js.map +1 -0
  130. package/dist/scheduler/tickScheduler.d.ts +27 -0
  131. package/dist/scheduler/tickScheduler.d.ts.map +1 -0
  132. package/dist/scheduler/tickScheduler.js +74 -0
  133. package/dist/scheduler/tickScheduler.js.map +1 -0
  134. package/dist/sequences/expand.d.ts +14 -0
  135. package/dist/sequences/expand.d.ts.map +1 -0
  136. package/dist/sequences/expand.js +137 -0
  137. package/dist/sequences/expand.js.map +1 -0
  138. package/dist/song/importResolver.browser.d.ts +29 -0
  139. package/dist/song/importResolver.browser.d.ts.map +1 -0
  140. package/dist/song/importResolver.browser.js +168 -0
  141. package/dist/song/importResolver.browser.js.map +1 -0
  142. package/dist/song/importResolver.d.ts +40 -0
  143. package/dist/song/importResolver.d.ts.map +1 -0
  144. package/dist/song/importResolver.js +445 -0
  145. package/dist/song/importResolver.js.map +1 -0
  146. package/dist/song/index.browser.d.ts +9 -0
  147. package/dist/song/index.browser.d.ts.map +1 -0
  148. package/dist/song/index.browser.js +7 -0
  149. package/dist/song/index.browser.js.map +1 -0
  150. package/dist/song/index.d.ts +8 -0
  151. package/dist/song/index.d.ts.map +1 -0
  152. package/dist/song/index.js +6 -0
  153. package/dist/song/index.js.map +1 -0
  154. package/dist/song/resolver.browser.d.ts +50 -0
  155. package/dist/song/resolver.browser.d.ts.map +1 -0
  156. package/dist/song/resolver.browser.js +536 -0
  157. package/dist/song/resolver.browser.js.map +1 -0
  158. package/dist/song/resolver.d.ts +20 -0
  159. package/dist/song/resolver.d.ts.map +1 -0
  160. package/dist/song/resolver.js +540 -0
  161. package/dist/song/resolver.js.map +1 -0
  162. package/dist/song/songModel.d.ts +34 -0
  163. package/dist/song/songModel.d.ts.map +1 -0
  164. package/dist/song/songModel.js +2 -0
  165. package/dist/song/songModel.js.map +1 -0
  166. package/dist/tests/refExpander.test.d.ts +2 -0
  167. package/dist/tests/refExpander.test.d.ts.map +1 -0
  168. package/dist/tests/refExpander.test.js +37 -0
  169. package/dist/tests/refExpander.test.js.map +1 -0
  170. package/dist/util/diag.d.ts +16 -0
  171. package/dist/util/diag.d.ts.map +1 -0
  172. package/dist/util/diag.js +29 -0
  173. package/dist/util/diag.js.map +1 -0
  174. package/package.json +84 -0
@@ -0,0 +1,555 @@
1
+ import { parse as peggyParse } from './generated/parser.js';
2
+ import { expandPattern, transposePattern } from '../../patterns/expand.js';
3
+ import { materializeSequenceItems, normalizeSeqItems, patternEventsToTokens, } from '../structured.js';
4
+ import { parseSweep } from '../../chips/gameboy/pulse.js';
5
+ import { warn } from '../../util/diag.js';
6
+ import { applyModsToTokens } from '../../expand/refExpander.js';
7
+ // Reset per-parse run; `parseWithPeggy` will reset this at start of each parse.
8
+ let _csvNormalizationWarned = false;
9
+ const isInstNormalizationEnabled = () => {
10
+ try {
11
+ const env = typeof process !== 'undefined' && process?.env ? process.env : undefined;
12
+ const val = env?.BEATBAX_PEGGY_NORMALIZE_INST_PROPS ?? env?.beatbax_peggy_normalize_inst_props;
13
+ if (val === undefined || val === null)
14
+ return false; // default off for parity
15
+ const s = String(val).toLowerCase();
16
+ if (s === '0' || s === 'false' || s === 'no' || s === 'off')
17
+ return false;
18
+ return s === '1' || s === 'true' || s === 'yes' || s === 'on';
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ };
24
+ function parseEnvelopeValue(v, vendorParam) {
25
+ if (v == null)
26
+ return null;
27
+ // Already an object
28
+ if (typeof v === 'object') {
29
+ const level = Number(v.level ?? v.l ?? v[0]);
30
+ const dir = (v.direction || v.dir || v[1] || 'none');
31
+ const period = Number(v.period ?? v.p ?? v[2] ?? 0);
32
+ if (!Number.isNaN(level)) {
33
+ const direction = dir === 'up' ? 'up' : dir === 'down' ? 'down' : 'none';
34
+ const out = { level: Math.max(0, Math.min(15, Math.floor(level))), direction, period: Math.max(0, Math.floor(period)) };
35
+ if (vendorParam)
36
+ out.format = vendorParam;
37
+ return out;
38
+ }
39
+ return null;
40
+ }
41
+ // CSV-ish string like "15,down,7" or just "10,down"
42
+ if (typeof v === 'string') {
43
+ let s = v.trim();
44
+ // detect vendor prefix on value (e.g., 'gb:12,down,1')
45
+ let vendor = vendorParam || null;
46
+ const pref = s.match(/^([a-z]+):/i);
47
+ if (pref) {
48
+ vendor = String(pref[1]).toLowerCase();
49
+ s = s.replace(/^[a-z]+:/i, '').trim();
50
+ }
51
+ if (s.indexOf(',') >= 0) {
52
+ const parts = s.split(',').map(p => p.trim()).filter(Boolean);
53
+ const level = parts[0] ? parseInt(parts[0], 10) : NaN;
54
+ const dir = parts[1] ? parts[1].toLowerCase() : 'none';
55
+ const period = parts[2] ? parseInt(parts[2], 10) : 0;
56
+ if (!Number.isNaN(level)) {
57
+ if (!_csvNormalizationWarned) {
58
+ warn('parser', `Deprecated: env=${s} parsed and normalized to object. Prefer env={"level":${level},"direction":"${dir}","period":${period}}`);
59
+ _csvNormalizationWarned = true;
60
+ }
61
+ const direction = dir === 'up' ? 'up' : dir === 'down' ? 'down' : 'none';
62
+ const out = { level: Math.max(0, Math.min(15, Math.floor(level))), direction, period: Math.max(0, Math.floor(period)) };
63
+ if (vendor)
64
+ out.format = vendor;
65
+ return out;
66
+ }
67
+ }
68
+ }
69
+ return null;
70
+ }
71
+ function parseNoiseValue(v, vendorParam) {
72
+ if (v == null)
73
+ return null;
74
+ if (typeof v === 'object') {
75
+ const out = Object.assign({}, v);
76
+ if (vendorParam)
77
+ out.format = vendorParam;
78
+ return out;
79
+ }
80
+ if (typeof v === 'string') {
81
+ let s = v.trim();
82
+ let vendor = vendorParam || null;
83
+ const pref = s.match(/^([a-z]+):/i);
84
+ if (pref) {
85
+ vendor = String(pref[1]).toLowerCase();
86
+ s = s.replace(/^[a-z]+:/i, '').trim();
87
+ }
88
+ if (s.indexOf(',') >= 0) {
89
+ const parts = s.split(',').map(p => p.trim()).filter(Boolean);
90
+ const clockShift = parts[0] ? parseInt(parts[0], 10) : undefined;
91
+ const widthMode = parts[1] ? Number(parts[1]) : undefined;
92
+ const divisor = parts[2] ? parseInt(parts[2], 10) : undefined;
93
+ if (!_csvNormalizationWarned) {
94
+ warn('parser', `Deprecated: noise=${s} parsed and normalized to object.`);
95
+ _csvNormalizationWarned = true;
96
+ }
97
+ const out = {};
98
+ if (!Number.isNaN(clockShift))
99
+ out.clockShift = clockShift;
100
+ if (widthMode === 7 || widthMode === 15)
101
+ out.widthMode = widthMode;
102
+ if (!Number.isNaN(divisor))
103
+ out.divisor = divisor;
104
+ if (vendor)
105
+ out.format = vendor;
106
+ return out;
107
+ }
108
+ }
109
+ return null;
110
+ }
111
+ const warnProblematicPatternName = (name, loc) => {
112
+ const isSingleLetterNote = /^[A-Ga-g]$/.test(name);
113
+ const isNoteWithOctave = /^[A-Ga-g][#b]?-?\d+$/.test(name);
114
+ if (isSingleLetterNote || isNoteWithOctave) {
115
+ warn('parser', `Pattern name '${name}' may be confused with a note name. Consider using a more descriptive name like '${name}_pattern' or '${name}_pat'.`, { loc });
116
+ }
117
+ };
118
+ const parseInstRhs = (name, rhs, insts) => {
119
+ const rest = rhs.trim();
120
+ const parts = rest.split(/\s+/);
121
+ const props = {};
122
+ const vendors = {};
123
+ for (const p of parts) {
124
+ const eq = p.indexOf('=');
125
+ if (eq >= 0) {
126
+ let k = p.slice(0, eq);
127
+ let v = p.slice(eq + 1);
128
+ // detect vendor prefix on key (e.g. gb:env or gb:width)
129
+ const km = String(k).match(/^([a-z]+):(.*)$/i);
130
+ if (km) {
131
+ vendors[km[2]] = String(km[1]).toLowerCase();
132
+ k = km[2];
133
+ }
134
+ else {
135
+ vendors[k] = null;
136
+ }
137
+ if (v.startsWith('{') && v.endsWith('}')) {
138
+ try {
139
+ props[k] = JSON.parse(v);
140
+ }
141
+ catch (e) {
142
+ props[k] = v;
143
+ }
144
+ }
145
+ else {
146
+ props[k] = v;
147
+ }
148
+ }
149
+ else if (p.trim()) {
150
+ props[p] = 'true';
151
+ }
152
+ }
153
+ // Preserve previous behavior: always parse/normalize `sweep` (backcompat).
154
+ try {
155
+ if (props.sweep) {
156
+ // strip vendor prefix on sweep value if present before parsing
157
+ if (typeof props.sweep === 'string') {
158
+ const m = String(props.sweep).match(/^([a-z]+):/i);
159
+ if (m)
160
+ props.sweep = String(props.sweep).replace(/^[a-z]+:/i, '');
161
+ }
162
+ const parsed = parseSweep(props.sweep);
163
+ if (parsed)
164
+ props.sweep = parsed;
165
+ }
166
+ }
167
+ catch (e) {
168
+ // keep original value
169
+ }
170
+ // Normalize long-form `envelope` => `env` so the AST uses the canonical key.
171
+ try {
172
+ if (props.envelope && props.env === undefined) {
173
+ props.env = props.envelope;
174
+ delete props.envelope;
175
+ }
176
+ }
177
+ catch (e) {
178
+ // keep original
179
+ }
180
+ // Normalize `env` and `noise` when explicit instrument normalization flag is set.
181
+ if (isInstNormalizationEnabled()) {
182
+ try {
183
+ if (props.env) {
184
+ const vendor = vendors['env'] ?? null;
185
+ const parsed = parseEnvelopeValue(props.env, vendor ?? undefined);
186
+ if (parsed)
187
+ props.env = parsed;
188
+ }
189
+ }
190
+ catch (e) {
191
+ // keep original
192
+ }
193
+ try {
194
+ if (props.noise) {
195
+ const vendor = vendors['noise'] ?? null;
196
+ const parsed = parseNoiseValue(props.noise, vendor ?? undefined);
197
+ if (parsed)
198
+ props.noise = parsed;
199
+ }
200
+ }
201
+ catch (e) {
202
+ // keep original
203
+ }
204
+ // Handle `width` vendor prefix on key/value (e.g., gb:width=7 or width=gb:7)
205
+ try {
206
+ if (props.width) {
207
+ const vendor = vendors['width'] ?? null;
208
+ if (typeof props.width === 'string') {
209
+ let s = props.width;
210
+ const m = String(s).match(/^([a-z]+):/i);
211
+ if (m) {
212
+ const vf = String(m[1]).toLowerCase();
213
+ s = s.replace(/^[a-z]+:/i, '').trim();
214
+ const n = parseInt(s, 10);
215
+ if (!Number.isNaN(n))
216
+ props.width = { value: n, format: vf };
217
+ }
218
+ else if (vendor) {
219
+ const n = parseInt(s, 10);
220
+ if (!Number.isNaN(n))
221
+ props.width = { value: n, format: vendor };
222
+ }
223
+ else if (/^\d+$/.test(s)) {
224
+ props.width = parseInt(s, 10);
225
+ }
226
+ }
227
+ else if (typeof props.width === 'object' && vendor) {
228
+ props.width.format = props.width.format || vendor;
229
+ }
230
+ }
231
+ }
232
+ catch (e) {
233
+ // keep original
234
+ }
235
+ }
236
+ insts[name] = props;
237
+ };
238
+ const expandPatternSpec = (nameSpec, rhsRaw, rhsTokens, rhsEvents, loc) => {
239
+ let tokens = rhsTokens ? rhsTokens.slice() : undefined;
240
+ if (!tokens && rhsEvents && rhsEvents.length > 0) {
241
+ tokens = patternEventsToTokens(rhsEvents);
242
+ }
243
+ let rhs = rhsRaw ? rhsRaw.trim() : '';
244
+ if (tokens === undefined) {
245
+ if ((rhs.startsWith('"') && rhs.endsWith('"')) || (rhs.startsWith("'") && rhs.endsWith("'"))) {
246
+ rhs = rhs.slice(1, -1);
247
+ }
248
+ }
249
+ const parts = nameSpec.split(':');
250
+ const baseName = parts[0];
251
+ const mods = parts.slice(1);
252
+ warnProblematicPatternName(baseName, loc);
253
+ try {
254
+ let expanded = tokens ?? expandPattern(rhs);
255
+ if (mods.length > 0) {
256
+ let semitones = 0;
257
+ let octaves = 0;
258
+ for (const mod of mods) {
259
+ const mOct = mod.match(/^oct\(([+-]?\d+)\)$/i);
260
+ if (mOct) {
261
+ octaves += parseInt(mOct[1], 10);
262
+ continue;
263
+ }
264
+ if (/^rev$/i.test(mod)) {
265
+ expanded = expanded.slice().reverse();
266
+ continue;
267
+ }
268
+ if (/^slow(?:\((\d+)\))?$/i.test(mod)) {
269
+ const mSlow = mod.match(/^slow(?:\((\d+)\))?$/i);
270
+ const factor = mSlow && mSlow[1] ? parseInt(mSlow[1], 10) : 2;
271
+ const out = [];
272
+ for (const t of expanded)
273
+ for (let r = 0; r < factor; r++)
274
+ out.push(t);
275
+ expanded = out;
276
+ continue;
277
+ }
278
+ if (/^fast(?:\((\d+)\))?$/i.test(mod)) {
279
+ const mFast = mod.match(/^fast(?:\((\d+)\))?$/i);
280
+ const factor = mFast && mFast[1] ? parseInt(mFast[1], 10) : 2;
281
+ expanded = expanded.filter((_, idx) => idx % factor === 0);
282
+ continue;
283
+ }
284
+ const mTrans = mod.match(/^([+-]?\d+)$/);
285
+ if (mTrans) {
286
+ semitones += parseInt(mTrans[1], 10);
287
+ continue;
288
+ }
289
+ const mSem = mod.match(/^semitone\((-?\d+)\)$/i) || mod.match(/^st\((-?\d+)\)$/i) || mod.match(/^trans\((-?\d+)\)$/i);
290
+ if (mSem) {
291
+ semitones += parseInt(mSem[1], 10);
292
+ continue;
293
+ }
294
+ }
295
+ if (semitones !== 0 || octaves !== 0) {
296
+ expanded = transposePattern(expanded, { semitones, octaves });
297
+ }
298
+ }
299
+ return { name: baseName, tokens: expanded };
300
+ }
301
+ catch (err) {
302
+ return { name: baseName, tokens: [rhs] };
303
+ }
304
+ };
305
+ const parseChannelRhs = (id, rhs, pats, loc) => {
306
+ const tokens = rhs.split(/\s+/);
307
+ const ch = { id, loc };
308
+ for (let i = 0; i < tokens.length; i++) {
309
+ const t = tokens[i];
310
+ if (t === 'inst' && tokens[i + 1]) {
311
+ ch.inst = tokens[i + 1];
312
+ i++;
313
+ }
314
+ else if (t === 'pat' && tokens[i + 1]) {
315
+ // Support both single pattern and multiple patterns after 'pat'
316
+ // e.g., "pat melody" or "pat intro verse chorus"
317
+ const restTokens = tokens.slice(i + 1);
318
+ const rest = restTokens.join(' ');
319
+ let patSpec = (rest.startsWith('"') || rest.startsWith("'")) ? rest.replace(/^['"]|['"]$/g, '') : rest;
320
+ ch.pat = patSpec.trim();
321
+ ch.seqSpecTokens = restTokens;
322
+ break;
323
+ }
324
+ else if (t === 'seq' && tokens[i + 1]) {
325
+ const restTokens = tokens.slice(i + 1);
326
+ const rest = restTokens.join(' ');
327
+ let seqSpec = (rest.startsWith('"') || rest.startsWith("'")) ? rest.replace(/^['"]|['"]$/g, '') : rest;
328
+ ch.pat = seqSpec.trim();
329
+ ch.seqSpecTokens = restTokens;
330
+ break;
331
+ }
332
+ else if (t.startsWith('bpm=')) {
333
+ const v = t.slice(4);
334
+ throw new Error(`channel ${id}: channel-level 'bpm' is not supported (found 'bpm=${v}'). ` +
335
+ `Use a top-level 'bpm' directive or sequence transforms (fast/slow) instead.`);
336
+ }
337
+ else if (t === 'bpm') {
338
+ const v = tokens[i + 1];
339
+ throw new Error(`channel ${id}: channel-level 'bpm' is not supported (found 'bpm ${v}'). ` +
340
+ `Use a top-level 'bpm' directive or sequence transforms (fast/slow) instead.`);
341
+ }
342
+ else if (t.startsWith('speed=')) {
343
+ let v = t.slice(6);
344
+ v = String(v).replace(/x$/i, '');
345
+ const n = parseFloat(v);
346
+ if (!isNaN(n))
347
+ ch.speed = n;
348
+ }
349
+ else if (t === 'speed' && tokens[i + 1]) {
350
+ let v = tokens[i + 1];
351
+ v = String(v).replace(/x$/i, '');
352
+ const n = parseFloat(v);
353
+ if (!isNaN(n)) {
354
+ ch.speed = n;
355
+ i++;
356
+ }
357
+ }
358
+ }
359
+ if (typeof ch.pat === 'string') {
360
+ const parts = ch.pat.split(':');
361
+ const base = parts[0];
362
+ const mods = parts.slice(1);
363
+ if (pats[base]) {
364
+ const res = applyModsToTokens(pats[base].slice(), mods);
365
+ if (res.instOverride)
366
+ ch.inst = res.instOverride;
367
+ ch.pat = res.tokens;
368
+ }
369
+ }
370
+ return ch;
371
+ };
372
+ const parsePlay = (args) => {
373
+ const flagsRaw = args ? args.trim() : '';
374
+ const flags = flagsRaw ? flagsRaw.split(/\s+/) : [];
375
+ return {
376
+ flags,
377
+ auto: flags.includes('auto'),
378
+ repeat: flags.includes('repeat'),
379
+ };
380
+ };
381
+ const parseArrangeDefaults = (raw) => {
382
+ if (!raw)
383
+ return undefined;
384
+ const out = {};
385
+ // support comma-separated or space-separated key=value pairs
386
+ const parts = String(raw).split(/[\,\s]+/).map(p => p.trim()).filter(Boolean);
387
+ for (const p of parts) {
388
+ const eq = p.indexOf('=');
389
+ if (eq >= 0) {
390
+ const k = p.slice(0, eq).trim();
391
+ const v = p.slice(eq + 1).trim();
392
+ if (/^bpm$/i.test(k)) {
393
+ const n = parseInt(v, 10);
394
+ out.bpm = !Number.isNaN(n) ? n : v;
395
+ }
396
+ else if (/^speed$/i.test(k)) {
397
+ const n = parseFloat(String(v).replace(/x$/i, ''));
398
+ out.speed = !Number.isNaN(n) ? n : v;
399
+ }
400
+ else if (/^inst$/i.test(k)) {
401
+ out.inst = v;
402
+ }
403
+ else {
404
+ out[k] = v;
405
+ }
406
+ }
407
+ }
408
+ return out;
409
+ };
410
+ export function parseWithPeggy(source) {
411
+ // reset per-parse-run warning flag
412
+ _csvNormalizationWarned = false;
413
+ const program = peggyParse(source, {});
414
+ const pats = {};
415
+ const insts = {};
416
+ const seqs = {};
417
+ const effects = {};
418
+ const channels = [];
419
+ const arrs = {};
420
+ const metadata = {};
421
+ const imports = [];
422
+ // Structured Peggy events are enabled by default; always provide containers
423
+ // for structured fields so the parser populates them during parse.
424
+ const patternEvents = {};
425
+ const sequenceItems = {};
426
+ let topBpm = undefined;
427
+ let chipName = undefined;
428
+ let topVolume = undefined;
429
+ let playNode = undefined;
430
+ for (const stmt of program.body) {
431
+ switch (stmt.nodeType) {
432
+ case 'SongMetaStmt': {
433
+ const val = stmt.value ?? '';
434
+ if (stmt.key === 'tags') {
435
+ const tags = val.split(/[\,\n\r]+/).map(t => t.trim()).filter(Boolean);
436
+ metadata.tags = (metadata.tags || []).concat(tags);
437
+ }
438
+ else if (stmt.key === 'name') {
439
+ metadata.name = val;
440
+ }
441
+ else if (stmt.key === 'artist') {
442
+ metadata.artist = val;
443
+ }
444
+ else if (stmt.key === 'description') {
445
+ metadata.description = val;
446
+ }
447
+ break;
448
+ }
449
+ case 'BpmStmt': {
450
+ topBpm = stmt.bpm;
451
+ break;
452
+ }
453
+ case 'VolumeStmt': {
454
+ topVolume = Math.max(0, Math.min(1, stmt.volume));
455
+ break;
456
+ }
457
+ case 'ChipStmt': {
458
+ chipName = stmt.chip;
459
+ break;
460
+ }
461
+ case 'ImportStmt': {
462
+ imports.push({ source: stmt.source, loc: stmt.loc });
463
+ break;
464
+ }
465
+ case 'InstStmt': {
466
+ parseInstRhs(stmt.name, stmt.rhs, insts);
467
+ break;
468
+ }
469
+ case 'EffectStmt': {
470
+ // store raw RHS for named effect presets (e.g. `effect wobble = vib:4,6`)
471
+ const rhs = stmt.rhs ? String(stmt.rhs).trim() : '';
472
+ if (rhs)
473
+ effects[stmt.name] = rhs;
474
+ break;
475
+ }
476
+ case 'PatStmt': {
477
+ const { name, tokens } = expandPatternSpec(stmt.name, stmt.rhs, stmt.rhsTokens, stmt.rhsEvents, stmt.loc);
478
+ if (patternEvents && stmt.rhsEvents && stmt.rhsEvents.length > 0) {
479
+ patternEvents[name] = stmt.rhsEvents;
480
+ }
481
+ pats[name] = tokens;
482
+ break;
483
+ }
484
+ case 'SeqStmt': {
485
+ const rhs = stmt.rhs ? stmt.rhs.trim() : '';
486
+ const items = normalizeSeqItems(stmt.rhsItems, rhs, stmt.rhsTokens);
487
+ if (items.length === 0) {
488
+ warn('parser', `sequence '${stmt.name}' has no RHS content (empty). Define patterns after '=' or remove the empty 'seq ${stmt.name} =' line.`);
489
+ seqs[stmt.name] = [];
490
+ break;
491
+ }
492
+ if (sequenceItems) {
493
+ sequenceItems[stmt.name] = items;
494
+ }
495
+ seqs[stmt.name] = materializeSequenceItems(items);
496
+ break;
497
+ }
498
+ case 'ArrangeStmt': {
499
+ // stmt.arrangements is an array of rows; each row is an array of slot names or null
500
+ const parsedDefaults = parseArrangeDefaults(stmt.defaults ?? null);
501
+ arrs[stmt.name] = { name: stmt.name, arrangements: stmt.arrangements || [], defaults: parsedDefaults, loc: stmt.loc };
502
+ break;
503
+ }
504
+ case 'ChannelStmt': {
505
+ channels.push(parseChannelRhs(stmt.channel, stmt.rhs.trim(), pats, stmt.loc));
506
+ break;
507
+ }
508
+ case 'PlayStmt': {
509
+ playNode = parsePlay(stmt.args);
510
+ break;
511
+ }
512
+ default:
513
+ // ignore for now (time/stepsPerBar/ticksPerStep/export)
514
+ break;
515
+ }
516
+ }
517
+ if (chipName === 'gameboy' || !chipName) {
518
+ for (const [name, props] of Object.entries(insts)) {
519
+ const p = props;
520
+ if (p.sweep && p.type !== 'pulse1') {
521
+ warn('parser', `Instrument '${name}' has a 'sweep' property but is not type 'pulse1'. Sweep is only supported on Pulse 1.`);
522
+ }
523
+ if (p.type && String(p.type).toLowerCase() === 'wave') {
524
+ const raw = p.volume !== undefined ? p.volume : (p.vol !== undefined ? p.vol : undefined);
525
+ if (raw === undefined) {
526
+ p.volume = 100;
527
+ }
528
+ else {
529
+ let s = String(raw).trim();
530
+ if (s.endsWith('%'))
531
+ s = s.slice(0, -1).trim();
532
+ const vNum = parseInt(s, 10);
533
+ if (![0, 25, 50, 100].includes(vNum)) {
534
+ throw new Error(`Invalid wave volume ${raw} for instrument "${name}". Must be 0, 25, 50, or 100`);
535
+ }
536
+ p.volume = vNum;
537
+ }
538
+ }
539
+ }
540
+ }
541
+ const includeStructured = true;
542
+ const ast = { pats, insts, seqs, channels, arranges: Object.keys(arrs).length ? arrs : undefined, bpm: topBpm, chip: chipName, volume: topVolume, play: playNode, metadata };
543
+ if (Object.keys(effects).length)
544
+ ast.effects = effects;
545
+ if (imports.length > 0)
546
+ ast.imports = imports;
547
+ if (includeStructured) {
548
+ if (patternEvents)
549
+ ast.patternEvents = patternEvents;
550
+ if (sequenceItems)
551
+ ast.sequenceItems = sequenceItems;
552
+ }
553
+ return ast;
554
+ }
555
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parser/peggy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAe3E,OAAO,EAGL,wBAAwB,EACxB,iBAAiB,EAEjB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,gFAAgF;AAChF,IAAI,uBAAuB,GAAG,KAAK,CAAC;AAEpC,MAAM,0BAA0B,GAAG,GAAY,EAAE;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,WAAW,IAAK,OAAe,EAAE,GAAG,CAAC,CAAC,CAAE,OAAe,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,MAAM,GAAG,GAAG,GAAG,EAAE,kCAAkC,IAAI,GAAG,EAAE,kCAAkC,CAAC;QAC/F,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,yBAAyB;QAC9E,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAC1E,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,kBAAkB,CAAC,CAAM,EAAE,WAAoB;IACtD,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3B,oBAAoB;IACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YACzE,MAAM,GAAG,GAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC7H,IAAI,WAAW;gBAAE,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;YAC1C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACjB,uDAAuD;QACvD,IAAI,MAAM,GAAG,WAAW,IAAI,IAAI,CAAC;QACjC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAC5F,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACtD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACvD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAC7B,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,yDAAyD,KAAK,iBAAiB,GAAG,cAAc,MAAM,GAAG,CAAC,CAAC;oBAC9I,uBAAuB,GAAG,IAAI,CAAC;gBACjC,CAAC;gBACD,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;gBACzE,MAAM,GAAG,GAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC7H,IAAI,MAAM;oBAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBAChC,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,CAAM,EAAE,WAAoB;IACnD,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,WAAW;YAAE,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,MAAM,GAAG,WAAW,IAAI,IAAI,CAAC;QACjC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAC1F,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC7B,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,mCAAmC,CAAC,CAAC;gBAC1E,uBAAuB,GAAG,IAAI,CAAC;YACjC,CAAC;YACD,MAAM,GAAG,GAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;YAC3D,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,EAAE;gBAAE,GAAG,CAAC,SAAS,GAAG,SAAmB,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;YAClD,IAAI,MAAM;gBAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AA2CD,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAE,GAA2B,EAAQ,EAAE;IACrF,MAAM,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3D,IAAI,kBAAkB,IAAI,gBAAgB,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,iBAAiB,IAAI,oFAAoF,IAAI,iBAAiB,IAAI,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACtK,CAAC;AACH,CAAC,CAAC;AACF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,GAAW,EAAE,KAAc,EAAQ,EAAE;IACvE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,GAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAW,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAChC,wDAAwD;YACxD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC/C,IAAI,EAAE,EAAE,CAAC;gBACP,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC7C,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACpB,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACpB,CAAC;IACH,CAAC;IACD,2EAA2E;IAC3E,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,+DAA+D;YAC/D,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnD,IAAI,CAAC;oBAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAY,CAAC,CAAC;YAC9C,IAAI,MAAM;gBAAE,KAAK,CAAC,KAAK,GAAG,MAAa,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sBAAsB;IACxB,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC9C,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,gBAAgB;IAClB,CAAC;IAED,kFAAkF;IAClF,IAAI,0BAA0B,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;gBACtC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAU,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;gBACzE,IAAI,MAAM;oBAAE,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,gBAAgB;QAClB,CAAC;QAED,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;gBACxC,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,KAAY,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;gBACxE,IAAI,MAAM;oBAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,gBAAgB;QAClB,CAAC;QACD,6EAA6E;QAC7E,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;gBACxC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACpC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;oBACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBACzC,IAAI,CAAC,EAAE,CAAC;wBACN,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;wBACtC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;wBACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;oBAC/D,CAAC;yBAAM,IAAI,MAAM,EAAE,CAAC;wBAClB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;oBACnE,CAAC;yBAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3B,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,EAAE,CAAC;oBACrD,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,gBAAgB;QAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,MAAe,EAAE,SAAoB,EAAE,SAA0B,EAAE,GAA2B,EAAsC,EAAE;IACjL,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7F,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5B,0BAA0B,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,IAAI,QAAQ,GAAG,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjC,SAAS;gBACX,CAAC;gBACD,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;oBACtC,SAAS;gBACX,CAAC;gBACD,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBACjD,MAAM,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9D,MAAM,GAAG,GAAa,EAAE,CAAC;oBACzB,KAAK,MAAM,CAAC,IAAI,QAAQ;wBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;4BAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACvE,QAAQ,GAAG,GAAG,CAAC;oBACf,SAAS;gBACX,CAAC;gBACD,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBACjD,MAAM,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9D,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC;oBAC3D,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,CAAC;oBACX,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACrC,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACtH,IAAI,IAAI,EAAE,CAAC;oBACT,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnC,SAAS;gBACX,CAAC;YACH,CAAC;YACD,IAAI,SAAS,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBACrC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,EAAU,EAAE,GAAW,EAAE,IAA8B,EAAE,GAAoB,EAA8C,EAAE;IACpJ,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,EAAE,GAA2H,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;IAC/I,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACxC,gEAAgE;YAChE,iDAAiD;YACjD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvG,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,EAAE,CAAC,aAAa,GAAG,UAAU,CAAC;YAC9B,MAAM;QACR,CAAC;aAAM,IAAI,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvG,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,EAAE,CAAC,aAAa,GAAG,UAAU,CAAC;YAC9B,MAAM;QACR,CAAC;aAAM,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,WAAW,EAAE,sDAAsD,CAAC,MAAM;gBAC1E,6EAA6E,CAC9E,CAAC;QACJ,CAAC;aAAM,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,WAAW,EAAE,sDAAsD,CAAC,MAAM;gBAC1E,6EAA6E,CAC9E,CAAC;QACJ,CAAC;aAAM,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,KAAK,OAAO,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;gBAAC,CAAC,EAAE,CAAC;YAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;YACxD,IAAI,GAAG,CAAC,YAAY;gBAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;YACjD,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAY,EAAE;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO;QACL,KAAK;QACL,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5B,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACjC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,GAA8B,EAAO,EAAE;IACnE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,6DAA6D;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1B,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;gBACnD,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,mCAAmC;IACnC,uBAAuB,GAAG,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAgB,CAAC;IACtD,MAAM,IAAI,GAA6B,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAW,EAAE,CAAC;IACxB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,OAAO,GAA+C,EAAE,CAAC;IAE/D,4EAA4E;IAC5E,mEAAmE;IACnE,MAAM,aAAa,GAAgC,EAAE,CAAC;IACtD,MAAM,aAAa,GAAgC,EAAE,CAAC;IAEtD,IAAI,MAAM,GAAuB,SAAS,CAAC;IAC3C,IAAI,QAAQ,GAAuB,SAAS,CAAC;IAC7C,IAAI,SAAS,GAAuB,SAAS,CAAC;IAC9C,IAAI,QAAQ,GAAyB,SAAS,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAChC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;oBACxB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACvE,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;oBAC/B,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACjC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,CAAC;qBAAM,IAAI,IAAI,CAAC,GAAG,KAAK,aAAa,EAAE,CAAC;oBACtC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;gBAC7B,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;gBAClB,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAG,IAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClE,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrD,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,0EAA0E;gBAC1E,MAAM,GAAG,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAE,IAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,IAAI,GAAG;oBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;gBAClC,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAG,IAAY,CAAC,GAAG,EAAG,IAAY,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC5H,IAAI,aAAa,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjE,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;gBACvC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,IAAI,CAAC,QAAQ,EAAE,aAAa,IAAI,CAAC,IAAI,oFAAoF,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC;oBAC/I,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACrB,MAAM;gBACR,CAAC;gBACD,IAAI,aAAa,EAAE,CAAC;oBAClB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBACnC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;gBAClD,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,oFAAoF;gBACpF,MAAM,cAAc,GAAG,oBAAoB,CAAE,IAAY,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;gBAC5E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAG,IAAY,CAAC,YAAY,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC/H,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9E,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM;YACR,CAAC;YACD;gBACE,wDAAwD;gBACxD,MAAM;QACV,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,KAAY,CAAC;YACvB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,QAAQ,EAAE,eAAe,IAAI,wFAAwF,CAAC,CAAC;YAC9H,CAAC;YAED,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC1F,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC3B,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,oBAAoB,IAAI,8BAA8B,CAAC,CAAC;oBACpG,CAAC;oBACD,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAE/B,MAAM,GAAG,GAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAClL,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;QAAG,GAAW,CAAC,OAAO,GAAG,OAAO,CAAC;IAChE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IAC9C,IAAI,iBAAiB,EAAE,CAAC;QACtB,IAAI,aAAa;YAAE,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC;QACrD,IAAI,aAAa;YAAE,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC;IACvD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { PatternEvent, SequenceItem, SequenceTransform, SourceLocation } from './ast.js';
2
+ export interface RawSeqModifier {
3
+ raw: string;
4
+ loc?: SourceLocation;
5
+ }
6
+ export interface RawSeqItem {
7
+ name: string;
8
+ modifiers: RawSeqModifier[];
9
+ raw?: string;
10
+ loc?: SourceLocation;
11
+ }
12
+ export declare const patternEventsToTokens: (events?: PatternEvent[]) => string[];
13
+ export declare const parseSeqTransforms: (mods: RawSeqModifier[]) => SequenceTransform[];
14
+ export declare const normalizeSeqItems: (items?: RawSeqItem[], rhs?: string, rhsTokens?: string[]) => SequenceItem[];
15
+ export declare const materializeSequenceItems: (items: SequenceItem[]) => string[];
16
+ //# sourceMappingURL=structured.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured.d.ts","sourceRoot":"","sources":["../../src/parser/structured.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACf,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,cAAc;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,cAAc,CAAA;CAAE;AACrE,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,cAAc,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,cAAc,CAAA;CAAE;AAO7G,eAAO,MAAM,qBAAqB,GAAI,SAAS,YAAY,EAAE,KAAG,MAAM,EAiDrE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,cAAc,EAAE,KAAG,iBAAiB,EAwB5E,CAAC;AA+EF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,UAAU,EAAE,EAAE,MAAM,MAAM,EAAE,YAAY,MAAM,EAAE,KAAG,YAAY,EAWxG,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,OAAO,YAAY,EAAE,KAAG,MAAM,EAStE,CAAC"}