@malloydata/malloy 0.0.222-dev241212204326 → 0.0.222

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 (54) hide show
  1. package/dist/lang/ast/expressions/constant-expression.d.ts +1 -0
  2. package/dist/lang/ast/expressions/constant-expression.js +3 -0
  3. package/dist/lang/ast/field-space/dynamic-space.d.ts +2 -0
  4. package/dist/lang/ast/field-space/dynamic-space.js +38 -1
  5. package/dist/lang/ast/field-space/parameter-space.d.ts +1 -0
  6. package/dist/lang/ast/field-space/parameter-space.js +3 -0
  7. package/dist/lang/ast/field-space/query-input-space.d.ts +3 -1
  8. package/dist/lang/ast/field-space/query-input-space.js +5 -1
  9. package/dist/lang/ast/field-space/query-spaces.js +1 -1
  10. package/dist/lang/ast/field-space/refined-space.d.ts +10 -2
  11. package/dist/lang/ast/field-space/refined-space.js +53 -2
  12. package/dist/lang/ast/field-space/static-space.d.ts +1 -0
  13. package/dist/lang/ast/field-space/static-space.js +17 -0
  14. package/dist/lang/ast/index.d.ts +1 -0
  15. package/dist/lang/ast/index.js +1 -0
  16. package/dist/lang/ast/query-items/field-declaration.d.ts +2 -0
  17. package/dist/lang/ast/query-items/field-declaration.js +6 -0
  18. package/dist/lang/ast/query-items/field-references.d.ts +5 -0
  19. package/dist/lang/ast/query-items/field-references.js +16 -2
  20. package/dist/lang/ast/query-properties/declare-fields.d.ts +4 -1
  21. package/dist/lang/ast/query-properties/declare-fields.js +5 -1
  22. package/dist/lang/ast/source-elements/composite-source.js +10 -3
  23. package/dist/lang/ast/source-elements/refined-source.d.ts +3 -1
  24. package/dist/lang/ast/source-elements/refined-source.js +150 -2
  25. package/dist/lang/ast/source-properties/join.d.ts +5 -2
  26. package/dist/lang/ast/source-properties/join.js +8 -1
  27. package/dist/lang/ast/source-properties/renames.d.ts +5 -0
  28. package/dist/lang/ast/source-properties/renames.js +9 -2
  29. package/dist/lang/ast/source-properties/view-field-declaration.d.ts +1 -0
  30. package/dist/lang/ast/source-properties/view-field-declaration.js +3 -0
  31. package/dist/lang/ast/source-properties/views.d.ts +4 -0
  32. package/dist/lang/ast/source-properties/views.js +6 -2
  33. package/dist/lang/ast/source-query-elements/include-item.d.ts +31 -0
  34. package/dist/lang/ast/source-query-elements/include-item.js +53 -0
  35. package/dist/lang/ast/source-query-elements/sq-extend.d.ts +3 -1
  36. package/dist/lang/ast/source-query-elements/sq-extend.js +3 -2
  37. package/dist/lang/ast/types/field-space.d.ts +1 -0
  38. package/dist/lang/ast/types/space-entry.d.ts +1 -0
  39. package/dist/lang/ast/view-elements/reference-view.js +1 -1
  40. package/dist/lang/lib/Malloy/MalloyLexer.d.ts +151 -144
  41. package/dist/lang/lib/Malloy/MalloyLexer.js +1256 -1197
  42. package/dist/lang/lib/Malloy/MalloyParser.d.ts +404 -248
  43. package/dist/lang/lib/Malloy/MalloyParser.js +6981 -5702
  44. package/dist/lang/lib/Malloy/MalloyParserListener.d.ts +123 -0
  45. package/dist/lang/lib/Malloy/MalloyParserVisitor.d.ts +78 -0
  46. package/dist/lang/malloy-to-ast.d.ts +12 -5
  47. package/dist/lang/malloy-to-ast.js +139 -16
  48. package/dist/lang/parse-log.d.ts +14 -0
  49. package/dist/lang/test/annotation.spec.js +149 -0
  50. package/dist/lang/test/composite-field-usage.spec.js +67 -0
  51. package/dist/lang/test/source.spec.js +255 -0
  52. package/dist/model/composite_source_utils.js +3 -1
  53. package/dist/model/malloy_types.d.ts +5 -0
  54. package/package.json +1 -1
@@ -15,6 +15,7 @@ export declare class ConstantFieldSpace implements FieldSpace {
15
15
  dialectName(): string;
16
16
  dialectObj(): undefined;
17
17
  isQueryFieldSpace(): this is QueryFieldSpace;
18
+ isProtectedAccessSpace(): boolean;
18
19
  }
19
20
  export declare class ConstantExpression extends ExpressionDef {
20
21
  readonly expr: ExpressionDef;
@@ -58,6 +58,9 @@ class ConstantFieldSpace {
58
58
  isQueryFieldSpace() {
59
59
  return false;
60
60
  }
61
+ isProtectedAccessSpace() {
62
+ return false;
63
+ }
61
64
  }
62
65
  exports.ConstantFieldSpace = ConstantFieldSpace;
63
66
  class ConstantExpression extends expression_def_1.ExpressionDef {
@@ -12,6 +12,8 @@ export declare abstract class DynamicSpace extends StaticSpace implements Source
12
12
  private complete;
13
13
  private parameters;
14
14
  protected newTimezone?: string;
15
+ protected newAccessModifiers: Map<string, model.AccessModifierLabel>;
16
+ protected newNotes: Map<string, model.Annotation>;
15
17
  constructor(extending: SourceDef);
16
18
  protected setEntry(name: string, value: SpaceEntry): void;
17
19
  addParameters(parameters: HasParameter[]): DynamicSpace;
@@ -61,6 +61,8 @@ class DynamicSpace extends static_space_1.StaticSpace {
61
61
  super(structuredClone(extending), extending.dialect);
62
62
  this.complete = false;
63
63
  this.parameters = [];
64
+ this.newAccessModifiers = new Map();
65
+ this.newNotes = new Map();
64
66
  this.fromSource = extending;
65
67
  this.sourceDef = undefined;
66
68
  }
@@ -112,6 +114,7 @@ class DynamicSpace extends static_space_1.StaticSpace {
112
114
  }
113
115
  this.sourceDef = { ...this.fromSource, fields: [] };
114
116
  this.sourceDef.parameters = parameters;
117
+ const fieldIndices = new Map();
115
118
  // Need to process the entities in specific order
116
119
  const fields = [];
117
120
  const joins = [];
@@ -130,10 +133,11 @@ class DynamicSpace extends static_space_1.StaticSpace {
130
133
  }
131
134
  const reorderFields = [...fields, ...joins, ...turtles];
132
135
  const parameterSpace = this.parameterSpace();
133
- for (const [, field] of reorderFields) {
136
+ for (const [name, field] of reorderFields) {
134
137
  if (field instanceof join_space_field_1.JoinSpaceField) {
135
138
  const joinStruct = field.join.structDef(parameterSpace);
136
139
  if (!error_factory_1.ErrorFactory.didCreate(joinStruct)) {
140
+ fieldIndices.set(name, this.sourceDef.fields.length);
137
141
  this.sourceDef.fields.push(joinStruct);
138
142
  fixupJoins.push([field.join, joinStruct]);
139
143
  }
@@ -141,6 +145,7 @@ class DynamicSpace extends static_space_1.StaticSpace {
141
145
  else {
142
146
  const fieldDef = field.fieldDef();
143
147
  if (fieldDef) {
148
+ fieldIndices.set(name, this.sourceDef.fields.length);
144
149
  this.sourceDef.fields.push(fieldDef);
145
150
  }
146
151
  // TODO I'm just removing this, but perhaps instead I should just filter
@@ -154,6 +159,38 @@ class DynamicSpace extends static_space_1.StaticSpace {
154
159
  for (const [join, missingOn] of fixupJoins) {
155
160
  join.fixupJoinOn(this, missingOn);
156
161
  }
162
+ // Add access modifiers at the end so views don't obey them
163
+ for (const [name, access] of this.newAccessModifiers) {
164
+ const index = this.sourceDef.fields.findIndex(f => { var _a; return (_a = f.as) !== null && _a !== void 0 ? _a : f.name === name; });
165
+ if (index === -1) {
166
+ throw new Error(`Can't find field '${name}' to set access modifier`);
167
+ }
168
+ if (access === 'public') {
169
+ delete this.sourceDef.fields[index].accessModifier;
170
+ }
171
+ else {
172
+ this.sourceDef.fields[index] = {
173
+ ...this.sourceDef.fields[index],
174
+ accessModifier: access,
175
+ };
176
+ }
177
+ }
178
+ // TODO does this need to be done when the space is instantiated?
179
+ // e.g. if a field had a compiler flag on it...
180
+ for (const [name, note] of this.newNotes) {
181
+ const index = this.sourceDef.fields.findIndex(f => { var _a; return (_a = f.as) !== null && _a !== void 0 ? _a : f.name === name; });
182
+ if (index === -1) {
183
+ throw new Error(`Can't find field '${name}' to set access modifier`);
184
+ }
185
+ const field = this.sourceDef.fields[index];
186
+ this.sourceDef.fields[index] = {
187
+ ...field,
188
+ annotation: {
189
+ ...note,
190
+ inherits: field.annotation,
191
+ },
192
+ };
193
+ }
157
194
  }
158
195
  if (this.newTimezone && model.isSourceDef(this.sourceDef)) {
159
196
  this.sourceDef.queryTimezone = this.newTimezone;
@@ -16,4 +16,5 @@ export declare class ParameterSpace implements FieldSpace {
16
16
  dialectName(): string;
17
17
  dialectObj(): Dialect | undefined;
18
18
  isQueryFieldSpace(): this is QueryFieldSpace;
19
+ isProtectedAccessSpace(): boolean;
19
20
  }
@@ -76,6 +76,9 @@ class ParameterSpace {
76
76
  isQueryFieldSpace() {
77
77
  return false;
78
78
  }
79
+ isProtectedAccessSpace() {
80
+ return false;
81
+ }
79
82
  }
80
83
  exports.ParameterSpace = ParameterSpace;
81
84
  //# sourceMappingURL=parameter-space.js.map
@@ -13,6 +13,7 @@ import { QueryOperationSpace } from './query-spaces';
13
13
  import { RefinedSpace } from './refined-space';
14
14
  export declare class QueryInputSpace extends RefinedSpace implements QueryFieldSpace {
15
15
  private queryOutput;
16
+ readonly _isProtectedAccessSpace: boolean;
16
17
  extendList: string[];
17
18
  /**
18
19
  * Because of circularity concerns this constructor is not typed
@@ -20,9 +21,10 @@ export declare class QueryInputSpace extends RefinedSpace implements QueryFieldS
20
21
  * @param input The source which might be extended
21
22
  * @param queryOutput MUST BE A QuerySpace
22
23
  */
23
- constructor(input: SourceDef, queryOutput: QueryOperationSpace);
24
+ constructor(input: SourceDef, queryOutput: QueryOperationSpace, _isProtectedAccessSpace: boolean);
24
25
  extendSource(extendField: Join | AtomicFieldDeclaration): void;
25
26
  isQueryFieldSpace(): this is QueryFieldSpace;
26
27
  outputSpace(): QueryOperationSpace;
27
28
  inputSpace(): this;
29
+ isProtectedAccessSpace(): boolean;
28
30
  }
@@ -32,9 +32,10 @@ class QueryInputSpace extends refined_space_1.RefinedSpace {
32
32
  * @param input The source which might be extended
33
33
  * @param queryOutput MUST BE A QuerySpace
34
34
  */
35
- constructor(input, queryOutput) {
35
+ constructor(input, queryOutput, _isProtectedAccessSpace) {
36
36
  super(input);
37
37
  this.queryOutput = queryOutput;
38
+ this._isProtectedAccessSpace = _isProtectedAccessSpace;
38
39
  this.extendList = [];
39
40
  }
40
41
  extendSource(extendField) {
@@ -55,6 +56,9 @@ class QueryInputSpace extends refined_space_1.RefinedSpace {
55
56
  inputSpace() {
56
57
  return this;
57
58
  }
59
+ isProtectedAccessSpace() {
60
+ return this._isProtectedAccessSpace;
61
+ }
58
62
  }
59
63
  exports.QueryInputSpace = QueryInputSpace;
60
64
  //# sourceMappingURL=query-input-space.js.map
@@ -81,7 +81,7 @@ class QueryOperationSpace extends refined_space_1.RefinedSpace {
81
81
  // (or `getPipeSegment` for index segments); if anyone
82
82
  // tries to access it before that, they'll get an error
83
83
  this._compositeFieldUsage = undefined;
84
- this.exprSpace = new query_input_space_1.QueryInputSpace(queryInputSpace.structDef(), this);
84
+ this.exprSpace = new query_input_space_1.QueryInputSpace(queryInputSpace.structDef(), this, queryInputSpace.isProtectedAccessSpace());
85
85
  if (refineThis)
86
86
  this.addRefineFromFields(refineThis);
87
87
  }
@@ -1,15 +1,23 @@
1
- import { SourceDef } from '../../../model/malloy_types';
1
+ import { AccessModifierLabel, Annotation, DocumentLocation, SourceDef } from '../../../model/malloy_types';
2
2
  import { FieldListEdit } from '../source-properties/field-list-edit';
3
3
  import { DynamicSpace } from './dynamic-space';
4
4
  import { MalloyElement } from '../types/malloy-element';
5
5
  import { ParameterSpace } from './parameter-space';
6
+ import { FieldReference } from '../query-items/field-references';
6
7
  export declare class RefinedSpace extends DynamicSpace {
7
8
  /**
8
9
  * Factory for FieldSpace when there are accept/except edits
9
10
  * @param from A structdef which seeds this space
10
11
  * @param choose A accept/except edit of the "from" fields
11
12
  */
12
- static filteredFrom(from: SourceDef, choose: FieldListEdit | undefined, parameters: ParameterSpace | undefined): RefinedSpace;
13
+ static filteredFrom(from: SourceDef, choose: FieldListEdit | undefined, fieldsToInclude: Set<string> | undefined, renames: {
14
+ as: string;
15
+ name: FieldReference;
16
+ location: DocumentLocation;
17
+ }[] | undefined, parameters: ParameterSpace | undefined): RefinedSpace;
13
18
  pushFields(...defs: MalloyElement[]): void;
14
19
  addField(def: MalloyElement): void;
20
+ addAccessModifiers(ams: Map<string, AccessModifierLabel>): void;
21
+ addNotes(notes: Map<string, Annotation>): void;
22
+ isProtectedAccessSpace(): boolean;
15
23
  }
@@ -25,15 +25,53 @@ Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.RefinedSpace = void 0;
26
26
  const dynamic_space_1 = require("./dynamic-space");
27
27
  const space_entry_1 = require("../types/space-entry");
28
+ const rename_space_field_1 = require("./rename-space-field");
29
+ const space_field_1 = require("../types/space-field");
28
30
  class RefinedSpace extends dynamic_space_1.DynamicSpace {
29
31
  /**
30
32
  * Factory for FieldSpace when there are accept/except edits
31
33
  * @param from A structdef which seeds this space
32
34
  * @param choose A accept/except edit of the "from" fields
33
35
  */
34
- static filteredFrom(from, choose, parameters) {
36
+ static filteredFrom(from, choose, fieldsToInclude, renames, parameters) {
35
37
  const edited = new RefinedSpace(from);
36
- if (choose) {
38
+ const renameMap = new Map();
39
+ for (const rename of renames !== null && renames !== void 0 ? renames : []) {
40
+ if (renameMap.has(rename.name.refString)) {
41
+ rename.name.logError('already-renamed', `${rename.name.refString} already renamed to ${rename.as}`);
42
+ }
43
+ else {
44
+ renameMap.set(rename.name.refString, {
45
+ as: rename.as,
46
+ location: rename.location,
47
+ logTo: rename.name,
48
+ });
49
+ }
50
+ }
51
+ if (fieldsToInclude !== undefined) {
52
+ const oldMap = edited.entries();
53
+ edited.dropEntries();
54
+ for (const [symbol, value] of oldMap) {
55
+ if (fieldsToInclude.has(symbol)) {
56
+ const renamed = renameMap.get(symbol);
57
+ if (renamed) {
58
+ if (value instanceof space_field_1.SpaceField) {
59
+ edited.setEntry(renamed.as, new rename_space_field_1.RenameSpaceField(value, renamed.as, renamed.location));
60
+ }
61
+ else {
62
+ renamed.logTo.logError('cannot-rename-non-field', `Cannot rename \`${symbol}\` which is not a field`);
63
+ }
64
+ }
65
+ else {
66
+ edited.setEntry(symbol, value);
67
+ }
68
+ }
69
+ }
70
+ if (choose !== undefined) {
71
+ choose.logError('accept-except-not-compatible-with-include', "Can't use `accept:` or `except:` with `include`");
72
+ }
73
+ }
74
+ else if (choose) {
37
75
  const names = choose.refs.list;
38
76
  const oldMap = edited.entries();
39
77
  for (const name of names) {
@@ -71,6 +109,19 @@ class RefinedSpace extends dynamic_space_1.DynamicSpace {
71
109
  def.logError('unexpected-element-type', `Internal error, ${def.elementType} not expected in this context`);
72
110
  }
73
111
  }
112
+ addAccessModifiers(ams) {
113
+ for (const [symbol, am] of ams) {
114
+ this.newAccessModifiers.set(symbol, am);
115
+ }
116
+ }
117
+ addNotes(notes) {
118
+ for (const [symbol, note] of notes) {
119
+ this.newNotes.set(symbol, note);
120
+ }
121
+ }
122
+ isProtectedAccessSpace() {
123
+ return true;
124
+ }
74
125
  }
75
126
  exports.RefinedSpace = RefinedSpace;
76
127
  //# sourceMappingURL=refined-space.js.map
@@ -15,6 +15,7 @@ export declare class StaticSpace implements FieldSpace {
15
15
  dialectObj(): Dialect | undefined;
16
16
  defToSpaceField(from: FieldDef): SpaceField;
17
17
  private get map();
18
+ isProtectedAccessSpace(): boolean;
18
19
  protected dropEntries(): void;
19
20
  protected dropEntry(name: string): void;
20
21
  entry(name: string): SpaceEntry | undefined;
@@ -75,6 +75,9 @@ class StaticSpace {
75
75
  }
76
76
  return this.memoMap;
77
77
  }
78
+ isProtectedAccessSpace() {
79
+ return false;
80
+ }
78
81
  dropEntries() {
79
82
  this.memoMap = {};
80
83
  }
@@ -138,6 +141,20 @@ class StaticSpace {
138
141
  text: head.refString,
139
142
  });
140
143
  }
144
+ if (definition === null || definition === void 0 ? void 0 : definition.accessModifier) {
145
+ // TODO path.length === 1 will not work with namespaces
146
+ if (!(this.isProtectedAccessSpace() &&
147
+ definition.accessModifier === 'internal' &&
148
+ path.length === 1)) {
149
+ return {
150
+ error: {
151
+ message: `'${head}' is ${definition === null || definition === void 0 ? void 0 : definition.accessModifier}`,
152
+ code: 'field-not-accessible',
153
+ },
154
+ found: undefined,
155
+ };
156
+ }
157
+ }
141
158
  } // cswenson review todo { else this is SpaceEntry not a field which can only be a param and what is going on? }
142
159
  const joinPath = found instanceof struct_space_field_base_1.StructSpaceFieldBase
143
160
  ? [{ ...found.joinPathElement, name: head.refString }]
@@ -10,6 +10,7 @@ export * from './source-query-elements/sq-source';
10
10
  export * from './source-query-elements/sq-reference';
11
11
  export * from './source-query-elements/sq-extend';
12
12
  export * from './source-query-elements/sq-compose';
13
+ export * from './source-query-elements/include-item';
13
14
  export * from './source-properties/field-list-edit';
14
15
  export * from './source-properties/primary-key';
15
16
  export * from './source-properties/renames';
@@ -48,6 +48,7 @@ __exportStar(require("./source-query-elements/sq-source"), exports);
48
48
  __exportStar(require("./source-query-elements/sq-reference"), exports);
49
49
  __exportStar(require("./source-query-elements/sq-extend"), exports);
50
50
  __exportStar(require("./source-query-elements/sq-compose"), exports);
51
+ __exportStar(require("./source-query-elements/include-item"), exports);
51
52
  __exportStar(require("./source-properties/field-list-edit"), exports);
52
53
  __exportStar(require("./source-properties/primary-key"), exports);
53
54
  __exportStar(require("./source-properties/renames"), exports);
@@ -18,6 +18,7 @@ export declare abstract class AtomicFieldDeclaration extends MalloyElement imple
18
18
  extendNote: typeof extendNoteMethod;
19
19
  note?: Annotation;
20
20
  constructor(expr: ExpressionDef, defineName: string, exprSrc?: string | undefined);
21
+ getName(): string;
21
22
  fieldDef(fs: FieldSpace, exprName: string): FieldDef;
22
23
  abstract typecheckExprValue(expr: ExprValue): void;
23
24
  executesInOutputSpace(): boolean;
@@ -72,6 +73,7 @@ export declare class DefSpace implements FieldSpace {
72
73
  isQueryFieldSpace(): this is QueryFieldSpace;
73
74
  outputSpace(): import("../field-space/query-spaces").QueryOperationSpace;
74
75
  inputSpace(): import("../types/field-space").SourceFieldSpace;
76
+ isProtectedAccessSpace(): boolean;
75
77
  }
76
78
  export declare class FieldDefinitionValue extends SpaceField {
77
79
  readonly space: FieldSpace;
@@ -62,6 +62,9 @@ class AtomicFieldDeclaration extends malloy_element_1.MalloyElement {
62
62
  this.isNoteableObj = true;
63
63
  this.extendNote = noteable_1.extendNoteMethod;
64
64
  }
65
+ getName() {
66
+ return this.defineName;
67
+ }
65
68
  fieldDef(fs, exprName) {
66
69
  /*
67
70
  * In an explore we cannot reference the thing we are defining, you need
@@ -274,6 +277,9 @@ class DefSpace {
274
277
  }
275
278
  throw new Error('Not a query field space');
276
279
  }
280
+ isProtectedAccessSpace() {
281
+ return true;
282
+ }
277
283
  }
278
284
  exports.DefSpace = DefSpace;
279
285
  class FieldDefinitionValue extends space_field_1.SpaceField {
@@ -13,6 +13,7 @@ export declare abstract class FieldReference extends ListOf<FieldName> implement
13
13
  extendNote: typeof extendNoteMethod;
14
14
  constructor(names: FieldName[]);
15
15
  makeEntry(fs: DynamicSpace): void;
16
+ getName(): string;
16
17
  get refToField(): RefToField;
17
18
  get refString(): string;
18
19
  get path(): string[];
@@ -26,6 +27,10 @@ export declare class AcceptExceptFieldReference extends FieldReference {
26
27
  elementType: string;
27
28
  typecheck(): void;
28
29
  }
30
+ export declare class AccessModifierFieldReference extends FieldReference {
31
+ elementType: string;
32
+ typecheck(): void;
33
+ }
29
34
  export declare class ExpressionFieldReference extends FieldReference {
30
35
  elementType: string;
31
36
  typecheck(): void;
@@ -22,7 +22,7 @@
22
22
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
  */
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.FieldReferences = exports.WildcardFieldReference = exports.ViewOrScalarFieldReference = exports.DimensionFieldReference = exports.MeasureFieldReference = exports.DeclareFieldReference = exports.ProjectFieldReference = exports.GroupByFieldReference = exports.AggregateFieldReference = exports.IndexFieldReference = exports.CalculateFieldReference = exports.ParameterFieldReference = exports.PartitionByFieldReference = exports.ExpressionFieldReference = exports.AcceptExceptFieldReference = exports.FieldReference = void 0;
25
+ exports.FieldReferences = exports.WildcardFieldReference = exports.ViewOrScalarFieldReference = exports.DimensionFieldReference = exports.MeasureFieldReference = exports.DeclareFieldReference = exports.ProjectFieldReference = exports.GroupByFieldReference = exports.AggregateFieldReference = exports.IndexFieldReference = exports.CalculateFieldReference = exports.ParameterFieldReference = exports.PartitionByFieldReference = exports.ExpressionFieldReference = exports.AccessModifierFieldReference = exports.AcceptExceptFieldReference = exports.FieldReference = void 0;
26
26
  const reference_field_1 = require("../field-space/reference-field");
27
27
  const definition_list_1 = require("../types/definition-list");
28
28
  const malloy_element_1 = require("../types/malloy-element");
@@ -45,6 +45,9 @@ class FieldReference extends malloy_element_1.ListOf {
45
45
  fs.newEntry(refName, this, new reference_field_1.ReferenceField(this, fromFS));
46
46
  }
47
47
  }
48
+ getName() {
49
+ return this.nameString;
50
+ }
48
51
  get refToField() {
49
52
  return {
50
53
  type: 'fieldref',
@@ -94,6 +97,17 @@ class AcceptExceptFieldReference extends FieldReference {
94
97
  }
95
98
  }
96
99
  exports.AcceptExceptFieldReference = AcceptExceptFieldReference;
100
+ class AccessModifierFieldReference extends FieldReference {
101
+ constructor() {
102
+ super(...arguments);
103
+ this.elementType = 'accessModifierFieldReference';
104
+ }
105
+ // Nothing to typecheck here
106
+ typecheck() {
107
+ return;
108
+ }
109
+ }
110
+ exports.AccessModifierFieldReference = AccessModifierFieldReference;
97
111
  class ExpressionFieldReference extends FieldReference {
98
112
  constructor() {
99
113
  super(...arguments);
@@ -230,7 +244,7 @@ class WildcardFieldReference extends malloy_element_1.MalloyElement {
230
244
  this.isNoteableObj = true;
231
245
  this.extendNote = noteable_1.extendNoteMethod;
232
246
  this.except = new Set();
233
- this.has({ joinPath: joinPath });
247
+ this.has({ joinPath });
234
248
  }
235
249
  getFieldDef() {
236
250
  throw this.internalError('fielddef request from wildcard reference');
@@ -1,11 +1,14 @@
1
+ import { AccessModifierLabel } from '../../../model';
1
2
  import { AtomicFieldDeclaration } from '../query-items/field-declaration';
2
3
  import { DefinitionList } from '../types/definition-list';
3
4
  import { QueryBuilder } from '../types/query-builder';
4
5
  import { LegalRefinementStage, QueryPropertyInterface } from '../types/query-property-interface';
5
6
  export declare class DeclareFields extends DefinitionList<AtomicFieldDeclaration> implements QueryPropertyInterface {
7
+ readonly accessModifier: AccessModifierLabel | undefined;
6
8
  elementType: string;
7
9
  queryRefinementStage: LegalRefinementStage;
8
10
  forceQueryClass: undefined;
9
- constructor(fields: AtomicFieldDeclaration[]);
11
+ constructor(fields: AtomicFieldDeclaration[], accessModifier: AccessModifierLabel | undefined);
10
12
  queryExecute(executeFor: QueryBuilder): void;
13
+ get delarationNames(): string[];
11
14
  }
@@ -26,8 +26,9 @@ exports.DeclareFields = void 0;
26
26
  const definition_list_1 = require("../types/definition-list");
27
27
  const query_property_interface_1 = require("../types/query-property-interface");
28
28
  class DeclareFields extends definition_list_1.DefinitionList {
29
- constructor(fields) {
29
+ constructor(fields, accessModifier) {
30
30
  super(fields);
31
+ this.accessModifier = accessModifier;
31
32
  this.elementType = 'declareFields';
32
33
  this.queryRefinementStage = query_property_interface_1.LegalRefinementStage.Single;
33
34
  this.forceQueryClass = undefined;
@@ -37,6 +38,9 @@ class DeclareFields extends definition_list_1.DefinitionList {
37
38
  executeFor.inputFS.extendSource(qel);
38
39
  }
39
40
  }
41
+ get delarationNames() {
42
+ return this.list.map(el => el.defineName);
43
+ }
40
44
  }
41
45
  exports.DeclareFields = DeclareFields;
42
46
  //# sourceMappingURL=declare-fields.js.map
@@ -28,7 +28,7 @@ class CompositeSource extends source_1.Source {
28
28
  const dialect = sourceDefs[0].dialect;
29
29
  const name = 'composite_source';
30
30
  const fields = [];
31
- const fieldNames = new Set();
31
+ const fieldsByName = new Map();
32
32
  this.sources.forEach((source, index) => {
33
33
  var _a;
34
34
  const sourceDef = sourceDefs[index];
@@ -42,9 +42,12 @@ class CompositeSource extends source_1.Source {
42
42
  source.logWarning('composite-source-atomic-fields-only', `Only atomic fields are supported in composite sources; field \`${field.name}\` is not atomic and will be ignored`);
43
43
  continue;
44
44
  }
45
+ if (field.accessModifier === 'private') {
46
+ continue;
47
+ }
45
48
  const fieldName = (_a = field.as) !== null && _a !== void 0 ? _a : field.name;
46
- if (!fieldNames.has(fieldName)) {
47
- fieldNames.add(fieldName);
49
+ const existing = fieldsByName.get(fieldName);
50
+ if (existing === undefined) {
48
51
  const compositeField = {
49
52
  ...field,
50
53
  name: fieldName,
@@ -54,8 +57,12 @@ class CompositeSource extends source_1.Source {
54
57
  code: this.code,
55
58
  location: this.codeLocation,
56
59
  };
60
+ fieldsByName.set(fieldName, compositeField);
57
61
  fields.push(compositeField);
58
62
  }
63
+ else if (field.accessModifier === 'internal') {
64
+ existing.accessModifier = 'internal';
65
+ }
59
66
  }
60
67
  });
61
68
  return {
@@ -3,15 +3,17 @@ import { HasParameter } from '../parameters/has-parameter';
3
3
  import { SourceDesc } from '../types/source-desc';
4
4
  import { Source } from './source';
5
5
  import { ParameterSpace } from '../field-space/parameter-space';
6
+ import { IncludeItem } from '../source-query-elements/include-item';
6
7
  /**
7
8
  * A Source made from a source reference and a set of refinements
8
9
  */
9
10
  export declare class RefinedSource extends Source {
10
11
  readonly source: Source;
11
12
  readonly refinement: SourceDesc;
13
+ readonly includeList: IncludeItem[] | undefined;
12
14
  elementType: string;
13
15
  currentAnnotation?: Annotation;
14
- constructor(source: Source, refinement: SourceDesc);
16
+ constructor(source: Source, refinement: SourceDesc, includeList: IncludeItem[] | undefined);
15
17
  getSourceDef(parameterSpace: ParameterSpace | undefined): SourceDef;
16
18
  withParameters(parameterSpace: ParameterSpace | undefined, pList: HasParameter[] | undefined): SourceDef;
17
19
  }