@bitcobblers/wod-wiki-wql 0.7.37 → 0.8.39

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/dist/index.d.cts CHANGED
@@ -61,6 +61,23 @@ type WqlFindTarget = (typeof WQL_FIND_TARGETS)[number];
61
61
  /** Content query scopes (in <scope>). */
62
62
  declare const WQL_SCOPES: readonly ["journal", "collections", "feeds", "all"];
63
63
  type WqlScope = (typeof WQL_SCOPES)[number];
64
+ /** Result planes — `rows:<plane>` narrows raw output-statement rows by the
65
+ * unified store's promoted `outputType` column. The STORE vocabulary is
66
+ * open (core KNOWN_OUTPUT_TYPES, ticket 002: unknowns are stored and
67
+ * returned); the QUERY surface is a closed enum at parse (prototype C7) —
68
+ * reopening toward a registry is a later, separate decision. Custom types
69
+ * stay addressable programmatically via hand-built ASTs. */
70
+ declare const WQL_RESULT_PLANES: readonly ["segment", "system", "load", "event", "compiler", "completion", "analytics", "wellness"];
71
+ type WqlResultPlane = (typeof WQL_RESULT_PLANES)[number];
72
+ /** All `rows:` targets — content planes plus result planes (rows model
73
+ * §1.0: every query selects rows from a target) plus `all`, the explicit
74
+ * no-narrowing pseudo-target (spec v2 decision 1: the bare `rows:{…}`
75
+ * alias retires). Content-plane targets scope by content, not outputType
76
+ * (C4). */
77
+ declare const WQL_ROWS_TARGETS: readonly ["note", "block", "effort", "segment", "system", "load", "event", "compiler", "completion", "analytics", "wellness", "all"];
78
+ type WqlRowsTarget = (typeof WQL_ROWS_TARGETS)[number];
79
+ /** Rows scope filter keys (C4): the exact-match keys a rows query filters by. */
80
+ declare const WQL_ROWS_SCOPE_KEYS: readonly ["result", "block", "note"];
64
81
  /** Content-specific filter keys (beyond the analytics tag keys). */
65
82
  declare const WQL_CONTENT_FILTER_KEYS: readonly ["type", "text", "has", "source", "catalog", "effort", "discipline", "intensity", "note", "page", "origin", "grain", "metric", "block", "result", "tags"];
66
83
  type WqlContentFilterKey = (typeof WQL_CONTENT_FILTER_KEYS)[number];
@@ -238,7 +255,12 @@ interface FindPredicate {
238
255
  unit: 'd' | 'w';
239
256
  };
240
257
  }
241
- interface ParsedQuery {
258
+ /**
259
+ * Result of parsing an analytics (aggregate) query — `agg:metric{filters} …`.
260
+ * Discriminated union member: `family === 'aggregate'` (C5).
261
+ */
262
+ interface ParsedAggregateQuery {
263
+ family: 'aggregate';
242
264
  raw: string;
243
265
  agg: Aggregator;
244
266
  /** Canonical Metric Key (fact row `metricKey`). */
@@ -258,8 +280,9 @@ interface ParsedQuery {
258
280
  }
259
281
  /** Result of parsing a content-discovery query (`find:target{filters} in scope`). */
260
282
  interface ParsedFindQuery {
283
+ family: 'find';
261
284
  raw: string;
262
- /** Content target: 'note' or 'block'. */
285
+ /** Content target — a WQL_FIND_TARGETS value (C7 closed enum). */
263
286
  target: string;
264
287
  filters: TagFilter[];
265
288
  /** Where to look: journal | collections | feeds | all. */
@@ -273,11 +296,13 @@ interface ParsedFindQuery {
273
296
  join?: MetricPredicate;
274
297
  error?: string;
275
298
  }
276
- type AnyParsedQuery = ParsedQuery | ParsedFindQuery | ParsedRowsQuery;
299
+ type AnyParsedQuery = ParsedAggregateQuery | ParsedFindQuery | ParsedRowsQuery;
277
300
  /** Type guard: true for content-discovery queries. */
278
301
  declare function isFindQuery(parsed: AnyParsedQuery): parsed is ParsedFindQuery;
279
302
  /** Type guard: true for rows queries. */
280
303
  declare function isRowsQuery(parsed: AnyParsedQuery): parsed is ParsedRowsQuery;
304
+ /** Type guard: true for analytics (aggregate) queries. */
305
+ declare function isAggregateQuery(parsed: AnyParsedQuery): parsed is ParsedAggregateQuery;
281
306
  interface SeriesPoint {
282
307
  ts: number;
283
308
  value: number;
@@ -290,7 +315,7 @@ interface SeriesPoint {
290
315
  */
291
316
  interface ParsedRowsQuery {
292
317
  raw: string;
293
- /** Family discriminator (the other families are told apart by 'target'/'agg'). */
318
+ /** Family discriminator shared by all three query ASTs (C5). */
294
319
  family: 'rows';
295
320
  /** Output-statement type narrowing from the optional target (`rows:segment{…}`); undefined = all types. */
296
321
  outputType?: string;
@@ -309,9 +334,10 @@ interface Series {
309
334
  unit?: string;
310
335
  }
311
336
  /**
312
- * Parse a WQL query string into either an analytics ParsedQuery or a content
313
- * ParsedFindQuery. Dispatch is textual: a leading `find:` routes to the
314
- * content path, everything else to analytics.
337
+ * Parse a WQL query string into one of the three query families —
338
+ * analytics aggregate, content find, or rows — discriminated by `family`
339
+ * (C5). Dispatch is textual: a leading `find:` routes to the content path,
340
+ * `rows` to the rows path, everything else to analytics.
315
341
  */
316
342
  declare function parseQuery(raw: string): AnyParsedQuery;
317
343
 
@@ -632,7 +658,7 @@ interface FindOptions {
632
658
  anchorNow?: number;
633
659
  }
634
660
  interface QueryResult {
635
- parsed: ParsedQuery;
661
+ parsed: ParsedAggregateQuery;
636
662
  series: Series[];
637
663
  stages: {
638
664
  selected: number;
@@ -672,9 +698,10 @@ declare class QueryService {
672
698
  getFactsByTimeRange(start: number, end: number): Promise<AnalyticsDataPoint[]>;
673
699
  runQuery(raw: string, options?: QueryOptions): Promise<QueryResult>;
674
700
  /**
675
- * Execute a rows query (rows:{…}, #949) — the session results table plane.
676
- * Reads event rows directly over the unified store (ticket 003): no
677
- * WorkoutResult blob parsing; outputType narrowing hits the promoted column.
701
+ * Execute a rows query (rows:<target>{…}, #949/C4) — the session results
702
+ * table plane. Filter rules are validated at parse; this executes only.
703
+ * Reads event rows directly over the unified store: outputType narrowing
704
+ * hits the promoted column; content-plane targets scope by content.
678
705
  */
679
706
  runRows(parsed: ParsedRowsQuery, options?: {
680
707
  anchorNow?: number;
@@ -693,7 +720,7 @@ declare class QueryService {
693
720
  * Execute a find:effort query against the effort registry.
694
721
  */
695
722
  runFindEffort(parsed: ParsedFindQuery): Promise<FindQueryResult>;
696
- run(parsed: ParsedQuery, options?: QueryOptions): Promise<QueryResult>;
723
+ run(parsed: ParsedAggregateQuery, options?: QueryOptions): Promise<QueryResult>;
697
724
  /**
698
725
  * Stages 2–4 — BUCKET → GROUP → AGGREGATE over an already-selected +
699
726
  * filtered `matched` set.
@@ -947,13 +974,13 @@ declare function parseFrontmatterProps(lines: string[]): Record<string, string>;
947
974
  * Auto-generated build version metadata.
948
975
  * Do not edit directly; updated by scripts/stamp-version.ts
949
976
  */
950
- declare const VERSION = "0.7.37";
951
- declare const GIT_SHA = "713c593";
952
- declare const BUILD_TIME = "2026-08-25T00:18:25.714Z";
977
+ declare const VERSION = "0.8.39";
978
+ declare const GIT_SHA = "3c19185";
979
+ declare const BUILD_TIME = "2026-08-26T00:07:31.934Z";
953
980
  declare const SEMVER: {
954
- readonly version: "0.7.37";
955
- readonly gitSha: "713c593";
956
- readonly buildTime: "2026-08-25T00:18:25.714Z";
981
+ readonly version: "0.8.39";
982
+ readonly gitSha: "3c19185";
983
+ readonly buildTime: "2026-08-26T00:07:31.934Z";
957
984
  };
958
985
 
959
- export { type Aggregator, type AnyParsedQuery, BUILD_TIME, type BlockQueryStore, type ComparisonOp, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, type DashboardDocument, type DashboardMeta, type DashboardParsedSection, type DashboardSectionInput, type DashboardToken, type DashboardWidget, type DashboardWidgetType, EFFORT_DISCIPLINES, type EffortDiscipline, type EffortQueryStore, type EventRowIdentity, type FindOptions, type FindPredicate, type FindQueryResult, GIT_SHA, type IEffort, KG_PER_LB, type LinkWidget, type MetricPredicate, type NoteQueryStore, PLANNED_WIDGET_TYPES, type ParsedFindQuery, type ParsedFrontmatter, type ParsedQuery, type ParsedRowsQuery, type ParsedWqlLastSuffix, type ParsedWqlRollupSuffix, type ParsedWqlSuffixes, type QueryOptions, type QueryResult, QueryService, type QueryServiceStores, type QueryWidgetSuffix, type RowsQueryResult, type RowsRun, SEMVER, type Series, type SeriesPoint, type SummaryFactIdentity, type SummaryFactSourceOutput, type TagFilter, type TagValue, UNIT_FAMILIES, type UnifiedEventStore, type UnitFamily, type UnitFamilyDef, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_DISPLAY_UNITS, WQL_FIND_TARGETS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_ROLLUP_PERIODS, WQL_SCOPES, WQL_SOURCES, WQL_TAG_KEYS, WQL_VIRTUAL_DIMS, type WqlAggregator, type WqlCalcTarget, type WqlComparisonOp, type WqlCompletionOptions, type WqlContentFilterKey, type WqlDisplayUnit, type WqlFindTarget, type WqlGrain, type WqlIntensityTier, type WqlKeyword, type WqlMetricAggregate, type WqlMetricFamily, type WqlRollupPeriod, type WqlScope, type WqlSource, type WqlTagKey, type WqlVirtualDim, buildDashboardDocument, buildDashboardScaffold, convert, dashboardSlug, defaultTokenValues, disciplineFactorFor, extractDashboardTokens, extractFrontmatterTags, getList, getScalar, getUnitFamily, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isProposedMetric, isRowsQuery, normalizeSummaryFacts, parseDashboardNote, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, resolveCanonicalMetricKey, resolveDisplayUnit, resolveWidgetType, serializeFrontmatter, setDashboardTokenValue, splitAtWhere, splitWidgetBody, staticNotesFromBlocks, staticTagIndexFromBlocks, stripFrontmatter, substituteTokens, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, wql, wqlCompletion, wqlCompletionSource, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms as wqlTerms };
986
+ export { type Aggregator, type AnyParsedQuery, BUILD_TIME, type BlockQueryStore, type ComparisonOp, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, type DashboardDocument, type DashboardMeta, type DashboardParsedSection, type DashboardSectionInput, type DashboardToken, type DashboardWidget, type DashboardWidgetType, EFFORT_DISCIPLINES, type EffortDiscipline, type EffortQueryStore, type EventRowIdentity, type FindOptions, type FindPredicate, type FindQueryResult, GIT_SHA, type IEffort, KG_PER_LB, type LinkWidget, type MetricPredicate, type NoteQueryStore, PLANNED_WIDGET_TYPES, type ParsedAggregateQuery, type ParsedFindQuery, type ParsedFrontmatter, type ParsedRowsQuery, type ParsedWqlLastSuffix, type ParsedWqlRollupSuffix, type ParsedWqlSuffixes, type QueryOptions, type QueryResult, QueryService, type QueryServiceStores, type QueryWidgetSuffix, type RowsQueryResult, type RowsRun, SEMVER, type Series, type SeriesPoint, type SummaryFactIdentity, type SummaryFactSourceOutput, type TagFilter, type TagValue, UNIT_FAMILIES, type UnifiedEventStore, type UnitFamily, type UnitFamilyDef, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_DISPLAY_UNITS, WQL_FIND_TARGETS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_ROWS_SCOPE_KEYS, WQL_ROWS_TARGETS, WQL_SCOPES, WQL_SOURCES, WQL_TAG_KEYS, WQL_VIRTUAL_DIMS, type WqlAggregator, type WqlCalcTarget, type WqlComparisonOp, type WqlCompletionOptions, type WqlContentFilterKey, type WqlDisplayUnit, type WqlFindTarget, type WqlGrain, type WqlIntensityTier, type WqlKeyword, type WqlMetricAggregate, type WqlMetricFamily, type WqlResultPlane, type WqlRollupPeriod, type WqlRowsTarget, type WqlScope, type WqlSource, type WqlTagKey, type WqlVirtualDim, buildDashboardDocument, buildDashboardScaffold, convert, dashboardSlug, defaultTokenValues, disciplineFactorFor, extractDashboardTokens, extractFrontmatterTags, getList, getScalar, getUnitFamily, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isProposedMetric, isRowsQuery, normalizeSummaryFacts, parseDashboardNote, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, resolveCanonicalMetricKey, resolveDisplayUnit, resolveWidgetType, serializeFrontmatter, setDashboardTokenValue, splitAtWhere, splitWidgetBody, staticNotesFromBlocks, staticTagIndexFromBlocks, stripFrontmatter, substituteTokens, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, wql, wqlCompletion, wqlCompletionSource, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms as wqlTerms };
package/dist/index.d.ts CHANGED
@@ -61,6 +61,23 @@ type WqlFindTarget = (typeof WQL_FIND_TARGETS)[number];
61
61
  /** Content query scopes (in <scope>). */
62
62
  declare const WQL_SCOPES: readonly ["journal", "collections", "feeds", "all"];
63
63
  type WqlScope = (typeof WQL_SCOPES)[number];
64
+ /** Result planes — `rows:<plane>` narrows raw output-statement rows by the
65
+ * unified store's promoted `outputType` column. The STORE vocabulary is
66
+ * open (core KNOWN_OUTPUT_TYPES, ticket 002: unknowns are stored and
67
+ * returned); the QUERY surface is a closed enum at parse (prototype C7) —
68
+ * reopening toward a registry is a later, separate decision. Custom types
69
+ * stay addressable programmatically via hand-built ASTs. */
70
+ declare const WQL_RESULT_PLANES: readonly ["segment", "system", "load", "event", "compiler", "completion", "analytics", "wellness"];
71
+ type WqlResultPlane = (typeof WQL_RESULT_PLANES)[number];
72
+ /** All `rows:` targets — content planes plus result planes (rows model
73
+ * §1.0: every query selects rows from a target) plus `all`, the explicit
74
+ * no-narrowing pseudo-target (spec v2 decision 1: the bare `rows:{…}`
75
+ * alias retires). Content-plane targets scope by content, not outputType
76
+ * (C4). */
77
+ declare const WQL_ROWS_TARGETS: readonly ["note", "block", "effort", "segment", "system", "load", "event", "compiler", "completion", "analytics", "wellness", "all"];
78
+ type WqlRowsTarget = (typeof WQL_ROWS_TARGETS)[number];
79
+ /** Rows scope filter keys (C4): the exact-match keys a rows query filters by. */
80
+ declare const WQL_ROWS_SCOPE_KEYS: readonly ["result", "block", "note"];
64
81
  /** Content-specific filter keys (beyond the analytics tag keys). */
65
82
  declare const WQL_CONTENT_FILTER_KEYS: readonly ["type", "text", "has", "source", "catalog", "effort", "discipline", "intensity", "note", "page", "origin", "grain", "metric", "block", "result", "tags"];
66
83
  type WqlContentFilterKey = (typeof WQL_CONTENT_FILTER_KEYS)[number];
@@ -238,7 +255,12 @@ interface FindPredicate {
238
255
  unit: 'd' | 'w';
239
256
  };
240
257
  }
241
- interface ParsedQuery {
258
+ /**
259
+ * Result of parsing an analytics (aggregate) query — `agg:metric{filters} …`.
260
+ * Discriminated union member: `family === 'aggregate'` (C5).
261
+ */
262
+ interface ParsedAggregateQuery {
263
+ family: 'aggregate';
242
264
  raw: string;
243
265
  agg: Aggregator;
244
266
  /** Canonical Metric Key (fact row `metricKey`). */
@@ -258,8 +280,9 @@ interface ParsedQuery {
258
280
  }
259
281
  /** Result of parsing a content-discovery query (`find:target{filters} in scope`). */
260
282
  interface ParsedFindQuery {
283
+ family: 'find';
261
284
  raw: string;
262
- /** Content target: 'note' or 'block'. */
285
+ /** Content target — a WQL_FIND_TARGETS value (C7 closed enum). */
263
286
  target: string;
264
287
  filters: TagFilter[];
265
288
  /** Where to look: journal | collections | feeds | all. */
@@ -273,11 +296,13 @@ interface ParsedFindQuery {
273
296
  join?: MetricPredicate;
274
297
  error?: string;
275
298
  }
276
- type AnyParsedQuery = ParsedQuery | ParsedFindQuery | ParsedRowsQuery;
299
+ type AnyParsedQuery = ParsedAggregateQuery | ParsedFindQuery | ParsedRowsQuery;
277
300
  /** Type guard: true for content-discovery queries. */
278
301
  declare function isFindQuery(parsed: AnyParsedQuery): parsed is ParsedFindQuery;
279
302
  /** Type guard: true for rows queries. */
280
303
  declare function isRowsQuery(parsed: AnyParsedQuery): parsed is ParsedRowsQuery;
304
+ /** Type guard: true for analytics (aggregate) queries. */
305
+ declare function isAggregateQuery(parsed: AnyParsedQuery): parsed is ParsedAggregateQuery;
281
306
  interface SeriesPoint {
282
307
  ts: number;
283
308
  value: number;
@@ -290,7 +315,7 @@ interface SeriesPoint {
290
315
  */
291
316
  interface ParsedRowsQuery {
292
317
  raw: string;
293
- /** Family discriminator (the other families are told apart by 'target'/'agg'). */
318
+ /** Family discriminator shared by all three query ASTs (C5). */
294
319
  family: 'rows';
295
320
  /** Output-statement type narrowing from the optional target (`rows:segment{…}`); undefined = all types. */
296
321
  outputType?: string;
@@ -309,9 +334,10 @@ interface Series {
309
334
  unit?: string;
310
335
  }
311
336
  /**
312
- * Parse a WQL query string into either an analytics ParsedQuery or a content
313
- * ParsedFindQuery. Dispatch is textual: a leading `find:` routes to the
314
- * content path, everything else to analytics.
337
+ * Parse a WQL query string into one of the three query families —
338
+ * analytics aggregate, content find, or rows — discriminated by `family`
339
+ * (C5). Dispatch is textual: a leading `find:` routes to the content path,
340
+ * `rows` to the rows path, everything else to analytics.
315
341
  */
316
342
  declare function parseQuery(raw: string): AnyParsedQuery;
317
343
 
@@ -632,7 +658,7 @@ interface FindOptions {
632
658
  anchorNow?: number;
633
659
  }
634
660
  interface QueryResult {
635
- parsed: ParsedQuery;
661
+ parsed: ParsedAggregateQuery;
636
662
  series: Series[];
637
663
  stages: {
638
664
  selected: number;
@@ -672,9 +698,10 @@ declare class QueryService {
672
698
  getFactsByTimeRange(start: number, end: number): Promise<AnalyticsDataPoint[]>;
673
699
  runQuery(raw: string, options?: QueryOptions): Promise<QueryResult>;
674
700
  /**
675
- * Execute a rows query (rows:{…}, #949) — the session results table plane.
676
- * Reads event rows directly over the unified store (ticket 003): no
677
- * WorkoutResult blob parsing; outputType narrowing hits the promoted column.
701
+ * Execute a rows query (rows:<target>{…}, #949/C4) — the session results
702
+ * table plane. Filter rules are validated at parse; this executes only.
703
+ * Reads event rows directly over the unified store: outputType narrowing
704
+ * hits the promoted column; content-plane targets scope by content.
678
705
  */
679
706
  runRows(parsed: ParsedRowsQuery, options?: {
680
707
  anchorNow?: number;
@@ -693,7 +720,7 @@ declare class QueryService {
693
720
  * Execute a find:effort query against the effort registry.
694
721
  */
695
722
  runFindEffort(parsed: ParsedFindQuery): Promise<FindQueryResult>;
696
- run(parsed: ParsedQuery, options?: QueryOptions): Promise<QueryResult>;
723
+ run(parsed: ParsedAggregateQuery, options?: QueryOptions): Promise<QueryResult>;
697
724
  /**
698
725
  * Stages 2–4 — BUCKET → GROUP → AGGREGATE over an already-selected +
699
726
  * filtered `matched` set.
@@ -947,13 +974,13 @@ declare function parseFrontmatterProps(lines: string[]): Record<string, string>;
947
974
  * Auto-generated build version metadata.
948
975
  * Do not edit directly; updated by scripts/stamp-version.ts
949
976
  */
950
- declare const VERSION = "0.7.37";
951
- declare const GIT_SHA = "713c593";
952
- declare const BUILD_TIME = "2026-08-25T00:18:25.714Z";
977
+ declare const VERSION = "0.8.39";
978
+ declare const GIT_SHA = "3c19185";
979
+ declare const BUILD_TIME = "2026-08-26T00:07:31.934Z";
953
980
  declare const SEMVER: {
954
- readonly version: "0.7.37";
955
- readonly gitSha: "713c593";
956
- readonly buildTime: "2026-08-25T00:18:25.714Z";
981
+ readonly version: "0.8.39";
982
+ readonly gitSha: "3c19185";
983
+ readonly buildTime: "2026-08-26T00:07:31.934Z";
957
984
  };
958
985
 
959
- export { type Aggregator, type AnyParsedQuery, BUILD_TIME, type BlockQueryStore, type ComparisonOp, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, type DashboardDocument, type DashboardMeta, type DashboardParsedSection, type DashboardSectionInput, type DashboardToken, type DashboardWidget, type DashboardWidgetType, EFFORT_DISCIPLINES, type EffortDiscipline, type EffortQueryStore, type EventRowIdentity, type FindOptions, type FindPredicate, type FindQueryResult, GIT_SHA, type IEffort, KG_PER_LB, type LinkWidget, type MetricPredicate, type NoteQueryStore, PLANNED_WIDGET_TYPES, type ParsedFindQuery, type ParsedFrontmatter, type ParsedQuery, type ParsedRowsQuery, type ParsedWqlLastSuffix, type ParsedWqlRollupSuffix, type ParsedWqlSuffixes, type QueryOptions, type QueryResult, QueryService, type QueryServiceStores, type QueryWidgetSuffix, type RowsQueryResult, type RowsRun, SEMVER, type Series, type SeriesPoint, type SummaryFactIdentity, type SummaryFactSourceOutput, type TagFilter, type TagValue, UNIT_FAMILIES, type UnifiedEventStore, type UnitFamily, type UnitFamilyDef, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_DISPLAY_UNITS, WQL_FIND_TARGETS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_ROLLUP_PERIODS, WQL_SCOPES, WQL_SOURCES, WQL_TAG_KEYS, WQL_VIRTUAL_DIMS, type WqlAggregator, type WqlCalcTarget, type WqlComparisonOp, type WqlCompletionOptions, type WqlContentFilterKey, type WqlDisplayUnit, type WqlFindTarget, type WqlGrain, type WqlIntensityTier, type WqlKeyword, type WqlMetricAggregate, type WqlMetricFamily, type WqlRollupPeriod, type WqlScope, type WqlSource, type WqlTagKey, type WqlVirtualDim, buildDashboardDocument, buildDashboardScaffold, convert, dashboardSlug, defaultTokenValues, disciplineFactorFor, extractDashboardTokens, extractFrontmatterTags, getList, getScalar, getUnitFamily, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isProposedMetric, isRowsQuery, normalizeSummaryFacts, parseDashboardNote, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, resolveCanonicalMetricKey, resolveDisplayUnit, resolveWidgetType, serializeFrontmatter, setDashboardTokenValue, splitAtWhere, splitWidgetBody, staticNotesFromBlocks, staticTagIndexFromBlocks, stripFrontmatter, substituteTokens, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, wql, wqlCompletion, wqlCompletionSource, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms as wqlTerms };
986
+ export { type Aggregator, type AnyParsedQuery, BUILD_TIME, type BlockQueryStore, type ComparisonOp, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, type DashboardDocument, type DashboardMeta, type DashboardParsedSection, type DashboardSectionInput, type DashboardToken, type DashboardWidget, type DashboardWidgetType, EFFORT_DISCIPLINES, type EffortDiscipline, type EffortQueryStore, type EventRowIdentity, type FindOptions, type FindPredicate, type FindQueryResult, GIT_SHA, type IEffort, KG_PER_LB, type LinkWidget, type MetricPredicate, type NoteQueryStore, PLANNED_WIDGET_TYPES, type ParsedAggregateQuery, type ParsedFindQuery, type ParsedFrontmatter, type ParsedRowsQuery, type ParsedWqlLastSuffix, type ParsedWqlRollupSuffix, type ParsedWqlSuffixes, type QueryOptions, type QueryResult, QueryService, type QueryServiceStores, type QueryWidgetSuffix, type RowsQueryResult, type RowsRun, SEMVER, type Series, type SeriesPoint, type SummaryFactIdentity, type SummaryFactSourceOutput, type TagFilter, type TagValue, UNIT_FAMILIES, type UnifiedEventStore, type UnitFamily, type UnitFamilyDef, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_DISPLAY_UNITS, WQL_FIND_TARGETS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_ROWS_SCOPE_KEYS, WQL_ROWS_TARGETS, WQL_SCOPES, WQL_SOURCES, WQL_TAG_KEYS, WQL_VIRTUAL_DIMS, type WqlAggregator, type WqlCalcTarget, type WqlComparisonOp, type WqlCompletionOptions, type WqlContentFilterKey, type WqlDisplayUnit, type WqlFindTarget, type WqlGrain, type WqlIntensityTier, type WqlKeyword, type WqlMetricAggregate, type WqlMetricFamily, type WqlResultPlane, type WqlRollupPeriod, type WqlRowsTarget, type WqlScope, type WqlSource, type WqlTagKey, type WqlVirtualDim, buildDashboardDocument, buildDashboardScaffold, convert, dashboardSlug, defaultTokenValues, disciplineFactorFor, extractDashboardTokens, extractFrontmatterTags, getList, getScalar, getUnitFamily, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isProposedMetric, isRowsQuery, normalizeSummaryFacts, parseDashboardNote, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, resolveCanonicalMetricKey, resolveDisplayUnit, resolveWidgetType, serializeFrontmatter, setDashboardTokenValue, splitAtWhere, splitWidgetBody, staticNotesFromBlocks, staticTagIndexFromBlocks, stripFrontmatter, substituteTokens, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, wql, wqlCompletion, wqlCompletionSource, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms as wqlTerms };
package/dist/index.mjs CHANGED
@@ -1,16 +1,14 @@
1
+ import { KNOWN_OUTPUT_TYPES, MetricType } from '@bitcobblers/wod-wiki-core';
1
2
  import { LRParser } from '@lezer/lr';
2
3
  import { LRLanguage, HighlightStyle, LanguageSupport, syntaxHighlighting, syntaxTree } from '@codemirror/language';
3
4
  import { autocompletion, snippetCompletion } from '@codemirror/autocomplete';
4
5
  import { styleTags, tags } from '@lezer/highlight';
5
- import { MetricType } from '@bitcobblers/wod-wiki-core';
6
6
 
7
7
  var __defProp = Object.defineProperty;
8
8
  var __export = (target, all) => {
9
9
  for (var name in all)
10
10
  __defProp(target, name, { get: all[name], enumerable: true });
11
11
  };
12
-
13
- // src/vocabulary.ts
14
12
  var WQL_METRIC_FAMILIES = ["reps", "distance", "resistance", "elapsed", "power", "pace"];
15
13
  var WQL_METRIC_AGGREGATES = ["totalVolume", "totalDistance", "tis", "sessionLoad"];
16
14
  var WQL_AGGREGATORS = ["sum", "avg", "min", "max", "count", "last", "delta"];
@@ -56,6 +54,9 @@ var WQL_INTENSITY_TIERS = ["low", "moderate", "high"];
56
54
  var WQL_GRAINS = ["summary", "event"];
57
55
  var WQL_FIND_TARGETS = ["note", "block", "effort"];
58
56
  var WQL_SCOPES = ["journal", "collections", "feeds", "all"];
57
+ var WQL_RESULT_PLANES = KNOWN_OUTPUT_TYPES;
58
+ var WQL_ROWS_TARGETS = [...WQL_FIND_TARGETS, ...WQL_RESULT_PLANES, "all"];
59
+ var WQL_ROWS_SCOPE_KEYS = ["result", "block", "note"];
59
60
  var WQL_CONTENT_FILTER_KEYS = ["type", "text", "has", "source", "catalog", ...WQL_TAG_KEYS];
60
61
  var WQL_SOURCES = ["journal", "collections", "feeds", "notes", "blocks", "efforts", "metrics"];
61
62
  var WQL_ROLLUP_PERIODS = ["1d", "1w"];
@@ -232,11 +233,14 @@ function parseWqlSuffixes(raw) {
232
233
 
233
234
  // src/wql.ts
234
235
  function isFindQuery(parsed) {
235
- return "target" in parsed;
236
+ return parsed.family === "find";
236
237
  }
237
238
  function isRowsQuery(parsed) {
238
239
  return parsed.family === "rows";
239
240
  }
241
+ function isAggregateQuery(parsed) {
242
+ return parsed.family === "aggregate";
243
+ }
240
244
  var AGGS = WQL_AGGREGATORS;
241
245
  function cannotParse(text) {
242
246
  return `Cannot parse "${text}". Expected agg:metric{filters} by {dims} .rollup(period)`;
@@ -276,14 +280,28 @@ function parseQuery(raw) {
276
280
  return parseAnalyticsQuery(raw);
277
281
  }
278
282
  function cannotParseRows(text) {
279
- return `Cannot parse "${text}". Expected rows:{result:\u2026|block:\u2026|note:\u2026} or rows:segment{\u2026} last 8w`;
283
+ return `Cannot parse "${text}". Expected rows:all{result:\u2026|block:\u2026|note:\u2026}, rows:<plane>{\u2026}, or rows:segment{\u2026} last 8w`;
284
+ }
285
+ function validateRowsFilters(filters) {
286
+ const scopeKeys = new Set(WQL_ROWS_SCOPE_KEYS);
287
+ const unsupported = filters.filter(
288
+ (f) => !scopeKeys.has(f.key) || f.negate || f.values.some((v) => v.wildcard)
289
+ );
290
+ if (unsupported.length > 0) {
291
+ return `Unsupported rows filter(s): ${unsupported.map((f) => (f.negate ? "!" : "") + f.key).join(", ")}. Rows queries support exact ${WQL_ROWS_SCOPE_KEYS.map((k) => `${k}:`).join(", ")} values.`;
292
+ }
293
+ if (!filters.some((f) => scopeKeys.has(f.key))) {
294
+ return `Rows query needs a scope: ${WQL_ROWS_SCOPE_KEYS.map((k) => `${k}:`).join(", ")}.`;
295
+ }
296
+ return void 0;
280
297
  }
298
+ var BARE_ROWS_RETIRED = 'Bare "rows:" is retired \u2014 name a target: rows:all{\u2026} for every output type, or a plane like rows:segment{\u2026}.';
281
299
  function parseRowsQuery(raw) {
282
300
  const suffixes = parseWqlSuffixes(raw);
283
301
  const { where: whereText, last, groupBy, rollup, primaryText } = suffixes;
284
302
  const result = {
285
- raw,
286
303
  family: "rows",
304
+ raw,
287
305
  filters: [],
288
306
  last: last ? { size: last.size, unit: last.unit } : void 0
289
307
  };
@@ -296,41 +314,48 @@ function parseRowsQuery(raw) {
296
314
  return result;
297
315
  }
298
316
  const text = primaryText.trim();
299
- const brace = text.indexOf("{");
300
- const head = (brace === -1 ? text : text.slice(0, brace)).trim();
301
- const filterText = brace === -1 ? "" : text.slice(brace).trim();
302
- if (head === "rows" || head === "rows:") ; else if (head.startsWith("rows:")) {
303
- const target = head.slice("rows:".length).trim();
304
- if (!target || /\s/.test(target)) {
305
- result.error = cannotParseRows(text);
306
- return result;
307
- }
308
- result.outputType = target;
309
- } else {
317
+ if (/^rows:?\s*[{]?$/.test(text) || /^rows:?\s*[{]/.test(text)) {
318
+ result.error = BARE_ROWS_RETIRED;
319
+ return result;
320
+ }
321
+ const tree = parser.parse(text);
322
+ let syntaxError = false;
323
+ tree.iterate({ enter(node) {
324
+ if (node.type.isError) syntaxError = true;
325
+ } });
326
+ if (syntaxError) {
310
327
  result.error = cannotParseRows(text);
311
328
  return result;
312
329
  }
313
- if (filterText) {
314
- if (!/^\{.*\}$/.test(filterText)) {
315
- result.error = cannotParseRows(text);
316
- return result;
317
- }
318
- const synthetic = `find:_${filterText}`;
319
- const tree = parser.parse(synthetic);
320
- let syntaxError = false;
321
- tree.iterate({ enter(node) {
322
- if (node.type.isError) syntaxError = true;
323
- } });
324
- if (syntaxError) {
325
- result.error = cannotParseRows(text);
326
- return result;
327
- }
328
- result.filters = extractFilters(tree.topNode, synthetic);
329
- const grainError = retiredGrainRollup(result.filters);
330
- if (grainError) {
331
- result.error = grainError;
332
- return result;
333
- }
330
+ const query = tree.topNode;
331
+ const head = query.getChild(Head);
332
+ const aggNode = head?.getChild(Aggregator);
333
+ const metricNode = head?.getChild(Metric);
334
+ if (!head || !aggNode || !metricNode) {
335
+ result.error = BARE_ROWS_RETIRED;
336
+ return result;
337
+ }
338
+ const aggText = text.slice(aggNode.from, aggNode.to);
339
+ if (aggText !== "rows") {
340
+ result.error = cannotParseRows(text);
341
+ return result;
342
+ }
343
+ const target = text.slice(metricNode.from, metricNode.to);
344
+ if (!WQL_ROWS_TARGETS.includes(target)) {
345
+ result.error = `Unknown rows target "${target}". Try: ${WQL_ROWS_TARGETS.join(", ")}`;
346
+ return result;
347
+ }
348
+ if (target !== "all") result.outputType = target;
349
+ result.filters = extractFilters(query, text);
350
+ const grainError = retiredGrainRollup(result.filters);
351
+ if (grainError) {
352
+ result.error = grainError;
353
+ return result;
354
+ }
355
+ const filterError = validateRowsFilters(result.filters);
356
+ if (filterError) {
357
+ result.error = filterError;
358
+ return result;
334
359
  }
335
360
  return result;
336
361
  }
@@ -371,6 +396,7 @@ function parseAnalyticsQuery(raw) {
371
396
  const suffixes = parseWqlSuffixes(raw);
372
397
  const { where: whereText, displayUnit, groupBy, rollup, primaryText: text } = suffixes;
373
398
  const base = {
399
+ family: "aggregate",
374
400
  raw,
375
401
  agg: "sum",
376
402
  metric: "",
@@ -438,6 +464,7 @@ function parseFindQuery(raw) {
438
464
  const suffixes = parseWqlSuffixes(raw);
439
465
  const { where: whereText, last, scope, primaryText: text } = suffixes;
440
466
  const result = {
467
+ family: "find",
441
468
  raw,
442
469
  target: "",
443
470
  filters: [],
@@ -471,6 +498,10 @@ function parseFindQuery(raw) {
471
498
  return result;
472
499
  }
473
500
  result.target = text.slice(metricNode.from, metricNode.to);
501
+ if (!WQL_FIND_TARGETS.includes(result.target)) {
502
+ result.error = `Unknown find target "${result.target}". Try: ${WQL_FIND_TARGETS.join(", ")}`;
503
+ return result;
504
+ }
474
505
  result.filters = extractFilters(query, text);
475
506
  const findGrainError = retiredGrainRollup(result.filters);
476
507
  if (findGrainError) {
@@ -1088,6 +1119,7 @@ function staticTagIndexFromBlocks(blocks) {
1088
1119
 
1089
1120
  // src/QueryService.ts
1090
1121
  var DAY = 864e5;
1122
+ var ROWS_CONTENT_PLANES = new Set(WQL_FIND_TARGETS);
1091
1123
  function localDateString(ts) {
1092
1124
  return new Date(ts).toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
1093
1125
  }
@@ -1296,7 +1328,7 @@ var QueryService = class {
1296
1328
  const parsed = parseQuery(raw);
1297
1329
  if (isFindQuery(parsed)) {
1298
1330
  return {
1299
- parsed: { raw, agg: "count", metric: parsed.target, filters: [], groupBy: [] },
1331
+ parsed: { family: "aggregate", raw, agg: "count", metric: parsed.target, filters: [], groupBy: [] },
1300
1332
  series: [],
1301
1333
  stages: { selected: 0, buckets: 0, aggregated: 0, groups: 0 },
1302
1334
  matched: []
@@ -1304,7 +1336,7 @@ var QueryService = class {
1304
1336
  }
1305
1337
  if (isRowsQuery(parsed)) {
1306
1338
  return {
1307
- parsed: { raw, agg: "count", metric: "rows", filters: [], groupBy: [] },
1339
+ parsed: { family: "aggregate", raw, agg: "count", metric: "rows", filters: [], groupBy: [] },
1308
1340
  series: [],
1309
1341
  stages: { selected: 0, buckets: 0, aggregated: 0, groups: 0 },
1310
1342
  matched: []
@@ -1313,29 +1345,20 @@ var QueryService = class {
1313
1345
  return this.run(parsed, options2);
1314
1346
  }
1315
1347
  /**
1316
- * Execute a rows query (rows:{…}, #949) — the session results table plane.
1317
- * Reads event rows directly over the unified store (ticket 003): no
1318
- * WorkoutResult blob parsing; outputType narrowing hits the promoted column.
1348
+ * Execute a rows query (rows:<target>{…}, #949/C4) — the session results
1349
+ * table plane. Filter rules are validated at parse; this executes only.
1350
+ * Reads event rows directly over the unified store: outputType narrowing
1351
+ * hits the promoted column; content-plane targets scope by content.
1319
1352
  */
1320
1353
  async runRows(parsed, options2 = {}) {
1321
1354
  const empty = { parsed, runs: [] };
1322
1355
  if (parsed.error) return { ...empty, error: parsed.error };
1323
- const ROWS_SCOPE_KEYS = /* @__PURE__ */ new Set(["result", "block", "note"]);
1324
- const unsupported = parsed.filters.filter(
1325
- (f) => !ROWS_SCOPE_KEYS.has(f.key) || f.negate || f.values.some((v) => v.wildcard)
1326
- );
1327
- if (unsupported.length > 0) {
1328
- return {
1329
- ...empty,
1330
- error: `Unsupported rows filter(s): ${unsupported.map((f) => (f.negate ? "!" : "") + f.key).join(", ")}. Rows queries support exact result:, block:, note: values.`
1331
- };
1332
- }
1333
1356
  const scopeValues = (key) => parsed.filters.filter((f) => f.key === key).flatMap((f) => f.values.map((v) => v.value));
1334
1357
  const resultIds = scopeValues("result");
1335
1358
  const blockIds = scopeValues("block");
1336
1359
  const noteIds = scopeValues("note");
1337
1360
  if (resultIds.length + blockIds.length + noteIds.length === 0) {
1338
- return { ...empty, error: "Rows query needs a scope: result:, block:, or note:." };
1361
+ return { ...empty, runs: [] };
1339
1362
  }
1340
1363
  const byResult = /* @__PURE__ */ new Map();
1341
1364
  const collect = (rows) => {
@@ -1359,7 +1382,7 @@ var QueryService = class {
1359
1382
  resultId,
1360
1383
  noteId: rows[0].noteId,
1361
1384
  timestamp: rows[0].timestamp,
1362
- events: parsed.outputType ? rows.filter((row) => row.outputType === parsed.outputType) : rows
1385
+ events: parsed.outputType && !ROWS_CONTENT_PLANES.has(parsed.outputType) ? rows.filter((row) => row.outputType === parsed.outputType) : rows
1363
1386
  })).filter((run) => run.events.length > 0);
1364
1387
  return { parsed, runs };
1365
1388
  }
@@ -1626,6 +1649,7 @@ var QueryService = class {
1626
1649
  };
1627
1650
  const join = parsed.join;
1628
1651
  const findResult = await this.runFind({
1652
+ family: "find",
1629
1653
  raw: "",
1630
1654
  target: join.target,
1631
1655
  filters: join.filters,
@@ -2044,15 +2068,15 @@ sum:$metric{} rollup:1w
2044
2068
  }
2045
2069
 
2046
2070
  // src/version.ts
2047
- var VERSION = "0.7.37";
2048
- var GIT_SHA = "713c593";
2049
- var BUILD_TIME = "2026-08-25T00:18:25.714Z";
2071
+ var VERSION = "0.8.39";
2072
+ var GIT_SHA = "3c19185";
2073
+ var BUILD_TIME = "2026-08-26T00:07:31.934Z";
2050
2074
  var SEMVER = {
2051
- version: "0.7.37",
2052
- gitSha: "713c593",
2053
- buildTime: "2026-08-25T00:18:25.714Z"
2075
+ version: "0.8.39",
2076
+ gitSha: "3c19185",
2077
+ buildTime: "2026-08-26T00:07:31.934Z"
2054
2078
  };
2055
2079
 
2056
- export { BUILD_TIME, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, EFFORT_DISCIPLINES, GIT_SHA, KG_PER_LB, PLANNED_WIDGET_TYPES, QueryService, SEMVER, UNIT_FAMILIES, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_DISPLAY_UNITS, WQL_FIND_TARGETS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_ROLLUP_PERIODS, WQL_SCOPES, WQL_SOURCES, WQL_TAG_KEYS, WQL_VIRTUAL_DIMS, buildDashboardDocument, buildDashboardScaffold, convert, dashboardSlug, defaultTokenValues, disciplineFactorFor, extractDashboardTokens, extractFrontmatterTags, getList, getScalar, getUnitFamily, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isProposedMetric, isRowsQuery, normalizeSummaryFacts, parseDashboardNote, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, resolveCanonicalMetricKey, resolveDisplayUnit, resolveWidgetType, serializeFrontmatter, setDashboardTokenValue, splitAtWhere, splitWidgetBody, staticNotesFromBlocks, staticTagIndexFromBlocks, stripFrontmatter, substituteTokens, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, wql, wqlCompletion, wqlCompletionSource, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms_exports as wqlTerms };
2080
+ export { BUILD_TIME, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, EFFORT_DISCIPLINES, GIT_SHA, KG_PER_LB, PLANNED_WIDGET_TYPES, QueryService, SEMVER, UNIT_FAMILIES, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_DISPLAY_UNITS, WQL_FIND_TARGETS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_ROWS_SCOPE_KEYS, WQL_ROWS_TARGETS, WQL_SCOPES, WQL_SOURCES, WQL_TAG_KEYS, WQL_VIRTUAL_DIMS, buildDashboardDocument, buildDashboardScaffold, convert, dashboardSlug, defaultTokenValues, disciplineFactorFor, extractDashboardTokens, extractFrontmatterTags, getList, getScalar, getUnitFamily, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isProposedMetric, isRowsQuery, normalizeSummaryFacts, parseDashboardNote, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, resolveCanonicalMetricKey, resolveDisplayUnit, resolveWidgetType, serializeFrontmatter, setDashboardTokenValue, splitAtWhere, splitWidgetBody, staticNotesFromBlocks, staticTagIndexFromBlocks, stripFrontmatter, substituteTokens, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, wql, wqlCompletion, wqlCompletionSource, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms_exports as wqlTerms };
2057
2081
  //# sourceMappingURL=index.mjs.map
2058
2082
  //# sourceMappingURL=index.mjs.map