@malloydata/malloy 0.0.1

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 (104) hide show
  1. package/README.md +39 -0
  2. package/dist/connection_utils.d.ts +1 -0
  3. package/dist/connection_utils.js +56 -0
  4. package/dist/dialect/dialect-map.d.ts +3 -0
  5. package/dist/dialect/dialect-map.js +33 -0
  6. package/dist/dialect/dialect.d.ts +64 -0
  7. package/dist/dialect/dialect.js +64 -0
  8. package/dist/dialect/dialect_map.d.ts +3 -0
  9. package/dist/dialect/dialect_map.js +35 -0
  10. package/dist/dialect/duckdb.d.ts +49 -0
  11. package/dist/dialect/duckdb.js +349 -0
  12. package/dist/dialect/index.d.ts +6 -0
  13. package/dist/dialect/index.js +27 -0
  14. package/dist/dialect/postgres.d.ts +49 -0
  15. package/dist/dialect/postgres.js +308 -0
  16. package/dist/dialect/standardsql.d.ts +46 -0
  17. package/dist/dialect/standardsql.js +361 -0
  18. package/dist/index.d.ts +9 -0
  19. package/dist/index.js +47 -0
  20. package/dist/lang/ast/apply-expr.d.ts +16 -0
  21. package/dist/lang/ast/apply-expr.js +215 -0
  22. package/dist/lang/ast/ast-expr.d.ts +291 -0
  23. package/dist/lang/ast/ast-expr.js +1056 -0
  24. package/dist/lang/ast/ast-main.d.ts +480 -0
  25. package/dist/lang/ast/ast-main.js +2096 -0
  26. package/dist/lang/ast/ast-time-expr.d.ts +109 -0
  27. package/dist/lang/ast/ast-time-expr.js +550 -0
  28. package/dist/lang/ast/ast-types.d.ts +83 -0
  29. package/dist/lang/ast/ast-types.js +215 -0
  30. package/dist/lang/ast/index.d.ts +5 -0
  31. package/dist/lang/ast/index.js +34 -0
  32. package/dist/lang/ast/time-utils.d.ts +8 -0
  33. package/dist/lang/ast/time-utils.js +83 -0
  34. package/dist/lang/field-space.d.ts +157 -0
  35. package/dist/lang/field-space.js +651 -0
  36. package/dist/lang/field-utils.d.ts +5 -0
  37. package/dist/lang/field-utils.js +33 -0
  38. package/dist/lang/index.d.ts +9 -0
  39. package/dist/lang/index.js +22 -0
  40. package/dist/lang/lib/Malloy/MalloyLexer.d.ts +156 -0
  41. package/dist/lang/lib/Malloy/MalloyLexer.js +1163 -0
  42. package/dist/lang/lib/Malloy/MalloyListener.d.ts +2026 -0
  43. package/dist/lang/lib/Malloy/MalloyListener.js +4 -0
  44. package/dist/lang/lib/Malloy/MalloyParser.d.ts +1920 -0
  45. package/dist/lang/lib/Malloy/MalloyParser.js +11790 -0
  46. package/dist/lang/lib/Malloy/MalloyVisitor.d.ts +1276 -0
  47. package/dist/lang/lib/Malloy/MalloyVisitor.js +4 -0
  48. package/dist/lang/parse-log.d.ts +27 -0
  49. package/dist/lang/parse-log.js +41 -0
  50. package/dist/lang/parse-malloy.d.ts +245 -0
  51. package/dist/lang/parse-malloy.js +729 -0
  52. package/dist/lang/parse-to-ast.d.ts +156 -0
  53. package/dist/lang/parse-to-ast.js +945 -0
  54. package/dist/lang/parse-tree-walkers/document-completion-walker.d.ts +10 -0
  55. package/dist/lang/parse-tree-walkers/document-completion-walker.js +136 -0
  56. package/dist/lang/parse-tree-walkers/document-help-context-walker.d.ts +9 -0
  57. package/dist/lang/parse-tree-walkers/document-help-context-walker.js +97 -0
  58. package/dist/lang/parse-tree-walkers/document-highlight-walker.d.ts +83 -0
  59. package/dist/lang/parse-tree-walkers/document-highlight-walker.js +375 -0
  60. package/dist/lang/parse-tree-walkers/document-symbol-walker.d.ts +11 -0
  61. package/dist/lang/parse-tree-walkers/document-symbol-walker.js +172 -0
  62. package/dist/lang/parse-tree-walkers/explore-query-walker.d.ts +34 -0
  63. package/dist/lang/parse-tree-walkers/explore-query-walker.js +64 -0
  64. package/dist/lang/parse-tree-walkers/find-external-references.d.ts +11 -0
  65. package/dist/lang/parse-tree-walkers/find-external-references.js +51 -0
  66. package/dist/lang/reference-list.d.ts +10 -0
  67. package/dist/lang/reference-list.js +80 -0
  68. package/dist/lang/space-field.d.ts +119 -0
  69. package/dist/lang/space-field.js +339 -0
  70. package/dist/lang/test/document-help-context-walker.spec.d.ts +1 -0
  71. package/dist/lang/test/document-help-context-walker.spec.js +45 -0
  72. package/dist/lang/test/document-symbol-walker.spec.d.ts +1 -0
  73. package/dist/lang/test/document-symbol-walker.spec.js +100 -0
  74. package/dist/lang/test/field-symbols.spec.d.ts +1 -0
  75. package/dist/lang/test/field-symbols.spec.js +172 -0
  76. package/dist/lang/test/parse.spec.d.ts +12 -0
  77. package/dist/lang/test/parse.spec.js +1936 -0
  78. package/dist/lang/test/test-translator.d.ts +38 -0
  79. package/dist/lang/test/test-translator.js +334 -0
  80. package/dist/lang/zone.d.ts +57 -0
  81. package/dist/lang/zone.js +97 -0
  82. package/dist/malloy.d.ts +1134 -0
  83. package/dist/malloy.js +2354 -0
  84. package/dist/model/index.d.ts +2 -0
  85. package/dist/model/index.js +34 -0
  86. package/dist/model/malloy-query.d.ts +313 -0
  87. package/dist/model/malloy-query.js +2603 -0
  88. package/dist/model/malloy-types.d.ts +404 -0
  89. package/dist/model/malloy-types.js +242 -0
  90. package/dist/model/malloy_query.d.ts +353 -0
  91. package/dist/model/malloy_query.js +2990 -0
  92. package/dist/model/malloy_types.d.ts +502 -0
  93. package/dist/model/malloy_types.js +283 -0
  94. package/dist/model/sql-block.d.ts +11 -0
  95. package/dist/model/sql-block.js +38 -0
  96. package/dist/model/sql_block.d.ts +11 -0
  97. package/dist/model/sql_block.js +41 -0
  98. package/dist/model/utils.d.ts +21 -0
  99. package/dist/model/utils.js +84 -0
  100. package/dist/runtime-types.d.ts +116 -0
  101. package/dist/runtime-types.js +40 -0
  102. package/dist/runtime_types.d.ts +119 -0
  103. package/dist/runtime_types.js +15 -0
  104. package/package.json +36 -0
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2021 Google LLC
4
+ *
5
+ * This program is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU General Public License
7
+ * version 2 as published by the Free Software Foundation.
8
+ *
9
+ * This program is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.findReferences = void 0;
16
+ const ParseTreeWalker_1 = require("antlr4ts/tree/ParseTreeWalker");
17
+ class FindExternalReferences {
18
+ constructor(trans, tokens) {
19
+ this.trans = trans;
20
+ this.tokens = tokens;
21
+ this.needTables = {};
22
+ this.needImports = {};
23
+ }
24
+ enterTableName(pcx) {
25
+ const tableName = this.tokens.getText(pcx).slice(1, -1);
26
+ if (!this.needTables[tableName]) {
27
+ this.needTables[tableName] = this.trans.rangeFromContext(pcx);
28
+ }
29
+ }
30
+ enterImportURL(pcx) {
31
+ const url = JSON.parse(pcx.JSON_STRING().text);
32
+ if (!this.needImports[url]) {
33
+ this.needImports[url] = this.trans.rangeFromContext(pcx);
34
+ }
35
+ }
36
+ }
37
+ function findReferences(trans, tokens, parseTree) {
38
+ const finder = new FindExternalReferences(trans, tokens);
39
+ const listener = finder;
40
+ ParseTreeWalker_1.ParseTreeWalker.DEFAULT.walk(listener, parseTree);
41
+ let refs = {};
42
+ if (Object.keys(finder.needTables).length > 0) {
43
+ refs = { tables: finder.needTables };
44
+ }
45
+ if (Object.keys(finder.needImports).length > 0) {
46
+ refs = { ...refs, urls: finder.needImports };
47
+ }
48
+ return Object.keys(refs).length > 0 ? refs : null;
49
+ }
50
+ exports.findReferences = findReferences;
51
+ //# sourceMappingURL=find-external-references.js.map
@@ -0,0 +1,10 @@
1
+ import { DocumentReference, DocumentPosition } from "../model";
2
+ export declare class ReferenceList {
3
+ private readonly sourceURL;
4
+ constructor(sourceURL: string);
5
+ private readonly references;
6
+ private findIndexBefore;
7
+ add(reference: DocumentReference): void;
8
+ private isPositionEqual;
9
+ find(position: DocumentPosition): DocumentReference | undefined;
10
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2022 Google LLC
4
+ *
5
+ * This program is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU General Public License
7
+ * version 2 as published by the Free Software Foundation.
8
+ *
9
+ * This program is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ReferenceList = void 0;
16
+ class ReferenceList {
17
+ constructor(sourceURL) {
18
+ this.sourceURL = sourceURL;
19
+ // These should always be sorted by their end positions
20
+ this.references = [];
21
+ }
22
+ findIndexBefore(position) {
23
+ let low = 0;
24
+ let high = this.references.length;
25
+ while (low < high) {
26
+ const middle = Math.floor((low + high) / 2);
27
+ const compare = this.references[middle].location.range.end;
28
+ if (compare.line < position.line ||
29
+ (compare.line === position.line &&
30
+ compare.character < position.character)) {
31
+ low = middle + 1;
32
+ }
33
+ else {
34
+ high = middle;
35
+ }
36
+ }
37
+ return low;
38
+ }
39
+ add(reference) {
40
+ // Ignore any reference in another file
41
+ if (reference.location.url !== this.sourceURL) {
42
+ return;
43
+ }
44
+ const insertIndex = this.findIndexBefore(reference.location.range.end);
45
+ // Ignore duplicate references
46
+ if (insertIndex < this.references.length &&
47
+ this.isPositionEqual(reference, this.references[insertIndex])) {
48
+ return;
49
+ }
50
+ this.references.splice(insertIndex, 0, reference);
51
+ }
52
+ isPositionEqual(referenceA, referenceB) {
53
+ const rangeA = referenceA.location.range;
54
+ const rangeB = referenceB.location.range;
55
+ return (rangeA.start.line === rangeB.start.line &&
56
+ rangeA.start.character === rangeB.start.character &&
57
+ rangeA.end.line === rangeB.end.line &&
58
+ rangeA.end.character === rangeB.end.character);
59
+ }
60
+ find(position) {
61
+ // Here we assume that references DO NOT overlap. And then we do a binary
62
+ // search to find the one we're looking for.
63
+ const index = this.findIndexBefore(position);
64
+ if (index === this.references.length) {
65
+ return undefined;
66
+ }
67
+ const reference = this.references[index];
68
+ if (reference.location.range.start.line <= position.line &&
69
+ reference.location.range.end.line >= position.line &&
70
+ (position.line !== reference.location.range.start.line ||
71
+ position.character >= reference.location.range.start.character) &&
72
+ (position.line !== reference.location.range.end.line ||
73
+ position.character <= reference.location.range.end.character)) {
74
+ return reference;
75
+ }
76
+ return undefined;
77
+ }
78
+ }
79
+ exports.ReferenceList = ReferenceList;
80
+ //# sourceMappingURL=reference-list.js.map
@@ -0,0 +1,119 @@
1
+ import * as model from "../model/malloy_types";
2
+ import { FieldSpace, FSPair, DynamicSpace, QuerySpace } from "./field-space";
3
+ import { FieldValueType, FieldDeclaration, TurtleDecl, HasParameter, Join, FieldReference } from "./ast";
4
+ interface FieldType {
5
+ type: FieldValueType;
6
+ aggregate?: boolean;
7
+ }
8
+ export declare abstract class SpaceEntry {
9
+ abstract type(): FieldType;
10
+ abstract refType: "field" | "parameter";
11
+ }
12
+ export declare abstract class SpaceParam extends SpaceEntry {
13
+ abstract parameter(): model.Parameter;
14
+ readonly refType = "parameter";
15
+ }
16
+ export declare class DefinedParameter extends SpaceParam {
17
+ readonly paramDef: model.Parameter;
18
+ constructor(paramDef: model.Parameter);
19
+ parameter(): model.Parameter;
20
+ type(): FieldType;
21
+ }
22
+ export declare class AbstractParameter extends SpaceParam {
23
+ readonly astParam: HasParameter;
24
+ constructor(astParam: HasParameter);
25
+ parameter(): model.Parameter;
26
+ type(): FieldType;
27
+ }
28
+ export declare abstract class SpaceField extends SpaceEntry {
29
+ readonly refType = "field";
30
+ protected fieldTypeFromFieldDef(def: model.FieldDef): FieldType;
31
+ getQueryFieldDef(_fs: FSPair): model.QueryFieldDef | undefined;
32
+ fieldDef(): model.FieldDef | undefined;
33
+ }
34
+ export declare class RenameSpaceField extends SpaceField {
35
+ private readonly otherField;
36
+ private readonly newName;
37
+ private readonly location;
38
+ constructor(otherField: SpaceField, newName: string, location: model.DocumentLocation);
39
+ fieldDef(): model.FieldDef | undefined;
40
+ type(): FieldType;
41
+ }
42
+ export declare class WildSpaceField extends SpaceField {
43
+ readonly wildText: string;
44
+ constructor(wildText: string);
45
+ type(): FieldType;
46
+ getQueryFieldDef(_fs: FSPair): model.QueryFieldDef;
47
+ }
48
+ export declare class StructSpaceField extends SpaceField {
49
+ protected sourceDef: model.StructDef;
50
+ protected space?: FieldSpace;
51
+ constructor(sourceDef: model.StructDef);
52
+ get fieldSpace(): FieldSpace;
53
+ fieldDef(): model.FieldDef;
54
+ type(): FieldType;
55
+ }
56
+ export declare class JoinSpaceField extends StructSpaceField {
57
+ readonly intoFS: FieldSpace;
58
+ readonly join: Join;
59
+ constructor(intoFS: FieldSpace, join: Join);
60
+ }
61
+ export declare class ColumnSpaceField extends SpaceField {
62
+ protected def: model.FieldTypeDef;
63
+ constructor(def: model.FieldTypeDef);
64
+ fieldDef(): model.FieldDef;
65
+ type(): FieldType;
66
+ }
67
+ export declare abstract class QueryField extends SpaceField {
68
+ protected inSpace: FieldSpace;
69
+ constructor(inSpace: FieldSpace);
70
+ getQueryFieldDef(_fs: FSPair): model.QueryFieldDef | undefined;
71
+ type(): FieldType;
72
+ }
73
+ export declare class QueryFieldAST extends QueryField {
74
+ readonly turtle: TurtleDecl;
75
+ protected name: string;
76
+ renameAs?: string;
77
+ nestParent?: QuerySpace;
78
+ constructor(fs: FieldSpace, turtle: TurtleDecl, name: string);
79
+ fieldDef(): model.TurtleDef;
80
+ }
81
+ export declare class QueryFieldStruct extends QueryField {
82
+ protected turtleDef: model.TurtleDef;
83
+ constructor(fs: FieldSpace, turtleDef: model.TurtleDef);
84
+ rename(name: string): void;
85
+ fieldDef(): model.TurtleDef;
86
+ }
87
+ /**
88
+ * FilteredAliasedName
89
+ */
90
+ export declare class FANSPaceField extends SpaceField {
91
+ readonly ref: FieldReference;
92
+ readonly inSpace: FieldSpace;
93
+ as?: string;
94
+ filterList?: model.FilterExpression[];
95
+ constructor(ref: FieldReference, inSpace: FieldSpace, refInit?: Partial<model.FilteredAliasedName>);
96
+ name(): string;
97
+ private filtersPresent;
98
+ fieldDef(): model.FieldDef | undefined;
99
+ getQueryFieldDef(_fs: FSPair): model.QueryFieldDef;
100
+ type(): FieldType;
101
+ }
102
+ export declare class ReferenceField extends SpaceField {
103
+ readonly fieldRef: FieldReference;
104
+ constructor(fieldRef: FieldReference);
105
+ getQueryFieldDef(fs: FSPair): model.QueryFieldDef | undefined;
106
+ type(): FieldType;
107
+ }
108
+ export declare class ExpressionFieldFromAst extends SpaceField {
109
+ readonly space: DynamicSpace;
110
+ readonly exprDef: FieldDeclaration;
111
+ fieldName: string;
112
+ defType?: FieldType;
113
+ constructor(space: DynamicSpace, exprDef: FieldDeclaration);
114
+ get name(): string;
115
+ fieldDef(): model.FieldDef;
116
+ getQueryFieldDef(fs: FSPair): model.QueryFieldDef;
117
+ type(): FieldType;
118
+ }
119
+ export {};
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2021 Google LLC
4
+ *
5
+ * This program is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU General Public License
7
+ * version 2 as published by the Free Software Foundation.
8
+ *
9
+ * This program is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.ExpressionFieldFromAst = exports.ReferenceField = exports.FANSPaceField = exports.QueryFieldStruct = exports.QueryFieldAST = exports.QueryField = exports.ColumnSpaceField = exports.JoinSpaceField = exports.StructSpaceField = exports.WildSpaceField = exports.RenameSpaceField = exports.SpaceField = exports.AbstractParameter = exports.DefinedParameter = exports.SpaceParam = exports.SpaceEntry = void 0;
39
+ const model = __importStar(require("../model/malloy_types"));
40
+ const field_space_1 = require("./field-space");
41
+ class SpaceEntry {
42
+ }
43
+ exports.SpaceEntry = SpaceEntry;
44
+ class SpaceParam extends SpaceEntry {
45
+ constructor() {
46
+ super(...arguments);
47
+ this.refType = "parameter";
48
+ }
49
+ }
50
+ exports.SpaceParam = SpaceParam;
51
+ class DefinedParameter extends SpaceParam {
52
+ constructor(paramDef) {
53
+ super();
54
+ this.paramDef = paramDef;
55
+ }
56
+ parameter() {
57
+ return this.paramDef;
58
+ }
59
+ type() {
60
+ return { type: this.paramDef.type };
61
+ }
62
+ }
63
+ exports.DefinedParameter = DefinedParameter;
64
+ class AbstractParameter extends SpaceParam {
65
+ constructor(astParam) {
66
+ super();
67
+ this.astParam = astParam;
68
+ }
69
+ parameter() {
70
+ return this.astParam.parameter();
71
+ }
72
+ type() {
73
+ const type = this.astParam.type || "unknown";
74
+ return { type };
75
+ }
76
+ }
77
+ exports.AbstractParameter = AbstractParameter;
78
+ class SpaceField extends SpaceEntry {
79
+ constructor() {
80
+ super(...arguments);
81
+ this.refType = "field";
82
+ }
83
+ fieldTypeFromFieldDef(def) {
84
+ const ref = { type: def.type };
85
+ if (model.isFieldTypeDef(def) && def.aggregate) {
86
+ ref.aggregate = true;
87
+ }
88
+ return ref;
89
+ }
90
+ getQueryFieldDef(_fs) {
91
+ return undefined;
92
+ }
93
+ fieldDef() {
94
+ return undefined;
95
+ }
96
+ }
97
+ exports.SpaceField = SpaceField;
98
+ class RenameSpaceField extends SpaceField {
99
+ constructor(otherField, newName, location) {
100
+ super();
101
+ this.otherField = otherField;
102
+ this.newName = newName;
103
+ this.location = location;
104
+ }
105
+ fieldDef() {
106
+ const renamedFieldRaw = this.otherField.fieldDef();
107
+ if (renamedFieldRaw === undefined) {
108
+ return undefined;
109
+ }
110
+ return {
111
+ ...renamedFieldRaw,
112
+ as: this.newName,
113
+ location: this.location,
114
+ };
115
+ }
116
+ type() {
117
+ return this.otherField.type();
118
+ }
119
+ }
120
+ exports.RenameSpaceField = RenameSpaceField;
121
+ class WildSpaceField extends SpaceField {
122
+ constructor(wildText) {
123
+ super();
124
+ this.wildText = wildText;
125
+ }
126
+ type() {
127
+ throw new Error("should never ask a wild field for its type");
128
+ }
129
+ getQueryFieldDef(_fs) {
130
+ return this.wildText;
131
+ }
132
+ }
133
+ exports.WildSpaceField = WildSpaceField;
134
+ class StructSpaceField extends SpaceField {
135
+ constructor(sourceDef) {
136
+ super();
137
+ this.sourceDef = sourceDef;
138
+ }
139
+ get fieldSpace() {
140
+ if (!this.space) {
141
+ this.space = new field_space_1.StaticSpace(this.sourceDef);
142
+ }
143
+ return this.space;
144
+ }
145
+ fieldDef() {
146
+ return this.sourceDef;
147
+ }
148
+ type() {
149
+ return { type: "struct" };
150
+ }
151
+ }
152
+ exports.StructSpaceField = StructSpaceField;
153
+ class JoinSpaceField extends StructSpaceField {
154
+ constructor(intoFS, join) {
155
+ super(join.structDef());
156
+ this.intoFS = intoFS;
157
+ this.join = join;
158
+ }
159
+ }
160
+ exports.JoinSpaceField = JoinSpaceField;
161
+ class ColumnSpaceField extends SpaceField {
162
+ constructor(def) {
163
+ super();
164
+ this.def = def;
165
+ }
166
+ fieldDef() {
167
+ return this.def;
168
+ }
169
+ type() {
170
+ return this.fieldTypeFromFieldDef(this.def);
171
+ }
172
+ }
173
+ exports.ColumnSpaceField = ColumnSpaceField;
174
+ class QueryField extends SpaceField {
175
+ constructor(inSpace) {
176
+ super();
177
+ this.inSpace = inSpace;
178
+ }
179
+ getQueryFieldDef(_fs) {
180
+ return this.fieldDef();
181
+ }
182
+ type() {
183
+ return { type: "turtle" };
184
+ }
185
+ }
186
+ exports.QueryField = QueryField;
187
+ class QueryFieldAST extends QueryField {
188
+ constructor(fs, turtle, name) {
189
+ super(fs);
190
+ this.turtle = turtle;
191
+ this.name = name;
192
+ }
193
+ fieldDef() {
194
+ const def = this.turtle.getFieldDef(this.inSpace, this.nestParent);
195
+ if (this.renameAs) {
196
+ def.as = this.renameAs;
197
+ }
198
+ return def;
199
+ }
200
+ }
201
+ exports.QueryFieldAST = QueryFieldAST;
202
+ class QueryFieldStruct extends QueryField {
203
+ constructor(fs, turtleDef) {
204
+ super(fs);
205
+ this.turtleDef = turtleDef;
206
+ }
207
+ rename(name) {
208
+ this.turtleDef = {
209
+ ...this.turtleDef,
210
+ as: name,
211
+ };
212
+ }
213
+ fieldDef() {
214
+ return this.turtleDef;
215
+ }
216
+ }
217
+ exports.QueryFieldStruct = QueryFieldStruct;
218
+ /**
219
+ * FilteredAliasedName
220
+ */
221
+ class FANSPaceField extends SpaceField {
222
+ constructor(ref, inSpace, refInit) {
223
+ super();
224
+ this.ref = ref;
225
+ this.inSpace = inSpace;
226
+ Object.assign(this, refInit);
227
+ }
228
+ name() {
229
+ return this.as || this.ref.refString;
230
+ }
231
+ filtersPresent() {
232
+ return this.filterList && this.filterList.length > 0;
233
+ }
234
+ fieldDef() {
235
+ if (this.as === undefined) {
236
+ return undefined;
237
+ }
238
+ const fromField = this.ref.getField(this.inSpace).found;
239
+ if (fromField === undefined) {
240
+ // TODO should errror
241
+ return undefined;
242
+ }
243
+ const fieldTypeInfo = fromField.type();
244
+ const fieldType = fieldTypeInfo.type;
245
+ // TODO starting to feel like this should be a method call on a spaceentry
246
+ if (model.isAtomicFieldType(fieldType)) {
247
+ if (fromField instanceof SpaceParam) {
248
+ return {
249
+ type: fieldType,
250
+ name: this.as,
251
+ e: [{ type: "parameter", path: this.ref.refString }],
252
+ aggregate: false,
253
+ };
254
+ }
255
+ let fieldExpr = [{ type: "field", path: this.ref.refString }];
256
+ if (this.filtersPresent() && this.filterList) {
257
+ const newfieldExpr = [
258
+ {
259
+ type: "filterExpression",
260
+ filterList: this.filterList,
261
+ e: fieldExpr,
262
+ },
263
+ ];
264
+ fieldExpr = newfieldExpr;
265
+ }
266
+ return {
267
+ type: fieldType,
268
+ name: this.as,
269
+ e: fieldExpr,
270
+ aggregate: fieldTypeInfo.aggregate,
271
+ };
272
+ }
273
+ return undefined;
274
+ }
275
+ getQueryFieldDef(_fs) {
276
+ // TODO if this reference is to a field which does not exist
277
+ // it needs to be an error SOMEWHERE
278
+ const n = { name: this.ref.refString };
279
+ if (this.filtersPresent()) {
280
+ n.filterList = this.filterList;
281
+ }
282
+ if (this.as) {
283
+ n.as = this.as;
284
+ }
285
+ return n.as || n.filterList ? n : this.ref.refString;
286
+ }
287
+ type() {
288
+ const field = this.ref.getField(this.inSpace).found;
289
+ return (field === null || field === void 0 ? void 0 : field.type()) || { type: "unknown" };
290
+ }
291
+ }
292
+ exports.FANSPaceField = FANSPaceField;
293
+ class ReferenceField extends SpaceField {
294
+ constructor(fieldRef) {
295
+ super();
296
+ this.fieldRef = fieldRef;
297
+ }
298
+ getQueryFieldDef(fs) {
299
+ // Lookup string and generate error if it isn't defined.
300
+ const check = this.fieldRef.getField(fs.in);
301
+ if (check.error) {
302
+ this.fieldRef.log(check.error);
303
+ }
304
+ return this.fieldRef.refString;
305
+ }
306
+ type() {
307
+ return { type: "unknown" };
308
+ }
309
+ }
310
+ exports.ReferenceField = ReferenceField;
311
+ class ExpressionFieldFromAst extends SpaceField {
312
+ constructor(space, exprDef) {
313
+ super();
314
+ this.space = space;
315
+ this.exprDef = exprDef;
316
+ this.fieldName = exprDef.defineName;
317
+ }
318
+ get name() {
319
+ return this.fieldName;
320
+ }
321
+ fieldDef() {
322
+ const def = this.exprDef.fieldDef(this.space, this.name);
323
+ this.defType = this.fieldTypeFromFieldDef(def);
324
+ return def;
325
+ }
326
+ getQueryFieldDef(fs) {
327
+ const def = this.exprDef.queryFieldDef(fs, this.name);
328
+ this.defType = this.fieldTypeFromFieldDef(def);
329
+ return def;
330
+ }
331
+ type() {
332
+ if (this.defType) {
333
+ return this.defType;
334
+ }
335
+ return this.fieldTypeFromFieldDef(this.fieldDef());
336
+ }
337
+ }
338
+ exports.ExpressionFieldFromAst = ExpressionFieldFromAst;
339
+ //# sourceMappingURL=space-field.js.map
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2022 Google LLC
4
+ *
5
+ * This program is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU General Public License
7
+ * version 2 as published by the Free Software Foundation.
8
+ *
9
+ * This program is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const test_translator_1 = require("./test-translator");
16
+ function testHelpContext(source, position, type, token) {
17
+ const doc = new test_translator_1.TestTranslator(source.code);
18
+ expect(doc.logger.hasErrors()).toBeFalsy();
19
+ const helpContext = doc.helpContext(position).helpContext;
20
+ expect(helpContext).toEqual({ type, token });
21
+ }
22
+ const source = `source: foo is table('bar') {
23
+ where: bazz ~ 'biff'
24
+ query: foo is {
25
+ group_by: bazz
26
+ where: bop ~ 'blat'
27
+ }
28
+ }
29
+
30
+ query: bar {
31
+ group_by: bazz
32
+ }`;
33
+ test("Supports model properties", () => {
34
+ testHelpContext((0, test_translator_1.markSource) `${source}`, { line: 0, character: 1 }, "model_property", "source:");
35
+ testHelpContext((0, test_translator_1.markSource) `${source}`, { line: 8, character: 1 }, "model_property", "query:");
36
+ });
37
+ test("Supports explore properties", () => {
38
+ testHelpContext((0, test_translator_1.markSource) `${source}`, { line: 1, character: 3 }, "explore_property", "where:");
39
+ testHelpContext((0, test_translator_1.markSource) `${source}`, { line: 2, character: 3 }, "explore_property", "query:");
40
+ });
41
+ test("Supports query properties", () => {
42
+ testHelpContext((0, test_translator_1.markSource) `${source}`, { line: 3, character: 5 }, "query_property", "group_by:");
43
+ testHelpContext((0, test_translator_1.markSource) `${source}`, { line: 4, character: 5 }, "query_property", "where:");
44
+ });
45
+ //# sourceMappingURL=document-help-context-walker.spec.js.map
@@ -0,0 +1 @@
1
+ export {};