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.
- package/dist/{chunk-4JVW4TAB.js → chunk-BGEX377Q.js} +58 -8
- package/dist/chunk-BGEX377Q.js.map +1 -0
- package/dist/chunk-BKPWV3OF.js +962 -0
- package/dist/chunk-BKPWV3OF.js.map +1 -0
- package/dist/{chunk-PMPLCEWQ.js → chunk-GPHWC533.js} +2 -2
- package/dist/{chunk-FJYA2ASS.js → chunk-KAK75RVS.js} +74 -12
- package/dist/chunk-KAK75RVS.js.map +1 -0
- package/dist/{chunk-4LNZV6EN.js → chunk-MGEL5RWM.js} +206 -78
- package/dist/chunk-MGEL5RWM.js.map +1 -0
- package/dist/chunk-PF6EJZHB.js +1015 -0
- package/dist/chunk-PF6EJZHB.js.map +1 -0
- package/dist/datafinder/attribute.cjs +537 -11
- package/dist/datafinder/attribute.cjs.map +1 -1
- package/dist/datafinder/attribute.d.cts +29 -7
- package/dist/datafinder/attribute.d.ts +29 -7
- package/dist/datafinder/attribute.js +2 -2
- package/dist/datafinder/runner.cjs +1267 -215
- package/dist/datafinder/runner.cjs.map +1 -1
- package/dist/datafinder/runner.d.cts +28 -5
- package/dist/datafinder/runner.d.ts +28 -5
- package/dist/datafinder/runner.js +6 -6
- package/dist/datafinder/sql-generator.cjs +1203 -206
- package/dist/datafinder/sql-generator.cjs.map +1 -1
- package/dist/datafinder/sql-generator.d.cts +19 -5
- package/dist/datafinder/sql-generator.d.ts +19 -5
- package/dist/datafinder/sql-generator.js +9 -5
- package/dist/datafinder/typed-attributes.cjs +693 -88
- package/dist/datafinder/typed-attributes.cjs.map +1 -1
- package/dist/datafinder/typed-attributes.d.cts +3 -242
- package/dist/datafinder/typed-attributes.d.ts +3 -242
- package/dist/datafinder/typed-attributes.js +3 -3
- package/dist/dialect-CogGPm_y.d.cts +38 -0
- package/dist/dialect-aaG1bDi5.d.ts +38 -0
- package/dist/index.cjs +1677 -408
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +109 -5
- package/dist/index.d.ts +109 -5
- package/dist/index.js +321 -11
- package/dist/index.js.map +1 -1
- package/dist/model/milestoning.cjs +529 -0
- package/dist/model/milestoning.cjs.map +1 -1
- package/dist/model/milestoning.js +2 -2
- package/dist/model/relational.cjs +547 -16
- package/dist/model/relational.cjs.map +1 -1
- package/dist/model/relational.d.cts +421 -57
- package/dist/model/relational.d.ts +421 -57
- package/dist/model/relational.js +53 -3
- package/dist/typed-attributes-CUTf_6Ru.d.ts +328 -0
- package/dist/typed-attributes-CdWXq_78.d.cts +328 -0
- package/package.json +3 -2
- package/dist/chunk-4JVW4TAB.js.map +0 -1
- package/dist/chunk-4LNZV6EN.js.map +0 -1
- package/dist/chunk-FJYA2ASS.js.map +0 -1
- package/dist/chunk-MH4XMYVB.js +0 -696
- package/dist/chunk-MH4XMYVB.js.map +0 -1
- package/dist/chunk-UYMOE6YU.js +0 -509
- package/dist/chunk-UYMOE6YU.js.map +0 -1
- /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-
|
|
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
|
-
|
|
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 `
|
|
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
|
-
/**
|
|
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 `
|
|
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-
|
|
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":";;;;;;;;;;;;;;;;AA0BO,IAAe,YAAf,MAAe,WAA+B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YACE,aACA,YACA,cACA,OACA,QACA,UACA,WAAoB,MACpB,WAAoB,OACpB;AACA,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,UAAU,IAAI,OAAO,YAAY,cAAc,OAAO,OAAO,QAAQ;AAC1E,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,SAAiB;AAAE,WAAO,KAAK;AAAA,EAAS;AAAA,EACxC,QAAgB;AAAE,WAAO,KAAK;AAAA,EAAQ;AAAA,EACtC,SAA4C;AAAE,WAAO,KAAK;AAAA,EAAS;AAAA,EACnE,cAAsB;AAAE,WAAO,KAAK;AAAA,EAAc;AAAA;AAAA,EAGlD,WAAkC;AAAE,WAAO,KAAK;AAAA,EAAW;AAAA;AAAA,EAG3D,gBAA4C;AAC1C,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA;AAAA,EAGA,gBAAwB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,oBAAgD;AAC9C,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,MAAsB;AACpB,WAAO,IAAI,eAAe,KAAK,SAAS,KAAK,SAAS,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS;AAAA,EAC7F;AAAA;AAAA,EAGA,QAA4B;AAC1B,WAAO,IAAI;AAAA,MACT,KAAK,IAAI;AAAA;AAAA,MAET,KAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,MAAqB;AACzB,WAAO,IAAI,MAAM,MAAM,IAAI;AAAA,EAC7B;AAAA;AAAA,EAGA,gBAAoC;AAClC,WAAO,IAAI,mBAAmB,KAAK,IAAI,0CAAqC,KAAK,eAAe,iBAAiB;AAAA,EACnH;AAAA;AAAA,EAGA,OAAO,cAAkE;AACvE,QAAI,CAAC,CAAC,UAAU,UAAU,SAAS,EAAE,SAAS,OAAO,YAAY,GAAG;AAClE,YAAM,IAAI,UAAU,yDAAyD,iBAAiB,OAAO,SAAS,OAAO,YAAY,EAAE;AAAA,IACrI;AACA,WAAO,IAAI,wBAAwB,KAAK,IAAI,8BAA4B,aAAa,KAAK,cAAc,QAAW,CAAC,YAAY,CAAC;AAAA,EACnI;AAAA;AAAA,EAGA,YAA2B;AACzB,WAAO,IAAI,cAAc,KAAK,IAAI,kBAAoB;AAAA,EACxD;AAAA;AAAA,EAGA,aAA4B;AAC1B,WAAO,IAAI,cAAc,KAAK,IAAI,oBAAqB;AAAA,EACzD;AAAA;AAAA,EAGA,SAA0B;AACxB,WAAO,IAAI,gBAAgB,KAAK,IAAI,CAAC;AAAA,EACvC;AAAA;AAAA,EAGA,YAAgC;AAC9B,WAAO,IAAI,mBAAmB,KAAK,IAAI,CAAC;AAAA,EAC1C;AAAA;AAAA,EAGU,WAAW,QAA2C;AAC9D,UAAM,IAAI,UAAU,GAAG,KAAK,YAAY,IAAI,kCAAkC;AAAA,EAChF;AAAA,EAEQ,WAAW,QAAwD;AACzE,UAAM,YAAY,OAAO,IAAI,OAAK,KAAK,WAAW,CAAC,CAAC;AACpD,QAAI,UAAU,WAAW,EAAG,OAAM,IAAI,MAAM,wCAAwC;AACpF,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,KAAK,QAAgD;AACnD,WAAO,IAAI,YAAY,KAAK,IAAI,GAAG,KAAK,WAAW,MAAM,CAAC;AAAA,EAC5D;AAAA;AAAA,EAGA,QAAQ,QAAmD;AACzD,WAAO,IAAI,eAAe,KAAK,IAAI,GAAG,KAAK,WAAW,MAAM,CAAC;AAAA,EAC/D;AAAA,EAEQ,YACN,aACA,SACqB;AACrB,UAAM,QAAQ,gBAAgB,SAAY,CAAC,IAAI,MAAM,QAAQ,WAAW,IAAI,cAAc,CAAC,WAAW;AACtG,UAAM,KAAK,MAAM,IAAI,OAAK,aAAa,aAAY,EAAE,IAAI,IAAI,CAAC;AAC9D,UAAM,KAAK,YAAY,SAAY,CAAC,IAAI,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AACnF,WAAO,IAAI,oBAAoB,IAAI,EAAE;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,KAAK,OAKD,CAAC,GAA4B;AAC/B,UAAM,EAAE,SAAS,OAAO,MAAM,OAAO,aAAa,QAAQ,IAAI;AAC9D,QAAI;AACJ,QAAI;AACJ,QAAI,KAAK;AACP,UAAI,WAAW,OAAO;AAAE;AAAiC,eAAO;AAAA,MAAa,OACxE;AAAE;AAAoC,eAAO;AAAA,MAAgB;AAAA,IACpE,WAAW,WAAW,SAAS;AAAE;AAAkC,aAAO;AAAA,IAAc,WAC/E,WAAW,SAAS;AAAE;AAAkC,aAAO;AAAA,IAAc,OACjF;AAAE;AAA4B,aAAO;AAAA,IAAQ;AAClD,WAAO,IAAI,wBAAwB,MAAM,MAAM,MAAM,QAAW,CAAC,GAAG,KAAK,YAAY,aAAa,OAAO,CAAC;AAAA,EAC5G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,SAAiB,OAGlB,CAAC,GAA4B;AAC/B,WAAO,IAAI;AAAA,MAAwB;AAAA;AAAA,MAA4B;AAAA,MAAY;AAAA,MAAS,CAAC;AAAA,MACnF,KAAK,YAAY,KAAK,aAAa,KAAK,OAAO;AAAA,IAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAU,GAAG,OAIf,CAAC,GAA4B;AAC/B,UAAM,YAAiC,KAAK,cAAc,SAAY,CAAC,KAAK,SAAS,IAAI,CAAC;AAC1F,UAAM,OAAO,WAAW;AACxB,UAAM,QAAQ,WAAW,IAAI,QAAQ;AACrC,WAAO,IAAI;AAAA,MACT,KAAK,IAAI;AAAA,MACT;AAAA,MACA,QAAQ,MAAM,KAAK;AAAA,MACnB,KAAK,IAAI,OAAO;AAAA,MAChB;AAAA,MACA,KAAK,YAAY,KAAK,aAAa,KAAK,OAAO;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAGF,CAAC,GAA4B;AAC/B,WAAO,IAAI;AAAA,MACT,KAAK,IAAI;AAAA;AAAA,MAET,WAAW,KAAK;AAAA,MAChB;AAAA,MAAW,CAAC;AAAA,MACZ,KAAK,YAAY,KAAK,aAAa,KAAK,OAAO;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,OAGD,CAAC,GAA4B;AAC/B,WAAO,IAAI;AAAA,MACT,KAAK,IAAI;AAAA;AAAA,MAET,UAAU,KAAK;AAAA,MACf;AAAA,MAAW,CAAC;AAAA,MACZ,KAAK,YAAY,KAAK,aAAa,KAAK,OAAO;AAAA,IACjD;AAAA,EACF;AACF;","names":[]}
|