data-finder-ts 0.1.4 → 0.1.5

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 (58) hide show
  1. package/dist/{chunk-4JVW4TAB.js → chunk-BGEX377Q.js} +58 -8
  2. package/dist/chunk-BGEX377Q.js.map +1 -0
  3. package/dist/chunk-BKPWV3OF.js +962 -0
  4. package/dist/chunk-BKPWV3OF.js.map +1 -0
  5. package/dist/{chunk-PMPLCEWQ.js → chunk-GPHWC533.js} +2 -2
  6. package/dist/{chunk-FJYA2ASS.js → chunk-KAK75RVS.js} +74 -12
  7. package/dist/chunk-KAK75RVS.js.map +1 -0
  8. package/dist/{chunk-4LNZV6EN.js → chunk-MGEL5RWM.js} +206 -78
  9. package/dist/chunk-MGEL5RWM.js.map +1 -0
  10. package/dist/chunk-PF6EJZHB.js +1015 -0
  11. package/dist/chunk-PF6EJZHB.js.map +1 -0
  12. package/dist/datafinder/attribute.cjs +537 -11
  13. package/dist/datafinder/attribute.cjs.map +1 -1
  14. package/dist/datafinder/attribute.d.cts +29 -7
  15. package/dist/datafinder/attribute.d.ts +29 -7
  16. package/dist/datafinder/attribute.js +2 -2
  17. package/dist/datafinder/runner.cjs +1267 -215
  18. package/dist/datafinder/runner.cjs.map +1 -1
  19. package/dist/datafinder/runner.d.cts +28 -5
  20. package/dist/datafinder/runner.d.ts +28 -5
  21. package/dist/datafinder/runner.js +6 -6
  22. package/dist/datafinder/sql-generator.cjs +1203 -206
  23. package/dist/datafinder/sql-generator.cjs.map +1 -1
  24. package/dist/datafinder/sql-generator.d.cts +19 -5
  25. package/dist/datafinder/sql-generator.d.ts +19 -5
  26. package/dist/datafinder/sql-generator.js +9 -5
  27. package/dist/datafinder/typed-attributes.cjs +693 -88
  28. package/dist/datafinder/typed-attributes.cjs.map +1 -1
  29. package/dist/datafinder/typed-attributes.d.cts +3 -242
  30. package/dist/datafinder/typed-attributes.d.ts +3 -242
  31. package/dist/datafinder/typed-attributes.js +3 -3
  32. package/dist/dialect-CogGPm_y.d.cts +38 -0
  33. package/dist/dialect-aaG1bDi5.d.ts +38 -0
  34. package/dist/index.cjs +1677 -408
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +109 -5
  37. package/dist/index.d.ts +109 -5
  38. package/dist/index.js +321 -11
  39. package/dist/index.js.map +1 -1
  40. package/dist/model/milestoning.cjs +529 -0
  41. package/dist/model/milestoning.cjs.map +1 -1
  42. package/dist/model/milestoning.js +2 -2
  43. package/dist/model/relational.cjs +547 -16
  44. package/dist/model/relational.cjs.map +1 -1
  45. package/dist/model/relational.d.cts +421 -57
  46. package/dist/model/relational.d.ts +421 -57
  47. package/dist/model/relational.js +53 -3
  48. package/dist/typed-attributes-CUTf_6Ru.d.ts +328 -0
  49. package/dist/typed-attributes-CdWXq_78.d.cts +328 -0
  50. package/package.json +3 -2
  51. package/dist/chunk-4JVW4TAB.js.map +0 -1
  52. package/dist/chunk-4LNZV6EN.js.map +0 -1
  53. package/dist/chunk-FJYA2ASS.js.map +0 -1
  54. package/dist/chunk-MH4XMYVB.js +0 -696
  55. package/dist/chunk-MH4XMYVB.js.map +0 -1
  56. package/dist/chunk-UYMOE6YU.js +0 -509
  57. package/dist/chunk-UYMOE6YU.js.map +0 -1
  58. /package/dist/{chunk-PMPLCEWQ.js.map → chunk-GPHWC533.js.map} +0 -0
@@ -1,13 +1,17 @@
1
1
  import {
2
2
  AggregateOperation,
3
+ Alias,
3
4
  Column,
4
5
  ColumnWithJoin,
6
+ InOperation,
5
7
  IsNotNullOperation,
6
8
  IsNullOperation,
9
+ NotInOperation,
10
+ ScalarFunctionOperation,
7
11
  SortOperation,
8
12
  WindowFunctionOperation,
9
13
  WindowSpecification
10
- } from "./chunk-UYMOE6YU.js";
14
+ } from "./chunk-PF6EJZHB.js";
11
15
 
12
16
  // src/datafinder/attribute.ts
13
17
  var Attribute = class _Attribute {
@@ -16,9 +20,11 @@ var Attribute = class _Attribute {
16
20
  _owner;
17
21
  _parent;
18
22
  _embedded;
19
- constructor(displayName, columnName, columnDbType, owner, parent, embedded) {
23
+ _optional;
24
+ constructor(displayName, columnName, columnDbType, owner, parent, embedded, nullable = true, optional = false) {
25
+ this._optional = optional;
20
26
  this._displayName = displayName;
21
- this._column = new Column(columnName, columnDbType, owner);
27
+ this._column = new Column(columnName, columnDbType, owner, false, nullable);
22
28
  this._owner = owner;
23
29
  this._parent = parent;
24
30
  this._embedded = embedded;
@@ -39,10 +45,22 @@ var Attribute = class _Attribute {
39
45
  embedded() {
40
46
  return this._embedded;
41
47
  }
48
+ /** @internal The expression a function of this attribute applies to: its column. */
49
+ functionInput() {
50
+ return this.cwj();
51
+ }
52
+ /** @internal What a function of this attribute is labelled after: its display name. */
53
+ functionLabel() {
54
+ return this._displayName;
55
+ }
56
+ /** @internal This attribute as an operand of arithmetic: its column. */
57
+ arithmeticOperand() {
58
+ return this.cwj();
59
+ }
42
60
  cwj() {
43
- return new ColumnWithJoin(this._column, this._parent, this._embedded?.cwj());
61
+ return new ColumnWithJoin(this._column, this._parent, this._embedded?.cwj(), this._optional);
44
62
  }
45
- /** Count the number of non-null values. Use in a projection with `groupByOp` to aggregate per group. */
63
+ /** Count the number of non-null values. Use in a projection with `groupBy` to aggregate per group. */
46
64
  count() {
47
65
  return new AggregateOperation(
48
66
  this.cwj(),
@@ -50,11 +68,26 @@ var Attribute = class _Attribute {
50
68
  this._displayName + " Count"
51
69
  );
52
70
  }
53
- /** Sort this attribute in ascending order. Pass to `orderByOp` or a window function's `orderBy`. */
71
+ /** Name this column in the result: `f.price().sum().alias('Total')`. */
72
+ alias(name) {
73
+ return new Alias(this, name);
74
+ }
75
+ /** The number of different non-NULL values in the group: `COUNT(DISTINCT column)`. Use with `groupBy` to count per group. */
76
+ countDistinct() {
77
+ return new AggregateOperation(this.cwj(), "COUNT_DISTINCT" /* COUNT_DISTINCT */, this._displayName + " Count Distinct");
78
+ }
79
+ /** The value, or `defaultValue` when it is NULL: `name().orElse('N/A')`. Like `COALESCE` in SQL. */
80
+ orElse(defaultValue) {
81
+ if (!["string", "number", "boolean"].includes(typeof defaultValue)) {
82
+ throw new TypeError(`An orElse default is a string, number or boolean, not ${defaultValue === null ? "null" : typeof defaultValue}`);
83
+ }
84
+ return new ScalarFunctionOperation(this.cwj(), "COALESCE" /* COALESCE */, "Or Else " + this._displayName, void 0, [defaultValue]);
85
+ }
86
+ /** Sort this attribute in ascending order. Pass to `orderBy` or a window function's `orderBy`. */
54
87
  ascending() {
55
88
  return new SortOperation(this.cwj(), "ASC" /* ASC */);
56
89
  }
57
- /** Sort this attribute in descending order. Pass to `orderByOp` or a window function's `orderBy`. */
90
+ /** Sort this attribute in descending order. Pass to `orderBy` or a window function's `orderBy`. */
58
91
  descending() {
59
92
  return new SortOperation(this.cwj(), "DESC" /* DESC */);
60
93
  }
@@ -66,6 +99,23 @@ var Attribute = class _Attribute {
66
99
  isNotNull() {
67
100
  return new IsNotNullOperation(this.cwj());
68
101
  }
102
+ /** Wrap a value as a constant of this attribute's type. Overridden by the typed attributes. */
103
+ toConstant(_value) {
104
+ throw new TypeError(`${this.constructor.name} does not support isIn / isNotIn`);
105
+ }
106
+ _constants(values) {
107
+ const constants = values.map((v) => this.toConstant(v));
108
+ if (constants.length === 0) throw new Error("isIn / isNotIn need at least one value");
109
+ return constants;
110
+ }
111
+ /** Filter to rows where this attribute equals any of `values`. */
112
+ isIn(values) {
113
+ return new InOperation(this.cwj(), this._constants(values));
114
+ }
115
+ /** Filter to rows where this attribute equals none of `values`. Rows with no value are excluded, as in SQL. */
116
+ isNotIn(values) {
117
+ return new NotInOperation(this.cwj(), this._constants(values));
118
+ }
69
119
  _windowSpec(partitionBy, orderBy) {
70
120
  const pbArr = partitionBy === void 0 ? [] : Array.isArray(partitionBy) ? partitionBy : [partitionBy];
71
121
  const pb = pbArr.map((x) => x instanceof _Attribute ? x.cwj() : x);
@@ -177,4 +227,4 @@ var Attribute = class _Attribute {
177
227
  export {
178
228
  Attribute
179
229
  };
180
- //# sourceMappingURL=chunk-4JVW4TAB.js.map
230
+ //# sourceMappingURL=chunk-BGEX377Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/datafinder/attribute.ts"],"sourcesContent":["import {\n Column,\n AggregateOperation,\n AggregateOperator,\n ColumnWithJoin,\n SortOperation,\n SortDirection,\n IsNullOperation,\n IsNotNullOperation,\n InOperation,\n NotInOperation,\n ConstantOperation,\n JoinTreeNodeOperation,\n Alias,\n RelationalOperationElement,\n Aliasable,\n ScalarFunction,\n ScalarFunctionOperation,\n WindowFunction,\n WindowFunctionOperation,\n WindowSpecification,\n} from '../model/relational';\n\n/** A value an attribute can be compared with in `isIn` / `isNotIn`. */\nexport type AttributeValue = string | number | boolean | Date;\n\nexport abstract class Attribute implements Aliasable {\n private readonly _displayName: string;\n private readonly _column: Column;\n private readonly _owner: string;\n private readonly _parent?: JoinTreeNodeOperation;\n private readonly _embedded?: Attribute;\n private readonly _optional: boolean;\n\n constructor(\n displayName: string,\n columnName: string,\n columnDbType: string,\n owner: string,\n parent?: JoinTreeNodeOperation,\n embedded?: Attribute,\n nullable: boolean = true,\n optional: boolean = false,\n ) {\n this._optional = optional;\n this._displayName = displayName;\n this._column = new Column(columnName, columnDbType, owner, false, nullable);\n this._owner = owner;\n this._parent = parent;\n this._embedded = embedded;\n }\n\n column(): Column { return this._column; }\n owner(): string { return this._owner; }\n parent(): JoinTreeNodeOperation | undefined { return this._parent; }\n displayName(): string { return this._displayName; }\n\n /** Alternate attribute on a flat column of the owning table, used in place of this one when its join is elided. */\n embedded(): Attribute | undefined { return this._embedded; }\n\n /** @internal The expression a function of this attribute applies to: its column. */\n functionInput(): RelationalOperationElement {\n return this.cwj();\n }\n\n /** @internal What a function of this attribute is labelled after: its display name. */\n functionLabel(): string {\n return this._displayName;\n }\n\n /** @internal This attribute as an operand of arithmetic: its column. */\n arithmeticOperand(): RelationalOperationElement {\n return this.cwj();\n }\n\n cwj(): ColumnWithJoin {\n return new ColumnWithJoin(this._column, this._parent, this._embedded?.cwj(), this._optional);\n }\n\n /** Count the number of non-null values. Use in a projection with `groupBy` to aggregate per group. */\n count(): AggregateOperation {\n return new AggregateOperation(\n this.cwj(),\n AggregateOperator.COUNT,\n this._displayName + ' Count',\n );\n }\n\n /** Name this column in the result: `f.price().sum().alias('Total')`. */\n alias(name: string): Alias {\n return new Alias(this, name);\n }\n\n /** The number of different non-NULL values in the group: `COUNT(DISTINCT column)`. Use with `groupBy` to count per group. */\n countDistinct(): AggregateOperation {\n return new AggregateOperation(this.cwj(), AggregateOperator.COUNT_DISTINCT, this._displayName + ' Count Distinct');\n }\n\n /** The value, or `defaultValue` when it is NULL: `name().orElse('N/A')`. Like `COALESCE` in SQL. */\n orElse(defaultValue: string | number | boolean): ScalarFunctionOperation {\n if (!['string', 'number', 'boolean'].includes(typeof defaultValue)) {\n throw new TypeError(`An orElse default is a string, number or boolean, not ${defaultValue === null ? 'null' : typeof defaultValue}`);\n }\n return new ScalarFunctionOperation(this.cwj(), ScalarFunction.COALESCE, 'Or Else ' + this._displayName, undefined, [defaultValue]);\n }\n\n /** Sort this attribute in ascending order. Pass to `orderBy` or a window function's `orderBy`. */\n ascending(): SortOperation {\n return new SortOperation(this.cwj(), SortDirection.ASC);\n }\n\n /** Sort this attribute in descending order. Pass to `orderBy` or a window function's `orderBy`. */\n descending(): SortOperation {\n return new SortOperation(this.cwj(), SortDirection.DESC);\n }\n\n /** Filter to rows where this attribute has no value. */\n isNull(): IsNullOperation {\n return new IsNullOperation(this.cwj());\n }\n\n /** Filter to rows where this attribute has a value. */\n isNotNull(): IsNotNullOperation {\n return new IsNotNullOperation(this.cwj());\n }\n\n /** Wrap a value as a constant of this attribute's type. Overridden by the typed attributes. */\n protected toConstant(_value: AttributeValue): ConstantOperation {\n throw new TypeError(`${this.constructor.name} does not support isIn / isNotIn`);\n }\n\n private _constants(values: readonly AttributeValue[]): ConstantOperation[] {\n const constants = values.map(v => this.toConstant(v));\n if (constants.length === 0) throw new Error('isIn / isNotIn need at least one value');\n return constants;\n }\n\n /** Filter to rows where this attribute equals any of `values`. */\n isIn(values: readonly AttributeValue[]): InOperation {\n return new InOperation(this.cwj(), this._constants(values));\n }\n\n /** Filter to rows where this attribute equals none of `values`. Rows with no value are excluded, as in SQL. */\n isNotIn(values: readonly AttributeValue[]): NotInOperation {\n return new NotInOperation(this.cwj(), this._constants(values));\n }\n\n private _windowSpec(\n partitionBy?: Attribute | ColumnWithJoin | (Attribute | ColumnWithJoin)[],\n orderBy?: SortOperation | SortOperation[],\n ): WindowSpecification {\n const pbArr = partitionBy === undefined ? [] : Array.isArray(partitionBy) ? partitionBy : [partitionBy];\n const pb = pbArr.map(x => x instanceof Attribute ? x.cwj() : x);\n const ob = orderBy === undefined ? [] : Array.isArray(orderBy) ? orderBy : [orderBy];\n return new WindowSpecification(pb, ob);\n }\n\n /**\n * Assign a rank to each row within the ordered window, following pandas `Series.rank` conventions.\n *\n * `method` controls tie-breaking (default `'min'`):\n * - `'min'` — tied rows share the lowest rank; the next rank skips.\n * - `'dense'` — like `'min'` but ranks are contiguous (no gaps).\n * - `'first'` — each row gets a unique sequential integer (no ties).\n * - `'max'` — only meaningful with `pct: true` (see below).\n *\n * When `pct: true` the result is a relative rank between 0 and 1:\n * - `method: 'min'` (default) → fraction of values strictly below this row (PERCENT_RANK).\n * - `method: 'max'` → fraction of values at or below this row (cumulative distribution).\n *\n * `partitionBy` restarts the ranking within each group of distinct values.\n */\n rank(opts: {\n method?: 'min' | 'dense' | 'first' | 'max';\n pct?: boolean;\n partitionBy?: Attribute | ColumnWithJoin | (Attribute | ColumnWithJoin)[];\n orderBy?: SortOperation | SortOperation[];\n } = {}): WindowFunctionOperation {\n const { method = 'min', pct = false, partitionBy, orderBy } = opts;\n let func: WindowFunction;\n let name: string;\n if (pct) {\n if (method === 'max') { func = WindowFunction.CUME_DIST; name = 'Cume Dist'; }\n else { func = WindowFunction.PERCENT_RANK; name = 'Percent Rank'; }\n } else if (method === 'first') { func = WindowFunction.ROW_NUMBER; name = 'Row Number'; }\n else if (method === 'dense') { func = WindowFunction.DENSE_RANK; name = 'Dense Rank'; }\n else { func = WindowFunction.RANK; name = 'Rank'; }\n return new WindowFunctionOperation(null, func, name, undefined, [], this._windowSpec(partitionBy, orderBy));\n }\n\n /**\n * Split rows into `buckets` equal-sized quantile bins ordered by `orderBy`.\n * Each row receives a bucket number from 1 (lowest) to `buckets` (highest).\n * Named after `pandas.qcut`.\n */\n qcut(buckets: number, opts: {\n partitionBy?: Attribute | ColumnWithJoin | (Attribute | ColumnWithJoin)[];\n orderBy?: SortOperation | SortOperation[];\n } = {}): WindowFunctionOperation {\n return new WindowFunctionOperation(null, WindowFunction.NTILE, 'Quantile', buckets, [],\n this._windowSpec(opts.partitionBy, opts.orderBy));\n }\n\n /**\n * Return the value of this attribute from `periods` rows earlier (positive) or later (negative)\n * within the ordered window, following `pandas.Series.shift`.\n * Rows with no neighbour at the given offset return `null` (or `fillValue` if provided).\n */\n shift(periods = 1, opts: {\n fillValue?: string | number;\n partitionBy?: Attribute | ColumnWithJoin | (Attribute | ColumnWithJoin)[];\n orderBy?: SortOperation | SortOperation[];\n } = {}): WindowFunctionOperation {\n const extraArgs: (string | number)[] = opts.fillValue !== undefined ? [opts.fillValue] : [];\n const func = periods >= 0 ? WindowFunction.LAG : WindowFunction.LEAD;\n const label = periods >= 0 ? 'Lag' : 'Lead';\n return new WindowFunctionOperation(\n this.cwj(),\n func,\n label + ' ' + this._displayName,\n Math.abs(periods),\n extraArgs,\n this._windowSpec(opts.partitionBy, opts.orderBy),\n );\n }\n\n /**\n * Return the first value of this attribute in the window frame.\n * Use `partitionBy` to restart the frame for each group.\n */\n first(opts: {\n partitionBy?: Attribute | ColumnWithJoin | (Attribute | ColumnWithJoin)[];\n orderBy?: SortOperation | SortOperation[];\n } = {}): WindowFunctionOperation {\n return new WindowFunctionOperation(\n this.cwj(),\n WindowFunction.FIRST_VALUE,\n 'First ' + this._displayName,\n undefined, [],\n this._windowSpec(opts.partitionBy, opts.orderBy),\n );\n }\n\n /**\n * Return the last value of this attribute in the window frame.\n * Use `partitionBy` to restart the frame for each group.\n */\n last(opts: {\n partitionBy?: Attribute | ColumnWithJoin | (Attribute | ColumnWithJoin)[];\n orderBy?: SortOperation | SortOperation[];\n } = {}): WindowFunctionOperation {\n return new WindowFunctionOperation(\n this.cwj(),\n WindowFunction.LAST_VALUE,\n 'Last ' + this._displayName,\n undefined, [],\n this._windowSpec(opts.partitionBy, opts.orderBy),\n );\n }\n}\n"],"mappings":"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","names":[]}