velocious 1.0.344 → 1.0.346

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/README.md CHANGED
@@ -9,6 +9,8 @@
9
9
  * Controllers and views for HTTP endpoints
10
10
  * Rails-style nested-attribute writes on frontend-model `save()` (see [docs/nested-attributes.md](docs/nested-attributes.md))
11
11
  * Per-row association counts via `.withCount(...)` on frontend and backend queries (see [docs/with-count.md](docs/with-count.md))
12
+ * Consumer-defined per-row SQL aggregates/computations via `.queryData(...)` on frontend and backend queries (see [docs/query-data.md](docs/query-data.md))
13
+ * Per-record ability checks via `.abilities(...)` on frontend queries + `record.can(action)` (see [docs/abilities.md](docs/abilities.md))
12
14
 
13
15
  # Setup
14
16
 
@@ -3,7 +3,7 @@
3
3
  */
4
4
  /**
5
5
  * @template {typeof import("../record/index.js").default} [MC=typeof import("../record/index.js").default]
6
- * @typedef {import("./index.js").QueryArgsType & {modelClass: MC, joinBasePath?: string[], joinTracker?: import("./join-tracker.js").default, forceQualifyBaseTable?: boolean, withCount?: import("./with-count.js").WithCountEntry[]}} ModelClassQueryArgsType
6
+ * @typedef {import("./index.js").QueryArgsType & {modelClass: MC, joinBasePath?: string[], joinTracker?: import("./join-tracker.js").default, forceQualifyBaseTable?: boolean, withCount?: import("./with-count.js").WithCountEntry[], queryData?: import("./query-data.js").QueryDataEntry[]}} ModelClassQueryArgsType
7
7
  */
8
8
  /**
9
9
  * A generic query over some model type.
@@ -20,6 +20,8 @@ export default class VelociousDatabaseQueryModelClassQuery<MC extends typeof imp
20
20
  _forceQualifyBaseTable: boolean;
21
21
  /** @type {import("./with-count.js").WithCountEntry[]} */
22
22
  _withCount: import("./with-count.js").WithCountEntry[];
23
+ /** @type {import("./query-data.js").QueryDataEntry[]} */
24
+ _queryData: import("./query-data.js").QueryDataEntry[];
23
25
  /** @returns {this} - The clone. */
24
26
  clone(): this;
25
27
  /**
@@ -31,6 +33,32 @@ export default class VelociousDatabaseQueryModelClassQuery<MC extends typeof imp
31
33
  * @returns {this} - This query, for chaining.
32
34
  */
33
35
  withCount(spec: import("./with-count.js").WithCountSpec): this;
36
+ /**
37
+ * Attach one or more consumer-defined, per-row computed values onto
38
+ * every loaded root record. Leaf strings in the spec are names of
39
+ * functions previously registered via `Model.queryData(name, fn)`.
40
+ * Nested object keys are relationship names traced from the root to
41
+ * the model that declares the fn. Every resulting SELECT alias is
42
+ * attached to the **root** record (not to the intermediate joined
43
+ * rows); read values with `record.queryData(aliasName)`.
44
+ *
45
+ * See also `src/database/query/query-data.js`.
46
+ *
47
+ * @param {import("./query-data.js").QueryDataSpec} spec - Spec in shorthand or nested form.
48
+ * @returns {this} - This query, for chaining.
49
+ */
50
+ queryData(spec: import("./query-data.js").QueryDataSpec): this;
51
+ /**
52
+ * Return the table reference (alias or table name) registered for the
53
+ * given relationship chain, relative to the query's current join base
54
+ * path. Convenience wrapper around `getTableReferenceForJoin` for use
55
+ * inside `queryData` callbacks where the writer's intent reads more
56
+ * naturally as "give me the table name for 'tasks'".
57
+ *
58
+ * @param {...string} path - Relationship path segments.
59
+ * @returns {string} - Unquoted table reference.
60
+ */
61
+ tableNameFor(...path: string[]): string;
34
62
  /** @returns {Promise<number>} - Resolves with the count. */
35
63
  count(): Promise<number>;
36
64
  /**
@@ -210,6 +238,7 @@ export type ModelClassQueryArgsType<MC extends typeof import("../record/index.js
210
238
  joinTracker?: import("./join-tracker.js").default;
211
239
  forceQualifyBaseTable?: boolean;
212
240
  withCount?: import("./with-count.js").WithCountEntry[];
241
+ queryData?: import("./query-data.js").QueryDataEntry[];
213
242
  };
214
243
  import DatabaseQuery from "./index.js";
215
244
  import JoinTracker from "./join-tracker.js";
@@ -1 +1 @@
1
- {"version":3,"file":"model-class-query.d.ts","sourceRoot":"","sources":["../../../../src/database/query/model-class-query.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-class-query.d.ts","sourceRoot":"","sources":["../../../../src/database/query/model-class-query.js"],"names":[],"mappings":"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"}