@malloydata/malloy-tag 0.0.237-dev250225144145

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 (42) hide show
  1. package/README.md +0 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +38 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/lib/Malloy/MalloyTagLexer.d.ts +42 -0
  6. package/dist/lib/Malloy/MalloyTagLexer.js +385 -0
  7. package/dist/lib/Malloy/MalloyTagLexer.js.map +1 -0
  8. package/dist/lib/Malloy/MalloyTagParser.d.ts +180 -0
  9. package/dist/lib/Malloy/MalloyTagParser.js +1051 -0
  10. package/dist/lib/Malloy/MalloyTagParser.js.map +1 -0
  11. package/dist/lib/Malloy/MalloyTagVisitor.d.ts +120 -0
  12. package/dist/lib/Malloy/MalloyTagVisitor.js +4 -0
  13. package/dist/lib/Malloy/MalloyTagVisitor.js.map +1 -0
  14. package/dist/tags.d.ts +90 -0
  15. package/dist/tags.js +654 -0
  16. package/dist/tags.js.map +1 -0
  17. package/dist/tags.spec.d.ts +8 -0
  18. package/dist/tags.spec.js +318 -0
  19. package/dist/tags.spec.js.map +1 -0
  20. package/dist/util.d.ts +11 -0
  21. package/dist/util.js +84 -0
  22. package/dist/util.js.map +1 -0
  23. package/dist/util.spec.d.ts +1 -0
  24. package/dist/util.spec.js +43 -0
  25. package/dist/util.spec.js.map +1 -0
  26. package/package.json +30 -0
  27. package/scripts/build_parser.js +98 -0
  28. package/src/MalloyTag.g4 +102 -0
  29. package/src/index.ts +8 -0
  30. package/src/lib/Malloy/MalloyTag.interp +61 -0
  31. package/src/lib/Malloy/MalloyTag.tokens +32 -0
  32. package/src/lib/Malloy/MalloyTagLexer.interp +85 -0
  33. package/src/lib/Malloy/MalloyTagLexer.tokens +32 -0
  34. package/src/lib/Malloy/MalloyTagLexer.ts +386 -0
  35. package/src/lib/Malloy/MalloyTagParser.ts +1048 -0
  36. package/src/lib/Malloy/MalloyTagVisitor.ts +141 -0
  37. package/src/lib/Malloy/_BUILD_DIGEST_ +1 -0
  38. package/src/tags.spec.ts +331 -0
  39. package/src/tags.ts +761 -0
  40. package/src/util.spec.ts +43 -0
  41. package/src/util.ts +73 -0
  42. package/tsconfig.json +11 -0
package/dist/tags.js ADDED
@@ -0,0 +1,654 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2023 Google LLC
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining
6
+ * a copy of this software and associated documentation files
7
+ * (the "Software"), to deal in the Software without restriction,
8
+ * including without limitation the rights to use, copy, modify, merge,
9
+ * publish, distribute, sublicense, and/or sell copies of the Software,
10
+ * and to permit persons to whom the Software is furnished to do so,
11
+ * subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be
14
+ * included in all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.Tag = void 0;
26
+ const tree_1 = require("antlr4ts/tree");
27
+ const MalloyTagLexer_1 = require("./lib/Malloy/MalloyTagLexer");
28
+ const MalloyTagParser_1 = require("./lib/Malloy/MalloyTagParser");
29
+ const antlr4ts_1 = require("antlr4ts");
30
+ const util_1 = require("./util");
31
+ /**
32
+ * Class for interacting with the parsed output of an annotation
33
+ * containing the Malloy tag language. Used by the parser to
34
+ * generate parsed data, and as an API to that data.
35
+ * ```
36
+ * tag.text(p?) => string value of tag.p or undefined
37
+ * tag.array(p?) => Tag[] value of tag.p or undefined
38
+ * tag.numeric(p?) => numeric value of tag.p or undefined
39
+ * tag.textArray(p ?) => string[] value of elements in tag.p or undefined
40
+ * tag.numericArray(p?) => string[] value of elements in tag.p or undefined
41
+ * tag.tag(p?) => Tag value of tag.p
42
+ * tag.has(p?) => boolean "tag contains tag.p"
43
+ * tag.bare(p?) => tag.p exists and has no properties
44
+ * tag.dict => Record<string,Tag> of tag properties
45
+ * ```
46
+ */
47
+ class Tag {
48
+ static tagFrom(from = {}) {
49
+ if (from instanceof Tag) {
50
+ return from;
51
+ }
52
+ return new Tag(from);
53
+ }
54
+ static id(t) {
55
+ let thisTagId = Tag.ids.get(t);
56
+ if (thisTagId === undefined) {
57
+ thisTagId = Tag.nextTagId;
58
+ Tag.ids.set(t, thisTagId);
59
+ Tag.nextTagId += 1;
60
+ }
61
+ return thisTagId;
62
+ }
63
+ peek(indent = 0) {
64
+ const spaces = ' '.repeat(indent);
65
+ let str = `#${Tag.id(this)}`;
66
+ if (this.properties === undefined &&
67
+ this.eq &&
68
+ typeof this.eq === 'string') {
69
+ return str + `=${this.eq}`;
70
+ }
71
+ str += ' {';
72
+ if (this.eq) {
73
+ if (typeof this.eq === 'string') {
74
+ str += `\n${spaces} =: ${this.eq}`;
75
+ }
76
+ else {
77
+ str += `\n${spaces} =: [\n${spaces} ${this.eq
78
+ .map(el => Tag.tagFrom(el).peek(indent + 4))
79
+ .join(`\n${spaces} `)}\n${spaces} ]`;
80
+ }
81
+ }
82
+ if (this.properties) {
83
+ for (const k in this.properties) {
84
+ const val = Tag.tagFrom(this.properties[k]);
85
+ str += `\n${spaces} ${k}: ${val.peek(indent + 2)}`;
86
+ }
87
+ }
88
+ str += `\n${spaces}}`;
89
+ return str;
90
+ }
91
+ /**
92
+ * Parse a line of Malloy tag language into a Tag which can be queried
93
+ * @param source -- The source line to be parsed. If the string starts with #, then it skips
94
+ * all characters up to the first space.
95
+ * @param lineNumber -- A line number to be associated with the parse errors.
96
+ * @param extending A tag which this line will be extending
97
+ * @param importing Outer "scopes" for $() references
98
+ * @returns Something shaped like { tag: Tag, log: ParseErrors[] }
99
+ */
100
+ static fromTagLine(source, lineNumber = 0, extending, ...importing) {
101
+ return parseTagLine(source, extending, importing, lineNumber);
102
+ }
103
+ /**
104
+ * Parse multiple lines of Malloy tag language, merging them into a single Tag
105
+ * @param lines -- The source line to be parsed. If the string starts with #, then it skips
106
+ * all characters up to the first space.
107
+ * @param extending A tag which this line will be extending
108
+ * @param importing Outer "scopes" for $() references
109
+ * @returns Something shaped like { tag: Tag, log: ParseErrors[] }
110
+ */
111
+ static fromTagLines(lines, extending, ...importing) {
112
+ const allErrs = [];
113
+ let current = extending;
114
+ for (let i = 0; i < lines.length; i++) {
115
+ const text = lines[i];
116
+ const noteParse = parseTagLine(text, extending, importing, i);
117
+ current = noteParse.tag;
118
+ allErrs.push(...noteParse.log);
119
+ }
120
+ return { tag: current, log: allErrs };
121
+ }
122
+ constructor(from = {}) {
123
+ if (from.eq) {
124
+ this.eq = from.eq;
125
+ }
126
+ if (from.properties) {
127
+ this.properties = from.properties;
128
+ }
129
+ if (from.deleted) {
130
+ this.deleted = from.deleted;
131
+ }
132
+ if (from.prefix) {
133
+ this.prefix = from.prefix;
134
+ }
135
+ }
136
+ static withPrefix(prefix) {
137
+ return new Tag({ prefix });
138
+ }
139
+ tag(...at) {
140
+ return this.find(at);
141
+ }
142
+ text(...at) {
143
+ var _a;
144
+ const str = (_a = this.find(at)) === null || _a === void 0 ? void 0 : _a.eq;
145
+ if (typeof str === 'string') {
146
+ return str;
147
+ }
148
+ }
149
+ numeric(...at) {
150
+ var _a;
151
+ const str = (_a = this.find(at)) === null || _a === void 0 ? void 0 : _a.eq;
152
+ if (typeof str === 'string') {
153
+ const num = Number.parseFloat(str);
154
+ if (!Number.isNaN(num)) {
155
+ return num;
156
+ }
157
+ }
158
+ }
159
+ bare(...at) {
160
+ const p = this.find(at);
161
+ if (p === undefined) {
162
+ return;
163
+ }
164
+ return (p.properties === undefined || Object.entries(p.properties).length === 0);
165
+ }
166
+ get dict() {
167
+ const newDict = {};
168
+ if (this.properties) {
169
+ for (const key in this.properties) {
170
+ newDict[key] = Tag.tagFrom(this.properties[key]);
171
+ }
172
+ }
173
+ return newDict;
174
+ }
175
+ array(...at) {
176
+ var _a;
177
+ const array = (_a = this.find(at)) === null || _a === void 0 ? void 0 : _a.eq;
178
+ if (array === undefined || typeof array === 'string') {
179
+ return undefined;
180
+ }
181
+ return array.map(el => typeof el === 'string' ? new Tag({ eq: el }) : Tag.tagFrom(el));
182
+ }
183
+ textArray(...at) {
184
+ var _a;
185
+ const array = (_a = this.find(at)) === null || _a === void 0 ? void 0 : _a.eq;
186
+ if (array === undefined || typeof array === 'string') {
187
+ return undefined;
188
+ }
189
+ return array.reduce((allStrs, el) => typeof el.eq === 'string' ? allStrs.concat(el.eq) : allStrs, []);
190
+ }
191
+ numericArray(...at) {
192
+ var _a;
193
+ const array = (_a = this.find(at)) === null || _a === void 0 ? void 0 : _a.eq;
194
+ if (array === undefined || typeof array === 'string') {
195
+ return undefined;
196
+ }
197
+ return array.reduce((allNums, el) => {
198
+ if (typeof el.eq === 'string') {
199
+ const num = Number.parseFloat(el.eq);
200
+ if (!Number.isNaN(num)) {
201
+ return allNums.concat(num);
202
+ }
203
+ }
204
+ return allNums;
205
+ }, []);
206
+ }
207
+ // Has the sometimes desireable side effect of initalizing properties
208
+ getProperties() {
209
+ if (this.properties === undefined) {
210
+ this.properties = {};
211
+ }
212
+ return this.properties;
213
+ }
214
+ clone() {
215
+ return new Tag(structuredClone(this));
216
+ }
217
+ toString() {
218
+ var _a;
219
+ let annotation = (_a = this.prefix) !== null && _a !== void 0 ? _a : '# ';
220
+ function addChildren(tag) {
221
+ var _a;
222
+ const props = Object.keys((_a = tag.properties) !== null && _a !== void 0 ? _a : {});
223
+ for (let i = 0; i < props.length; i++) {
224
+ addChild(props[i], tag.properties[props[i]]);
225
+ if (i < props.length - 1) {
226
+ annotation += ' ';
227
+ }
228
+ }
229
+ }
230
+ function addTag(child, isArrayEl = false) {
231
+ if (child.eq !== undefined) {
232
+ if (!isArrayEl)
233
+ annotation += ' = ';
234
+ if (Array.isArray(child.eq)) {
235
+ annotation += '[';
236
+ for (let i = 0; i < child.eq.length; i++) {
237
+ addTag(child.eq[i], true);
238
+ if (i !== child.eq.length - 1)
239
+ annotation += ', ';
240
+ }
241
+ annotation += ']';
242
+ }
243
+ else {
244
+ annotation += `${child.eq}`;
245
+ }
246
+ }
247
+ if (child.properties) {
248
+ const props = Object.keys(child.properties);
249
+ if (props.length === 1 &&
250
+ !props.some(c => { var _a; return ((_a = child.properties) !== null && _a !== void 0 ? _a : {})[c].deleted; }) &&
251
+ child.eq === undefined) {
252
+ annotation += '.';
253
+ addChildren(child);
254
+ }
255
+ else {
256
+ annotation += ' { ';
257
+ addChildren(child);
258
+ annotation += ' }';
259
+ }
260
+ }
261
+ }
262
+ function addChild(prop, child) {
263
+ if (child.deleted) {
264
+ annotation += `-${prop}`;
265
+ return;
266
+ }
267
+ annotation += prop;
268
+ addTag(child);
269
+ }
270
+ addChildren(this);
271
+ return annotation;
272
+ }
273
+ find(path) {
274
+ var _a;
275
+ let currentTag = Tag.tagFrom(this);
276
+ for (const segment of path) {
277
+ if (typeof segment === 'number') {
278
+ if (currentTag.eq === undefined ||
279
+ !Array.isArray(currentTag.eq) ||
280
+ currentTag.eq.length <= segment) {
281
+ return;
282
+ }
283
+ currentTag = Tag.tagFrom(currentTag.eq[segment]);
284
+ }
285
+ else {
286
+ const properties = (_a = currentTag.properties) !== null && _a !== void 0 ? _a : {};
287
+ if (segment in properties) {
288
+ currentTag = Tag.tagFrom(properties[segment]);
289
+ }
290
+ else {
291
+ return;
292
+ }
293
+ }
294
+ }
295
+ return currentTag;
296
+ }
297
+ has(...path) {
298
+ return this.find(path) !== undefined;
299
+ }
300
+ set(path, value = null) {
301
+ const copy = Tag.tagFrom(this);
302
+ let currentTag = copy;
303
+ for (const segment of path) {
304
+ if (typeof segment === 'number') {
305
+ if (currentTag.eq === undefined || !Array.isArray(currentTag.eq)) {
306
+ currentTag.eq = Array.from({ length: segment + 1 }).map(_ => ({}));
307
+ }
308
+ else if (currentTag.eq.length <= segment) {
309
+ const values = currentTag.eq;
310
+ const newVal = Array.from({ length: segment + 1 }).map((_, i) => i < values.length ? values[i] : {});
311
+ currentTag.eq = newVal;
312
+ }
313
+ currentTag = currentTag.eq[segment];
314
+ }
315
+ else {
316
+ const properties = currentTag.properties;
317
+ if (properties === undefined) {
318
+ currentTag.properties = { [segment]: {} };
319
+ currentTag = currentTag.properties[segment];
320
+ }
321
+ else if (segment in properties) {
322
+ currentTag = properties[segment];
323
+ if (currentTag.deleted) {
324
+ currentTag.deleted = false;
325
+ }
326
+ }
327
+ else {
328
+ properties[segment] = {};
329
+ currentTag = properties[segment];
330
+ }
331
+ }
332
+ }
333
+ if (value === null) {
334
+ currentTag.eq = undefined;
335
+ }
336
+ else if (typeof value === 'string') {
337
+ currentTag.eq = value;
338
+ }
339
+ else if (typeof value === 'number') {
340
+ currentTag.eq = value.toString(); // TODO big numbers?
341
+ }
342
+ else if (Array.isArray(value)) {
343
+ currentTag.eq = value.map((v) => {
344
+ return { eq: typeof v === 'string' ? v : v.toString() };
345
+ });
346
+ }
347
+ return copy;
348
+ }
349
+ delete(...path) {
350
+ return this.remove(path, false);
351
+ }
352
+ unset(...path) {
353
+ return this.remove(path, true);
354
+ }
355
+ remove(path, hard = false) {
356
+ var _a;
357
+ const origCopy = Tag.tagFrom(this);
358
+ let currentTag = origCopy;
359
+ for (const segment of path.slice(0, path.length - 1)) {
360
+ if (typeof segment === 'number') {
361
+ if (currentTag.eq === undefined || !Array.isArray(currentTag.eq)) {
362
+ if (!hard)
363
+ return origCopy;
364
+ currentTag.eq = Array.from({ length: segment }).map(_ => ({}));
365
+ }
366
+ else if (currentTag.eq.length <= segment) {
367
+ if (!hard)
368
+ return origCopy;
369
+ const values = currentTag.eq;
370
+ const newVal = Array.from({ length: segment }).map((_, i) => i < values.length ? values[i] : {});
371
+ currentTag.eq = newVal;
372
+ }
373
+ currentTag = currentTag.eq[segment];
374
+ }
375
+ else {
376
+ const properties = currentTag.properties;
377
+ if (properties === undefined) {
378
+ if (!hard)
379
+ return origCopy;
380
+ currentTag.properties = { [segment]: {} };
381
+ currentTag = currentTag.properties[segment];
382
+ }
383
+ else if (segment in properties) {
384
+ currentTag = properties[segment];
385
+ }
386
+ else {
387
+ if (!hard)
388
+ return origCopy;
389
+ properties[segment] = {};
390
+ currentTag = properties[segment];
391
+ }
392
+ }
393
+ }
394
+ const segment = path[path.length - 1];
395
+ if (typeof segment === 'string') {
396
+ if (currentTag.properties && segment in currentTag.properties) {
397
+ delete currentTag.properties[segment];
398
+ }
399
+ else if (hard) {
400
+ (_a = currentTag.properties) !== null && _a !== void 0 ? _a : (currentTag.properties = {});
401
+ currentTag.properties[segment] = { deleted: true };
402
+ }
403
+ }
404
+ else {
405
+ if (Array.isArray(currentTag.eq)) {
406
+ currentTag.eq.splice(segment, 1);
407
+ }
408
+ }
409
+ return origCopy;
410
+ }
411
+ }
412
+ exports.Tag = Tag;
413
+ // --- Just for debugging ---
414
+ Tag.ids = new Map();
415
+ Tag.nextTagId = 1000;
416
+ class TagErrorListener {
417
+ constructor(line) {
418
+ this.line = line;
419
+ this.log = [];
420
+ }
421
+ syntaxError(recognizer, offendingSymbol, line, charPositionInLine, msg, _e) {
422
+ const logMsg = {
423
+ code: 'tag-parse-syntax-error',
424
+ message: msg,
425
+ line: this.line,
426
+ offset: charPositionInLine,
427
+ };
428
+ this.log.push(logMsg);
429
+ }
430
+ semanticError(cx, code, msg) {
431
+ const logMsg = {
432
+ code,
433
+ message: msg,
434
+ line: this.line,
435
+ offset: cx.start.charPositionInLine,
436
+ };
437
+ this.log.push(logMsg);
438
+ }
439
+ }
440
+ function getBuildOn(ctx) {
441
+ const buildOn = ctx['buildOn'];
442
+ if (buildOn instanceof Tag) {
443
+ return buildOn;
444
+ }
445
+ return new Tag();
446
+ }
447
+ /**
448
+ * When chasing a path reference, the two interesting gestures are to
449
+ * find the path-ed tag so it can be extended, or to find the path tag
450
+ * so it can be deleted. This returns the parent and the final tag
451
+ * so that the caller can delete the tag with delete parent.tagName
452
+ * or assign to it with parent[tagName] = new_value
453
+ */
454
+ function buildAccessPath(buildOn, path) {
455
+ var _a;
456
+ var _b;
457
+ let parentPropertyObject = buildOn.getProperties();
458
+ for (const p of path.slice(0, path.length - 1)) {
459
+ let next;
460
+ if (parentPropertyObject[p] === undefined) {
461
+ next = new Tag({});
462
+ parentPropertyObject[p] = next;
463
+ }
464
+ else {
465
+ // The access that we are performing requires that `.properties` be the
466
+ // same JS object (not equal, but identical), and `Tag.tagFrom` only copies
467
+ // the exact object in if it is actually present.
468
+ (_a = (_b = parentPropertyObject[p]).properties) !== null && _a !== void 0 ? _a : (_b.properties = {});
469
+ next = Tag.tagFrom(parentPropertyObject[p]);
470
+ }
471
+ parentPropertyObject = next.getProperties();
472
+ }
473
+ return [path[path.length - 1], parentPropertyObject];
474
+ }
475
+ function getString(ctx) {
476
+ if (ctx.SQ_STRING() || ctx.DQ_STRING()) {
477
+ return (0, util_1.parseString)(ctx.text, ctx.text[0]);
478
+ }
479
+ return ctx.text;
480
+ }
481
+ function parseTagLine(source, extending, outerScope, onLine) {
482
+ if (source[0] === '#') {
483
+ const skipTo = source.indexOf(' ');
484
+ if (skipTo > 0) {
485
+ source = source.slice(skipTo);
486
+ }
487
+ else {
488
+ source = '';
489
+ }
490
+ }
491
+ const inputStream = antlr4ts_1.CharStreams.fromString(source);
492
+ const lexer = new MalloyTagLexer_1.MalloyTagLexer(inputStream);
493
+ const tokenStream = new antlr4ts_1.CommonTokenStream(lexer);
494
+ const pLog = new TagErrorListener(onLine);
495
+ const taglineParser = new MalloyTagParser_1.MalloyTagParser(tokenStream);
496
+ taglineParser.removeErrorListeners();
497
+ taglineParser.addErrorListener(pLog);
498
+ const tagTree = taglineParser.tagLine();
499
+ const treeWalker = new TagLineParser(outerScope, pLog);
500
+ const tag = treeWalker.tagLineToTag(tagTree, extending);
501
+ return { tag, log: pLog.log };
502
+ }
503
+ class TagLineParser extends tree_1.AbstractParseTreeVisitor {
504
+ constructor(outerScopes = [], msgLog) {
505
+ super();
506
+ this.scopes = [];
507
+ this.msgLog = msgLog;
508
+ this.scopes.unshift(...outerScopes);
509
+ }
510
+ defaultResult() {
511
+ return new Tag();
512
+ }
513
+ visitString(ctx) {
514
+ return new Tag({ eq: getString(ctx) });
515
+ }
516
+ getPropName(ctx) {
517
+ return ctx
518
+ .identifier()
519
+ .map(cx => cx.BARE_STRING() ? cx.text : (0, util_1.parseString)(cx.text, cx.text[0]));
520
+ }
521
+ getTags(tags, tagLine) {
522
+ for (const tagSpec of tags) {
523
+ // Stash the current state of this tag in the context and then visit it
524
+ // visit functions should alter the tagLine
525
+ tagSpec['buildOn'] = tagLine;
526
+ this.visit(tagSpec);
527
+ }
528
+ return tagLine;
529
+ }
530
+ tagLineToTag(ctx, extending) {
531
+ extending = (extending === null || extending === void 0 ? void 0 : extending.clone()) || new Tag({});
532
+ this.scopes.unshift(extending);
533
+ this.getTags(ctx.tagSpec(), extending);
534
+ return extending;
535
+ }
536
+ visitTagLine(_ctx) {
537
+ throw new Error('INTERNAL: ERROR: Call tagLineToTag, not vistTagLine');
538
+ return this.defaultResult();
539
+ }
540
+ visitProperties(ctx) {
541
+ return this.getTags(ctx.tagSpec(), getBuildOn(ctx));
542
+ }
543
+ visitArrayValue(ctx) {
544
+ return new Tag({ eq: this.getArray(ctx) });
545
+ }
546
+ getArray(ctx) {
547
+ return ctx.arrayElement().map(v => this.visit(v));
548
+ }
549
+ visitArrayElement(ctx) {
550
+ const propCx = ctx.properties();
551
+ const properties = propCx ? this.visitProperties(propCx) : undefined;
552
+ const strCx = ctx.string();
553
+ let value = strCx ? getString(strCx) : undefined;
554
+ const arrayCx = ctx.arrayValue();
555
+ if (arrayCx) {
556
+ value = this.getArray(arrayCx);
557
+ }
558
+ if (properties) {
559
+ if (value) {
560
+ properties.eq = value;
561
+ }
562
+ return properties;
563
+ }
564
+ const refCx = ctx.reference();
565
+ if (refCx) {
566
+ return this.visitReference(refCx);
567
+ }
568
+ return new Tag({ eq: value });
569
+ }
570
+ visitReference(ctx) {
571
+ const path = this.getPropName(ctx.propName());
572
+ for (const scope of this.scopes) {
573
+ // first scope which has the first component gets to resolve the whole path
574
+ if (scope.has(path[0])) {
575
+ const refTo = scope.tag(...path);
576
+ if (refTo) {
577
+ return refTo.clone();
578
+ }
579
+ break;
580
+ }
581
+ }
582
+ this.msgLog.semanticError(ctx, 'tag-property-not-found', `Reference to undefined property ${path.join('.')}`);
583
+ return this.defaultResult();
584
+ }
585
+ visitTagEq(ctx) {
586
+ const buildOn = getBuildOn(ctx);
587
+ const name = this.getPropName(ctx.propName());
588
+ const [writeKey, writeInto] = buildAccessPath(buildOn, name);
589
+ const eq = this.visit(ctx.eqValue());
590
+ const propCx = ctx.properties();
591
+ if (propCx) {
592
+ // a.b.c { -y } means i want to do -y on
593
+ if (propCx.DOTTY() === undefined) {
594
+ const properties = this.visitProperties(propCx).dict;
595
+ // Add new properties old value
596
+ writeInto[writeKey] = { ...eq, properties };
597
+ }
598
+ else {
599
+ // preserve old properties, add new value
600
+ writeInto[writeKey] = { ...writeInto[writeKey], ...eq };
601
+ }
602
+ }
603
+ else {
604
+ writeInto[writeKey] = eq;
605
+ }
606
+ return buildOn;
607
+ }
608
+ visitTagReplaceProperties(ctx) {
609
+ const buildOn = getBuildOn(ctx);
610
+ const name = this.getPropName(ctx.propName());
611
+ const [writeKey, writeInto] = buildAccessPath(buildOn, name);
612
+ const propCx = ctx.properties();
613
+ const props = this.visitProperties(propCx);
614
+ if (ctx.DOTTY() === undefined) {
615
+ // No dots, thropw away the value
616
+ writeInto[writeKey] = { properties: props.dict };
617
+ }
618
+ else {
619
+ /// DOTS, just update the properties
620
+ writeInto[writeKey].properties = props.dict;
621
+ }
622
+ return buildOn;
623
+ }
624
+ visitTagUpdateProperties(ctx) {
625
+ const buildOn = getBuildOn(ctx);
626
+ const name = this.getPropName(ctx.propName());
627
+ const [writeKey, writeInto] = buildAccessPath(buildOn, name);
628
+ const propCx = ctx.properties();
629
+ propCx['buildOn'] = Tag.tagFrom(writeInto[writeKey]);
630
+ const props = this.visitProperties(propCx);
631
+ const thisObj = writeInto[writeKey] || new Tag({});
632
+ const properties = { ...thisObj.properties, ...props.dict };
633
+ writeInto[writeKey] = { ...thisObj, properties };
634
+ return buildOn;
635
+ }
636
+ visitTagDef(ctx) {
637
+ const buildOn = getBuildOn(ctx);
638
+ const path = this.getPropName(ctx.propName());
639
+ const [writeKey, writeInto] = buildAccessPath(buildOn, path);
640
+ if (ctx.MINUS()) {
641
+ delete writeInto[writeKey];
642
+ }
643
+ else {
644
+ writeInto[writeKey] = new Tag({});
645
+ }
646
+ return buildOn;
647
+ }
648
+ visitTagEmpty(ctx) {
649
+ const tagList = ctx['buildOn'];
650
+ tagList.properties = {};
651
+ return tagList;
652
+ }
653
+ }
654
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"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"}