@liquidmetal-ai/drizzle 0.2.3 → 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 +7 -0
- package/dist/appify/build.d.ts +8 -0
- package/dist/appify/build.d.ts.map +1 -1
- package/dist/appify/build.js +68 -2
- package/dist/appify/build.test.js +170 -2
- package/dist/appify/parse.d.ts +13 -2
- package/dist/appify/parse.d.ts.map +1 -1
- package/dist/appify/parse.js +51 -2
- package/dist/appify/parse.test.js +149 -2
- package/dist/codestore.js +1 -1
- package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts +526 -479
- package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts.map +1 -1
- package/dist/liquidmetal/v1alpha1/catalog_pb.js +210 -1726
- package/dist/liquidmetal/v1alpha1/rainbow_auth_pb.d.ts +110 -92
- package/dist/liquidmetal/v1alpha1/rainbow_auth_pb.d.ts.map +1 -1
- package/dist/liquidmetal/v1alpha1/rainbow_auth_pb.js +38 -361
- package/dist/liquidmetal/v1alpha1/raindrop_pb.d.ts +14 -13
- package/dist/liquidmetal/v1alpha1/raindrop_pb.d.ts.map +1 -1
- package/dist/liquidmetal/v1alpha1/raindrop_pb.js +10 -48
- package/dist/liquidmetal/v1alpha1/resource_interface_pb.d.ts +146 -122
- package/dist/liquidmetal/v1alpha1/resource_interface_pb.d.ts.map +1 -1
- package/dist/liquidmetal/v1alpha1/resource_interface_pb.js +49 -428
- package/dist/liquidmetal/v1alpha1/search_agent_pb.d.ts +262 -142
- package/dist/liquidmetal/v1alpha1/search_agent_pb.d.ts.map +1 -1
- package/dist/liquidmetal/v1alpha1/search_agent_pb.js +68 -684
- package/eslint.config.mjs +3 -1
- package/package.json +2 -1
- package/src/appify/build.test.ts +197 -2
- package/src/appify/build.ts +71 -2
- package/src/appify/parse.test.ts +154 -2
- package/src/appify/parse.ts +55 -3
- package/src/codestore.ts +1 -1
- package/src/liquidmetal/v1alpha1/catalog_pb.ts +719 -1467
- package/src/liquidmetal/v1alpha1/rainbow_auth_pb.ts +142 -284
- package/src/liquidmetal/v1alpha1/raindrop_pb.ts +21 -35
- package/src/liquidmetal/v1alpha1/resource_interface_pb.ts +192 -378
- package/src/liquidmetal/v1alpha1/search_agent_pb.ts +310 -450
- package/tsconfig.json +11 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/.turbo/turbo-lint.log +0 -6
- package/.turbo/turbo-test.log +0 -6
- package/dist/liquidmetal/v1alpha1/catalog_connect.d.ts +0 -168
- package/dist/liquidmetal/v1alpha1/catalog_connect.d.ts.map +0 -1
- package/dist/liquidmetal/v1alpha1/catalog_connect.js +0 -171
- package/dist/liquidmetal/v1alpha1/rainbow_auth_connect.d.ts +0 -49
- package/dist/liquidmetal/v1alpha1/rainbow_auth_connect.d.ts.map +0 -1
- package/dist/liquidmetal/v1alpha1/rainbow_auth_connect.js +0 -52
- package/dist/liquidmetal/v1alpha1/rainbow_public_connect.d.ts +0 -26
- package/dist/liquidmetal/v1alpha1/rainbow_public_connect.d.ts.map +0 -1
- package/dist/liquidmetal/v1alpha1/rainbow_public_connect.js +0 -29
- package/dist/liquidmetal/v1alpha1/rainbow_public_pb.d.ts +0 -202
- package/dist/liquidmetal/v1alpha1/rainbow_public_pb.d.ts.map +0 -1
- package/dist/liquidmetal/v1alpha1/rainbow_public_pb.js +0 -298
- package/dist/liquidmetal/v1alpha1/resource_interface_connect.d.ts +0 -68
- package/dist/liquidmetal/v1alpha1/resource_interface_connect.d.ts.map +0 -1
- package/dist/liquidmetal/v1alpha1/resource_interface_connect.js +0 -73
- package/dist/liquidmetal/v1alpha1/search_agent_connect.d.ts +0 -170
- package/dist/liquidmetal/v1alpha1/search_agent_connect.d.ts.map +0 -1
- package/dist/liquidmetal/v1alpha1/search_agent_connect.js +0 -173
- package/src/liquidmetal/v1alpha1/catalog_connect.ts +0 -174
- package/src/liquidmetal/v1alpha1/rainbow_auth_connect.ts +0 -55
- package/src/liquidmetal/v1alpha1/rainbow_public_connect.ts +0 -32
- package/src/liquidmetal/v1alpha1/rainbow_public_pb.ts +0 -366
- package/src/liquidmetal/v1alpha1/resource_interface_connect.ts +0 -77
- package/src/liquidmetal/v1alpha1/search_agent_connect.ts +0 -176
package/CHANGELOG.md
ADDED
package/dist/appify/build.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,EACL,SAAS,EACT,cAAc,EACd,SAAS,EAGT,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;AACpD,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;AACpD,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;AAgBtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,WAAW;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;gBAEA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY;CAO/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,CAqB7E;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/appify/build.ts"],"names":[],"mappings":"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"}
|
package/dist/appify/build.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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(
|
|
140
|
+
expect(valueOf(smartBucket.name)).toBe('my-smart-bucket');
|
|
141
141
|
expect(smartBucket.locationHint).toBeDefined();
|
|
142
|
-
expect(valueOf(smartBucket.locationHint)).toBe(
|
|
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
|
+
});
|
package/dist/appify/parse.d.ts
CHANGED
|
@@ -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:
|
|
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":"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"}
|
package/dist/appify/parse.js
CHANGED
|
@@ -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.
|
|
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;
|