@liquidmetal-ai/drizzle 0.2.8 → 0.2.9

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @liquidmetal-ai/drizzle
2
+
3
+ ## 0.2.9
4
+
5
+ ### Patch Changes
6
+
7
+ - 2c573db: Bumping to v0.2.8
@@ -32,6 +32,8 @@ export declare class Application {
32
32
  vectorIndex: VectorIndex[];
33
33
  kvStore: KvStore[];
34
34
  smartBucket: SmartBucket[];
35
+ labels: Record<string, string>;
36
+ annotations: Record<string, string>;
35
37
  constructor(name: TokenString, obj: ConfigObject);
36
38
  handlers(): (Service | Observer | Actor | Task)[];
37
39
  }
@@ -43,6 +45,8 @@ export declare class Service {
43
45
  domains: Domain[];
44
46
  bindings: Binding[];
45
47
  env: Env[];
48
+ labels: Record<string, string>;
49
+ annotations: Record<string, string>;
46
50
  constructor(name: TokenString, obj: ConfigObject);
47
51
  }
48
52
  export declare class Actor {
@@ -51,6 +55,8 @@ export declare class Actor {
51
55
  bindings: Binding[];
52
56
  env: Env[];
53
57
  visibility?: TokenString;
58
+ labels: Record<string, string>;
59
+ annotations: Record<string, string>;
54
60
  constructor(name: TokenString, obj: ConfigObject);
55
61
  }
56
62
  export declare class Task {
@@ -69,6 +75,8 @@ export declare class Observer {
69
75
  source: Source[];
70
76
  bindings: Binding[];
71
77
  env: Env[];
78
+ labels: Record<string, string>;
79
+ annotations: Record<string, string>;
72
80
  constructor(name: TokenString, obj: ConfigObject);
73
81
  }
74
82
  export declare class Source {
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/appify/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/appify/build.ts"],"names":[],"mappings":"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"}
@@ -103,6 +103,34 @@ function buildAssignment(obj, field, expected, child, errors) {
103
103
  obj[field] = child.value;
104
104
  }
105
105
  }
106
+ // buildLabelset creates and validates a set of string-only key-value pairs,
107
+ // reporting errors for any non-string values.
108
+ function buildLabelset(target, field, child, errors) {
109
+ if (child.value.type !== 'object') {
110
+ errors.push({ message: `${child.key.value} must be an object`, ...child });
111
+ return;
112
+ }
113
+ // Initialize the field as an empty object if it doesn't exist
114
+ if (!target[field]) {
115
+ target[field] = {};
116
+ }
117
+ // Get the object we're populating
118
+ const labelset = target[field];
119
+ // Process each property in the object
120
+ for (const prop of child.value.properties) {
121
+ // Handle indentifiers and strings as object keys.
122
+ const key = prop.key.type === 'string' ? valueOf(prop.key) : prop.key.value;
123
+ if (prop.value.type === 'string') {
124
+ labelset[key] = valueOf(prop.value);
125
+ }
126
+ else {
127
+ errors.push({
128
+ message: `${child.key.value} must have string values, found non-string value for key "${prop.key.value}"`,
129
+ ...prop.value,
130
+ });
131
+ }
132
+ }
133
+ }
106
134
  export function buildApplication(node) {
107
135
  const errors = [];
108
136
  // Build out the application name.
@@ -153,7 +181,16 @@ export function buildApplication(node) {
153
181
  }
154
182
  break;
155
183
  case 'assignment':
156
- errors.push({ message: 'unexpected assignment', ...child });
184
+ switch (child.key.value) {
185
+ case 'labels':
186
+ buildLabelset(app, 'labels', child, errors);
187
+ break;
188
+ case 'annotations':
189
+ buildLabelset(app, 'annotations', child, errors);
190
+ break;
191
+ default:
192
+ errors.push({ message: 'unexpected assignment', ...child });
193
+ }
157
194
  break;
158
195
  case 'comment':
159
196
  break;
@@ -196,6 +233,12 @@ function buildService(stanza) {
196
233
  case 'visibility':
197
234
  buildAssignment(service, 'visibility', 'string', child, errors);
198
235
  break;
236
+ case 'labels':
237
+ buildLabelset(service, 'labels', child, errors);
238
+ break;
239
+ case 'annotations':
240
+ buildLabelset(service, 'annotations', child, errors);
241
+ break;
199
242
  default:
200
243
  errors.push({ message: 'unexpected assignment', ...child });
201
244
  }
@@ -407,7 +450,16 @@ function buildObserver(stanza) {
407
450
  }
408
451
  break;
409
452
  case 'assignment':
410
- errors.push({ message: 'unexpected assignment', ...child });
453
+ switch (child.key.value) {
454
+ case 'labels':
455
+ buildLabelset(observer, 'labels', child, errors);
456
+ break;
457
+ case 'annotations':
458
+ buildLabelset(observer, 'annotations', child, errors);
459
+ break;
460
+ default:
461
+ errors.push({ message: 'unexpected assignment', ...child });
462
+ }
411
463
  break;
412
464
  case 'comment':
413
465
  case 'newline':
@@ -443,6 +495,12 @@ function buildActor(stanza) {
443
495
  case 'visibility':
444
496
  buildAssignment(actor, 'visibility', 'string', child, errors);
445
497
  break;
498
+ case 'labels':
499
+ buildLabelset(actor, 'labels', child, errors);
500
+ break;
501
+ case 'annotations':
502
+ buildLabelset(actor, 'annotations', child, errors);
503
+ break;
446
504
  default:
447
505
  errors.push({ message: 'unexpected assignment', ...child });
448
506
  }
@@ -670,6 +728,8 @@ export class Application {
670
728
  vectorIndex = [];
671
729
  kvStore = [];
672
730
  smartBucket = [];
731
+ labels = {};
732
+ annotations = {};
673
733
  constructor(name, obj) {
674
734
  this.name = name;
675
735
  this.obj = obj;
@@ -687,6 +747,8 @@ export class Service {
687
747
  domains = [];
688
748
  bindings = [];
689
749
  env = [];
750
+ labels = {};
751
+ annotations = {};
690
752
  constructor(name, obj) {
691
753
  this.name = name;
692
754
  this.obj = obj;
@@ -698,6 +760,8 @@ export class Actor {
698
760
  bindings = [];
699
761
  env = [];
700
762
  visibility;
763
+ labels = {};
764
+ annotations = {};
701
765
  constructor(name, obj) {
702
766
  this.name = name;
703
767
  this.obj = obj;
@@ -722,6 +786,8 @@ export class Observer {
722
786
  source = [];
723
787
  bindings = [];
724
788
  env = [];
789
+ labels = {};
790
+ annotations = {};
725
791
  constructor(name, obj) {
726
792
  this.name = name;
727
793
  this.obj = obj;
@@ -137,9 +137,9 @@ application "my-app" {
137
137
  expect(apps[0].smartBucket.length).toBe(1);
138
138
  // Check the smartbucket properties
139
139
  const smartBucket = apps[0].smartBucket[0];
140
- expect(valueOf(smartBucket.name)).toBe("my-smart-bucket");
140
+ expect(valueOf(smartBucket.name)).toBe('my-smart-bucket');
141
141
  expect(smartBucket.locationHint).toBeDefined();
142
- expect(valueOf(smartBucket.locationHint)).toBe("enam");
142
+ expect(valueOf(smartBucket.locationHint)).toBe('enam');
143
143
  });
144
144
  test('smartbucket with invalid properties', () => {
145
145
  const CONFIG = `
@@ -179,3 +179,171 @@ application "foo" {
179
179
  },
180
180
  ]);
181
181
  });
182
+ test('service with labels and annotations', () => {
183
+ const CONFIG = `
184
+ application "my-app" {
185
+ service "my-service" {
186
+ labels = {
187
+ environment = "production"
188
+ team = "platform"
189
+ }
190
+
191
+ annotations = {
192
+ description = "Service for handling API requests"
193
+ version = "1.0.0"
194
+ }
195
+ }
196
+ }
197
+ `;
198
+ const tokenizer = new Tokenizer(CONFIG);
199
+ const parser = new Parser(tokenizer);
200
+ const ast = parser.parse();
201
+ expect(parser.errors).toEqual([]);
202
+ const [apps, errors] = buildManifest(ast);
203
+ expect(errors).toEqual([]);
204
+ // Check that we have exactly one application with one service
205
+ expect(apps.length).toBe(1);
206
+ expect(apps[0].service.length).toBe(1);
207
+ // Check the service's labels and annotations
208
+ const service = apps[0].service[0];
209
+ // Verify labels
210
+ expect(service.labels).toBeDefined();
211
+ expect(service.labels['environment']).toBe('production');
212
+ expect(service.labels['team']).toBe('platform');
213
+ // Verify annotations
214
+ expect(service.annotations).toBeDefined();
215
+ expect(service.annotations['description']).toBe('Service for handling API requests');
216
+ expect(service.annotations['version']).toBe('1.0.0');
217
+ });
218
+ test('service with non-string labels and annotations', () => {
219
+ const CONFIG = `
220
+ application "my-app" {
221
+ service "my-service" {
222
+ labels = {
223
+ environment = "production"
224
+ priority = 1
225
+ isActive = true
226
+ }
227
+
228
+ annotations = {
229
+ description = "Service for handling API requests"
230
+ maxInstances = 5
231
+ }
232
+ }
233
+ }
234
+ `;
235
+ const tokenizer = new Tokenizer(CONFIG);
236
+ const parser = new Parser(tokenizer);
237
+ const ast = parser.parse();
238
+ expect(parser.errors).toEqual([]);
239
+ const [_, errors] = buildManifest(ast);
240
+ // Should have errors for non-string values
241
+ expect(errors.length).toBe(3);
242
+ // Check error messages
243
+ const errorMessages = errors.map((err) => err.message);
244
+ expect(errorMessages).toContain('labels must have string values, found non-string value for key "priority"');
245
+ expect(errorMessages).toContain('labels must have string values, found non-string value for key "isActive"');
246
+ expect(errorMessages).toContain('annotations must have string values, found non-string value for key "maxInstances"');
247
+ });
248
+ test('service with invalid labels type', () => {
249
+ const CONFIG = `
250
+ application "my-app" {
251
+ service "my-service" {
252
+ labels = "not-an-object"
253
+ }
254
+ }
255
+ `;
256
+ const tokenizer = new Tokenizer(CONFIG);
257
+ const parser = new Parser(tokenizer);
258
+ const ast = parser.parse();
259
+ expect(parser.errors).toEqual([]);
260
+ const [, errors] = buildManifest(ast);
261
+ // Should have one error for the invalid type
262
+ expect(errors.length).toBe(1);
263
+ expect(errors[0].message).toBe('labels must be an object');
264
+ });
265
+ test('actor with labels and annotations', () => {
266
+ const CONFIG = `
267
+ application "my-app" {
268
+ actor "my-actor" {
269
+ labels = {
270
+ environment = "production"
271
+ team = "platform"
272
+ }
273
+
274
+ annotations = {
275
+ description = "Actor for processing background jobs"
276
+ version = "1.0.0"
277
+ }
278
+
279
+ visibility = "protected"
280
+ }
281
+ }
282
+ `;
283
+ const tokenizer = new Tokenizer(CONFIG);
284
+ const parser = new Parser(tokenizer);
285
+ const ast = parser.parse();
286
+ expect(parser.errors).toEqual([]);
287
+ const [apps, errors] = buildManifest(ast);
288
+ expect(errors).toEqual([]);
289
+ // Check that we have exactly one application with one actor
290
+ expect(apps.length).toBe(1);
291
+ expect(apps[0].actor.length).toBe(1);
292
+ // Check the actor's labels and annotations
293
+ const actor = apps[0].actor[0];
294
+ // Verify labels
295
+ expect(actor.labels).toBeDefined();
296
+ expect(actor.labels['environment']).toBe('production');
297
+ expect(actor.labels['team']).toBe('platform');
298
+ // Verify annotations
299
+ expect(actor.annotations).toBeDefined();
300
+ expect(actor.annotations['description']).toBe('Actor for processing background jobs');
301
+ expect(actor.annotations['version']).toBe('1.0.0');
302
+ // Verify other properties still work
303
+ expect(valueOf(actor.visibility)).toBe('protected');
304
+ });
305
+ test('observer with labels and annotations', () => {
306
+ const CONFIG = `
307
+ application "my-app" {
308
+ bucket "my-bucket" {}
309
+
310
+ observer "my-observer" {
311
+ labels = {
312
+ environment = "production"
313
+ team = "platform"
314
+ }
315
+
316
+ annotations = {
317
+ description = "Observer for monitoring bucket changes"
318
+ version = "1.0.0"
319
+ }
320
+
321
+ source {
322
+ bucket = "my-bucket"
323
+ }
324
+ }
325
+ }
326
+ `;
327
+ const tokenizer = new Tokenizer(CONFIG);
328
+ const parser = new Parser(tokenizer);
329
+ const ast = parser.parse();
330
+ expect(parser.errors).toEqual([]);
331
+ const [apps, errors] = buildManifest(ast);
332
+ expect(errors).toEqual([]);
333
+ // Check that we have exactly one application with one observer
334
+ expect(apps.length).toBe(1);
335
+ expect(apps[0].observer.length).toBe(1);
336
+ // Check the observer's labels and annotations
337
+ const observer = apps[0].observer[0];
338
+ // Verify labels
339
+ expect(observer.labels).toBeDefined();
340
+ expect(observer.labels['environment']).toBe('production');
341
+ expect(observer.labels['team']).toBe('platform');
342
+ // Verify annotations
343
+ expect(observer.annotations).toBeDefined();
344
+ expect(observer.annotations['description']).toBe('Observer for monitoring bucket changes');
345
+ expect(observer.annotations['version']).toBe('1.0.0');
346
+ // Verify source still works
347
+ expect(observer.source.length).toBe(1);
348
+ expect(valueOf(observer.source[0].bucket)).toBe('my-bucket');
349
+ });
@@ -60,7 +60,7 @@ export declare class Tokenizer {
60
60
  eof(): boolean;
61
61
  }
62
62
  export type NodeType = Node['type'] | TokenType;
63
- export type Node = StanzaNode | AssignmentNode | BlockNode | ExpressionNode | EmptyNode | ArrayNode | ObjectNode | Token;
63
+ export type Node = StanzaNode | AssignmentNode | BlockNode | ExpressionNode | EmptyNode | ArrayNode | ObjectNode | PropertyNode | Token;
64
64
  type BaseNode = {
65
65
  line: number;
66
66
  column: number;
@@ -95,7 +95,17 @@ export type ArrayNode = BaseNode & {
95
95
  };
96
96
  export type ObjectNode = BaseNode & {
97
97
  type: 'object';
98
- properties: AssignmentNode[];
98
+ properties: PropertyNode[];
99
+ };
100
+ export type PropertyNode = BaseNode & {
101
+ type: 'property';
102
+ operator: TokenOperator;
103
+ key: Extract<Token, {
104
+ type: 'identifier' | 'string';
105
+ }>;
106
+ value: ExpressionNode | Extract<Token, {
107
+ type: 'string' | 'number' | 'boolean';
108
+ }> | ArrayNode | ObjectNode;
99
109
  };
100
110
  export type ExpressionNode = BaseNode & {
101
111
  type: 'expression';
@@ -130,6 +140,7 @@ export declare class Parser {
130
140
  parseExpression(ignore?: TokenType[]): TokenNumber | TokenString | TokenBoolean | ArrayNode | ObjectNode | ExpressionNode;
131
141
  parseArray(): ArrayNode;
132
142
  parseObject(): ObjectNode;
143
+ parseProperty(token: Token): PropertyNode;
133
144
  expect<T extends TokenType>(type: T, value?: string): Extract<Token, {
134
145
  type: T;
135
146
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/appify/parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/appify/parse.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG;IACtC,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG;IACzC,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG;IACxC,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG;IACrC,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG;IACxC,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG;IACrC,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG;IACrC,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG;IACrC,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG;IACrC,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG;IACjC,IAAI,EAAE,KAAK,CAAC;CACb,CAAC;AAEF,KAAK,KAAK,GACN,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,WAAW,GACX,eAAe,GACf,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,UAAU,CAAC;AAEf,KAAK,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAoB/B,qBAAa,SAAS;IAKR,OAAO,CAAC,KAAK;IAJzB,MAAM,SAAK;IACX,IAAI,SAAK;IACT,MAAM,SAAK;gBAES,KAAK,EAAE,MAAM;IAKjC,IAAI,CAAC,MAAM,GAAE,SAAS,EAAmB,GAAG,KAAK;IA2CjD,IAAI,CAAC,MAAM,GAAE,SAAS,EAAmB,GAAG,KAAK;IAWjD,GAAG,IAAI,OAAO;CAGf;AAED,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;AAEhD,MAAM,MAAM,IAAI,GACZ,UAAU,GACV,cAAc,GACd,SAAS,GACT,cAAc,GACd,SAAS,GACT,SAAS,GACT,UAAU,GACV,YAAY,GACZ,KAAK,CAAC;AAEV,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC;IACnD,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,EAAE,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAC5C,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC;CAC5G,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC;CACnH,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAA;KAAE,CAAC,CAAC;IACvD,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC;CAC5G,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAChE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;CACnF,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG;IACjC,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAIF,qBAAa,MAAM;IAGL,OAAO,CAAC,SAAS;IAF7B,MAAM,EAAE,WAAW,EAAE,CAAM;gBAEP,SAAS,EAAE,SAAS;IAIxC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS;IAiElC,eAAe,IAAI,IAAI;IAgCvB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAsCzC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc;IAqB7C,eAAe,CACb,MAAM,CAAC,EAAE,SAAS,EAAE,GACnB,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc;IAyCrF,UAAU,IAAI,SAAS;IA0CvB,WAAW,IAAI,UAAU;IAwCzB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY;IAqBzC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;CAuDlF;AAED,KAAK,gBAAgB,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,qBAAa,cAAc;IACzB,MAAM,EAAE,gBAAgB,EAAE,CAAC;;IAQ3B,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG;IAM9B,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,GAAG;IAyBnC,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,GAAG;CA8DvC;AAGD,wBAAgB,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,EAAE,MAAM,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CA0EhG"}
@@ -345,8 +345,8 @@ export class Parser {
345
345
  this.tokenizer.next(['whitespace', 'newline']);
346
346
  break;
347
347
  }
348
- if (next.type === 'identifier') {
349
- properties.push(this.parseAssignment(this.tokenizer.next(['whitespace', 'newline'])));
348
+ if (next.type === 'identifier' || next.type === 'string') {
349
+ properties.push(this.parseProperty(this.tokenizer.next(['whitespace', 'newline'])));
350
350
  next = this.tokenizer.peek(['whitespace', 'newline']);
351
351
  continue;
352
352
  }
@@ -364,6 +364,24 @@ export class Parser {
364
364
  }
365
365
  return { type: 'object', properties, line: next.line, column: next.column, start: next.start, end: next.end };
366
366
  }
367
+ parseProperty(token) {
368
+ if (token.type !== 'identifier' && token.type !== 'string') {
369
+ throw new Error(`Expected identifier or string but got ${token.type} at ${token.line}:${token.column}`);
370
+ }
371
+ const key = token;
372
+ const operator = this.expect('operator', '=');
373
+ const value = this.parseExpression();
374
+ return {
375
+ type: 'property',
376
+ operator,
377
+ key,
378
+ value,
379
+ line: key.line,
380
+ column: key.column,
381
+ start: key.start,
382
+ end: value.end,
383
+ };
384
+ }
367
385
  // Expect a token of a certain type, optionally with a certain
368
386
  // value.
369
387
  expect(type, value) {
@@ -494,6 +512,36 @@ export class JSONTranslator {
494
512
  return null;
495
513
  });
496
514
  }
515
+ else if (child.value.type === 'object') {
516
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
517
+ const objValue = {};
518
+ for (const prop of child.value.properties) {
519
+ if (prop.value.type === 'string') {
520
+ objValue[prop.key.value] = prop.value.value.slice(1, -1);
521
+ }
522
+ else if (prop.value.type === 'number') {
523
+ objValue[prop.key.value] = parseFloat(prop.value.value);
524
+ }
525
+ else if (prop.value.type === 'boolean') {
526
+ objValue[prop.key.value] = prop.value.value === 'true';
527
+ }
528
+ else if (prop.value.type === 'array') {
529
+ objValue[prop.key.value] = prop.value.elements.map((el) => {
530
+ if (el.type === 'string') {
531
+ return el.value.slice(1, -1);
532
+ }
533
+ else if (el.type === 'number') {
534
+ return parseFloat(el.value);
535
+ }
536
+ else if (el.type === 'boolean') {
537
+ return el.value === 'true';
538
+ }
539
+ return null;
540
+ });
541
+ }
542
+ }
543
+ obj[child.key.value] = objValue;
544
+ }
497
545
  }
498
546
  if (child.type === 'stanza') {
499
547
  if (!obj[child.name]) {
@@ -537,6 +585,7 @@ export function fmt(ast, indent = 0, sibling) {
537
585
  }
538
586
  }
539
587
  break;
588
+ case 'property':
540
589
  case 'assignment':
541
590
  str += `${INDENT}${fmt(ast.key)} = ${fmt(ast.value)}`;
542
591
  break;