@malloydata/malloy 0.0.347 → 0.0.349

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.
@@ -342,6 +342,8 @@ export interface BuildPlan {
342
342
  graphs: BuildGraph[];
343
343
  /** Map from sourceId to PersistSource for accessing source details */
344
344
  sources: Record<string, PersistSource>;
345
+ /** Errors and warnings from parsing #@ annotations on persistable sources */
346
+ tagParseLog: LogMessage[];
345
347
  }
346
348
  /**
347
349
  * A wrapper around a source that has #@ persist annotation.
@@ -906,18 +906,19 @@ class Model {
906
906
  throw new Error('Model must have ##! experimental.persistence to use getBuildPlan()');
907
907
  }
908
908
  const allDeps = [];
909
+ const tagParseLog = [];
909
910
  // Walk all objects in the model to find persistent dependencies
910
911
  for (const obj of Object.values(this.modelDef.contents)) {
911
912
  if (obj.type === 'query' || (0, model_1.isSourceDef)(obj)) {
912
- allDeps.push(...(0, persist_utils_1.findPersistentDependencies)(obj, this.modelDef));
913
+ allDeps.push(...(0, persist_utils_1.findPersistentDependencies)(obj, this.modelDef, tagParseLog));
913
914
  }
914
915
  }
915
916
  // Also walk queryList (unnamed queries)
916
917
  for (const query of this.modelDef.queryList) {
917
- allDeps.push(...(0, persist_utils_1.findPersistentDependencies)(query, this.modelDef));
918
+ allDeps.push(...(0, persist_utils_1.findPersistentDependencies)(query, this.modelDef, tagParseLog));
918
919
  }
919
920
  if (allDeps.length === 0) {
920
- return { graphs: [], sources: {} };
921
+ return { graphs: [], sources: {}, tagParseLog };
921
922
  }
922
923
  // Find the minimal set of root graphs
923
924
  const rootNodes = (0, persist_utils_1.minimalBuildGraph)(allDeps);
@@ -952,7 +953,7 @@ class Model {
952
953
  for (const [connectionName, nodes] of graphsByConnection) {
953
954
  graphs.push({ connectionName, nodes: [nodes] });
954
955
  }
955
- return { graphs, sources: sourcesMap };
956
+ return { graphs, sources: sourcesMap, tagParseLog };
956
957
  }
957
958
  }
958
959
  exports.Model = Model;
@@ -1,4 +1,5 @@
1
1
  import type { ModelDef, SourceDef, Query } from './malloy_types';
2
+ import type { LogMessage } from '../lang';
2
3
  import type { BuildNode } from '../api/foundation/types';
3
4
  /**
4
5
  * Find persistent dependencies for a source or query, returning a nested DAG.
@@ -30,7 +31,7 @@ import type { BuildNode } from '../api/foundation/types';
30
31
  * @param modelDef The model definition containing the source registry
31
32
  * @returns Array of BuildNode representing the persistent dependency DAG
32
33
  */
33
- export declare function findPersistentDependencies(root: SourceDef | Query, modelDef: ModelDef): BuildNode[];
34
+ export declare function findPersistentDependencies(root: SourceDef | Query, modelDef: ModelDef, tagParseLog?: LogMessage[]): BuildNode[];
34
35
  /**
35
36
  * Find the minimal set of root build graphs from a forest of BuildNodes.
36
37
  *
@@ -18,24 +18,33 @@ function resolveSource(modelDef, name) {
18
18
  }
19
19
  /**
20
20
  * Check if a source has the #@ persist annotation.
21
+ * Returns both the persist flag and any tag parse errors.
21
22
  */
22
23
  function checkPersistAnnotation(source) {
23
24
  if (!source.annotation)
24
- return false;
25
- const { tag } = (0, annotation_1.annotationToTag)(source.annotation, { prefix: /^#@ / });
26
- return tag.has('persist');
25
+ return { persist: false, log: [] };
26
+ const { tag, log } = (0, annotation_1.annotationToTag)(source.annotation, { prefix: /^#@ / });
27
+ return { persist: tag.has('persist'), log };
27
28
  }
28
29
  /**
29
30
  * Check if a sourceID is persistent, using lazy evaluation and caching.
30
31
  * Sets the persist flag on the registry entry as a side effect.
32
+ * Appends any tag parse errors to the provided log array.
31
33
  */
32
- function isPersistent(sourceID, modelDef) {
34
+ function isPersistent(sourceID, modelDef, tagParseLog) {
33
35
  const value = modelDef.sourceRegistry[sourceID];
34
36
  if (!value)
35
37
  return false;
36
38
  if (value.persist === undefined) {
37
39
  const sourceDef = (0, source_def_utils_1.resolveSourceID)(modelDef, sourceID);
38
- value.persist = sourceDef ? checkPersistAnnotation(sourceDef) : false;
40
+ if (sourceDef) {
41
+ const result = checkPersistAnnotation(sourceDef);
42
+ value.persist = result.persist;
43
+ tagParseLog.push(...result.log);
44
+ }
45
+ else {
46
+ value.persist = false;
47
+ }
39
48
  }
40
49
  return value.persist;
41
50
  }
@@ -69,7 +78,7 @@ function isPersistent(sourceID, modelDef) {
69
78
  * @param modelDef The model definition containing the source registry
70
79
  * @returns Array of BuildNode representing the persistent dependency DAG
71
80
  */
72
- function findPersistentDependencies(root, modelDef) {
81
+ function findPersistentDependencies(root, modelDef, tagParseLog = []) {
73
82
  const visited = new Set();
74
83
  function processSourceID(sourceID) {
75
84
  if (visited.has(sourceID)) {
@@ -81,7 +90,7 @@ function findPersistentDependencies(root, modelDef) {
81
90
  return [];
82
91
  }
83
92
  const childDeps = processSourceDef(sourceDef);
84
- const persistent = isPersistent(sourceID, modelDef);
93
+ const persistent = isPersistent(sourceID, modelDef, tagParseLog);
85
94
  if (persistent) {
86
95
  return [{ sourceID, dependsOn: childDeps }];
87
96
  }
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const MALLOY_VERSION = "0.0.347";
1
+ export declare const MALLOY_VERSION = "0.0.349";
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MALLOY_VERSION = void 0;
4
4
  // generated with 'generate-version-file' script; do not edit manually
5
- exports.MALLOY_VERSION = '0.0.347';
5
+ exports.MALLOY_VERSION = '0.0.349';
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/malloy",
3
- "version": "0.0.347",
3
+ "version": "0.0.349",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": "./dist/index.js",
@@ -45,9 +45,9 @@
45
45
  "generate-version-file": "VERSION=$(npm pkg get version --workspaces=false | tr -d \\\")\necho \"// generated with 'generate-version-file' script; do not edit manually\\nexport const MALLOY_VERSION = '$VERSION';\" > src/version.ts"
46
46
  },
47
47
  "dependencies": {
48
- "@malloydata/malloy-filter": "0.0.347",
49
- "@malloydata/malloy-interfaces": "0.0.347",
50
- "@malloydata/malloy-tag": "0.0.347",
48
+ "@malloydata/malloy-filter": "0.0.349",
49
+ "@malloydata/malloy-interfaces": "0.0.349",
50
+ "@malloydata/malloy-tag": "0.0.349",
51
51
  "@noble/hashes": "^1.8.0",
52
52
  "antlr4ts": "^0.5.0-alpha.4",
53
53
  "assert": "^2.0.0",